<?php
include_once('../style.php');
include('code.php');

class InvoiceGenerator
{
  var $SpecificSymbol = 1; // počítačová sít

  function GenerateBill($BillId)
  {
    global $Database, $SpecificSymbol;
  
    $DbResult = $Database->select('finance_bills', '*', 'id='.$BillId);
    $Bill = $DbResult->fetch_array();
 
    $DbResult = $Database->select('users', '*, CONCAT(second_name," ", first_name)  as fullname', 'id='.$Bill['user_id']);
    $User = $DbResult->fetch_array();

    $Dodavka = array();
    $DbResult = $Database->select('finance_bills_items', '*', 'bill_id='.$BillId);
    while($Item = $DbResult->fetch_array())
    {
      $Dodavka[$Item['id']] = $Item; 
    }
  
    $Output = '<table width="100%"><tr><td colspan="2">'.
      '<font size="6"><div align="center">Faktura - daňový doklad</font></div>'.
      '<hr></td></tr>'.
      '<tr><td valign="top" width="50%"><strong>Dodavatel:</strong><br>'.
      'Ing. Jiří Hajda<br>'.
      'Zděchov 208<br>'.
      '75607 Zděchov<br>'.
      'IČO: 75904535<br>'.
      'DIČ: CZ8303255884<br>'.
      'Účet: 218098370 / 0300<br>'.
      'Nejsem plátce DPH<br>'.
      '</td><td valign="top">'.
      '<strong>Odběratel:</strong><br>'.
      $User['fullname'].'<br>'.
      $User['street'].'<br>'.
      $User['psc'].' '.$User['town'].'<br>';
      if($User['ico'] != 0) $Output .= 'IČO: '.$User['ico'].'<br>';
      $Output .= 
      '</td></tr>'.
      '<tr><td colspan="2"><hr></td></tr>'.
      '<tr><td width="50%" valign="top">'.
      '<strong>Platební podmínky:</strong><br>'.
      'Číslo dokladu: '.$Bill['id'].'<br>'.
      'Variabilní symbol: '.$User['id'].'<br>'.
      'Specifický symbol: '.$this->SpecificSymbol.'<br>'.
      'Konstantní symbol:<br>'.
      'Způsob úhrady: převodem'.
      '</td><td valign="top">'.
      '<br>'.
      'Datum vystavení: '.HumanDate($Bill['time_create']).'<br>'.
      'Datum splatnosti: '.HumanDate($Bill['time_due']).'<br>'.
      'Fakturované období: '.HumanDate($Bill['time_from']).' - '.HumanDate($Bill['time_to']).'<br>'.
      '</td></tr>'.
      '<tr><td colspan="2">'.
      '<hr>'.
      '<br>'.
      '<table border="0" width="100%">'.
      '<tr><th align="left">Dodávka</th><th align="right">Množství</th><th align="right">Cena/MJ</th><th align="right">Celkem</th></tr>'.
      '<tr><td colspan="4"><hr></td></tr>';
    
    $Total = 0;
    foreach($Dodavka as $Polozka)
    {
      $Output .= '<tr><td>'.$Polozka['description'].'</td><td align="right">'.$Polozka['quantity'].'</td><td align="right">'.$Polozka['price'].' Kč</td><td align="right">'.($Polozka['quantity'] * $Polozka['price']).' Kč</td></tr>';
      $Total += ($Polozka['quantity'] * $Polozka['price']);
    }
    $Output .= '<tr><th colspan="3" align="left">Celkem</th><th align="right">'.$Total.' Kč</th></tr>';
    $Output .= '</table>'.
      '</td></tr>'.
      '<tr><td colspan="2"><hr></td></tr>'.
      '</table>';

    return($Output);
  }

  function CreateBill($UserId, $Items, $TimeFrom, $TimeTo)
  {
    global $Database;
  
    $Database->insert('finance_bills', array('time_create' => TimeToMysqlDateTime($TimeFrom), 'user_id' => $UserId, 'time_from' => TimeToMysqlDateTime($TimeFrom), 'time_to' => TimeToMysqlDateTime($TimeTo), 'time_due' => TimeToMysqlDateTime($TimeFrom + 15*24*3600)));
    $BillId = $Database->insert_id;
    foreach($Items as $Item)
    {
      $Database->insert('finance_bills_items', array('bill_id' => $BillId, 'description' => $Item['description'], 'price' => $Item['price'], 'quantity' => $Item['quantity']));
    }
    //Header('Content-Type: application/pdf');
    $PdfData = $this->HtmlToPdf($this->GenerateBill($BillId));
    //echo($PdfData);
    $Database->query('UPDATE finance_bills SET pdf = 0x'.bin2hex($PdfData).' WHERE id='.$BillId);
    return($BillId);
  } 

  function ShowStoredBill($BillId)
  {
    global $Database;
    
    $DbResult = $Database->select('finance_bills', 'pdf', 'id='.$BillId);
    if($DbResult->num_rows == 1)
    {
      $DbRow = $DbResult->fetch_array();
      Header('Content-Type: application/pdf');
      Header('Content-Disposition: attachment; filename="faktura-'.$BillId.'.pdf"');
      echo($DbRow['pdf']);
    } else echo('Faktura nenalezena');
  }

  function ShowGeneratedBill($BillId)
  {
    global $Database;
    
    Header('Content-Type: application/pdf');
    Header('Content-Disposition: attachment; filename="faktura-'.$BillId.'.pdf"');
    echo($this->HtmlToPdf($this->GenerateBill($BillId)));
  }

  function HtmlToPdf($HtmlCode)
  {
    $Output = shell_exec('echo "'.addslashes(from_utf8($HtmlCode)).'"|htmldoc --no-numbered --webpage --charset 8859-2 -t pdf -');
    return($Output);
  }

  function CustomGenerate()
  {
    global $Database;
    
    $DbResult = $Database->select('finance_operations', '*', '(date="2008-02-01" AND comment="Poplatek za měsíc Únor") OR '.
    '(date="2008-01-01" AND comment="Poplatek za měsíc Leden") OR (date="2007-12-01" AND comment="Poplatek za měsíc Prosinec") AND (bill_id = 0)');
    while($Row = $DbResult->fetch_array())
    {
      echo($Row['id']."<br>\n");
      $Time = MysqlDateToTime($Row['date']);
      $BillId = $this->CreateBill($Row['user'], array(array('description' => 'Poplatek za připojení k síti', 'price' => (-$Row['money']), 'quantity' => 1)), $Time, $Time + (date("t", time()) - 1) * 24 * 3600);  
     $Database->update('finance_operations', 'id='.$Row['id'], array('bill_id' => $BillId));
    }
  }

  function ShowPage()
  {
    global $Database;
    if(array_key_exists('user', $_GET))
    {
  
      $DbResult = $Database->select('finance_bills', '*', 'user_id='.$_GET['user']);
      while($Item = $DbResult->fetch_array())
      {
        echo('<a href="?bill='.$Item['id'].'">faktura '.$Item['id'].'</a> <a href="?billpdf='.$Item['id'].'">PDF</a> <a href="?billpdf2='.$Item['id'].'">PDF</a><br>');
      } 
    } else
    if(array_key_exists('billpdf', $_GET))
    {
      $this->ShowStoredBill($_GET['billpdf']);
    } else
    if(array_key_exists('billpdf2', $_GET))
    {
      $this->ShowGeneratedBill($_GET['billpdf2']);
    } else
    if(array_key_exists('bill', $_GET))
    {
      echo($this->GenerateBill($_GET['bill']));
    } else
    if(array_key_exists('generate', $_GET))
    {
      $this->CreateBill(1, array(array('description' => 'Poplatek za připojení k síti', 'price' => 1000, 'quantity' => 1)), time(), time());
    } else 
    {
      ShowHeader('Faktury', 'Faktury');
      echo('Faktury:<br>');
      $DbResult = $Database->select('users', '*, CONCAT(second_name," ", first_name)  as fullname');
      while($User = $DbResult->fetch_array())
      {
        echo('<a href="?user='.$User['id'].'">'.$User['fullname'].'</a><br>');
      }
      ShowFooter();
    }
  }
}

$InvoiceGenerator = new InvoiceGenerator;
//$InvoiceGenerator->ShowPage();
?>
