Changeset 902


Ignore:
Timestamp:
Feb 18, 2021, 1:59:28 PM (3 years ago)
Author:
chronos
Message:
  • Modified: Improved generation of contracts.
Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Common/Form/Types/File.php

    r887 r902  
    127127    $File = &$Item['Value'];
    128128    $Properties = array('Name' => $File->Name,
    129       'Size' => $File->GetSize(), 'Directory' => $File->Directory);
     129      'Size' => $File->GetSize(), 'Directory' => $File->Directory, 'Hash' => 'SHA1(CONCAT(Id,Name,Size,Time))');
    130130    $DbResult = $this->Database->select('File', '*', 'Id='.$File->Id);
    131131    if ($DbResult->num_rows > 0)
  • trunk/Common/Global.php

    r887 r902  
    328328function NotBlank(string $Text): string
    329329{
    330   if ($Text == '') return '&nbsp';
     330  if ($Text == '') return ' ';
    331331    else return $Text;
    332332}
  • trunk/Modules/Contract/Contract.php

    r901 r902  
    9191      if ($Row['File'] == null)
    9292      {
    93         $this->Database->insert('File', array('Name' => '', 'Size' => 0, 'Directory' => $DirectoryId, 'Time' => 'NOW()'));
     93        $this->Database->insert('File', array('Name' => '', 'Size' => 0, 'Directory' => $DirectoryId, 'Time' => 'NOW()',
     94          'Hash' => 'SHA1(CONCAT(Id,Name,Size,Time))'));
    9495        $FileId = $this->Database->insert_id;
    9596      } else $FileId = $Row['File'];
    9697      $FileName = 'smlouva-'.$FileId.'.pdf';
    9798      $Bill = new BillContract($this->System);
    98       $Bill->Database = &$this->System->Database;
    99       $Bill->System = &$this->System;
    10099      $Bill->ContractId = $Row['Id'];
    101100      $FullFileName = ModuleFile::Cast($this->System->GetModule('File'))->File->GetDir($DirectoryId).$FileName;
     
    127126  function GenerateHTML(): string
    128127  {
    129     $Output = '<table width="100%"><tr><td colspan="2">'.
     128    $this->BorderTop = '0cm';
     129    $this->BorderLeft = '1cm';
     130    $this->BorderRight = '1cm';
     131    $this->BorderBottom = '0cm';
     132    $this->FontSize = 10;
     133
     134    $DbResult = $this->Database->select('Subject', '*', '`Id`='.$this->System->Config['Finance']['MainSubjectId']);
     135    if ($DbResult->num_rows > 0)
     136    {
     137      $Supplier = $DbResult->fetch_assoc();
     138    } else die('MainSubjectId not found in Subjects.');
     139
     140    $DbResult = $this->Database->query('SELECT * FROM `Contract`');
     141    if ($DbResult->num_rows > 0)
     142    {
     143      $Contract = $DbResult->fetch_array();
     144      $DbResult = $this->Database->query('SELECT * FROM `Subject` WHERE `Id`='.$Contract['Subject']);
     145      if ($DbResult->num_rows > 0)
     146      {
     147        $Subject = $DbResult->fetch_assoc();
     148      } else die('Customer Subject not found.');
     149    } else die('Contract not found.');
     150
     151    $DbResult = $this->Database->select('DocumentLineCode', '*', '`Id`='.$Contract['BillCode']);
     152    if ($DbResult->num_rows > 0)
     153    {
     154      $SupplierBillCode = $DbResult->fetch_assoc();
     155    } else die('BillCode not found.');
     156    $ContractCode = $SupplierBillCode['Name'];
     157
     158    $DbResult = $this->Database->select('Member', '*', '`Subject`='.$Contract['Subject']);
     159    if ($DbResult->num_rows > 0)
     160    {
     161      $Customer = $DbResult->fetch_assoc();
     162    } else die('Customer not found.');
     163
     164    $DbResult = $this->Database->query('SELECT * FROM ServiceCustomerRel '.
     165      'LEFT JOIN Service ON Service.Id=ServiceCustomerRel.Service '.
     166      'WHERE `ServiceCustomerRel`.`Customer`='.$Customer['Id'].' ');
     167    if ($DbResult->num_rows > 0)
     168    {
     169      $Service = $DbResult->fetch_assoc();
     170    } else die('Service not found.');
     171    $ServiceType = $Service['Name'];
     172    $Price = $Service['Price'];
     173
     174    $DbResult = $this->Database->query('SELECT NetworkInterface.LocalIP, NetworkInterface.MAC FROM NetworkDevice '.
     175      'LEFT JOIN NetworkInterface ON NetworkInterface.Device=NetworkDevice.Id '.
     176      'WHERE `NetworkDevice`.`Member`='.$Customer['Id'].' ');
     177    if ($DbResult->num_rows > 0)
     178    {
     179      $NetworkInterface = $DbResult->fetch_assoc();
     180    } else die('NetworkDevice not found.');
     181
     182    $PrefixMultiplier = new PrefixMultiplier();
     183    $MaxSpeed = $PrefixMultiplier->Add($Service['InternetSpeedMax'], 'bit/s');
     184    $MinSpeed = $PrefixMultiplier->Add($Service['InternetSpeedMin'], 'bit/s');
     185    $IpAddress = $NetworkInterface['LocalIP'];
     186    $MacAddress = $NetworkInterface['MAC'];
     187    $NetMask = '';
     188    $DefaultGateway = '';
     189    $Interface = 'Ethernet';
     190    $PrimaryDNS = '10.145.64.8';
     191
     192    $VarSymbol = $Subject['Id'];
     193    $DbResult = $this->Database->query('SELECT FinanceBankAccount.*, CONCAT(FinanceBankAccount.Number, "/", FinanceBank.Code) AS NumberFull FROM FinanceBankAccount '.
     194      'JOIN FinanceBank ON FinanceBank.Id=FinanceBankAccount.Bank '.
     195      'WHERE (FinanceBankAccount.`Subject`='.$this->System->Config['Finance']['MainSubjectId'].') AND (FinanceBankAccount.`Use`=1)');
     196    if ($DbResult->num_rows > 0)
     197    {
     198      $SupplierBankAccount = $DbResult->fetch_assoc();
     199    } else die('Bank account not found.');
     200
     201    $DbResult = $this->Database->select('FinanceBillingPeriod', '*', 'Id='.$Customer['BillingPeriod']);
     202    if ($DbResult->num_rows > 0)
     203    {
     204      $BillingPeriod = $DbResult->fetch_assoc();
     205    } else die('BillingPeriod not found.');
     206    $PaymentPeriod = $BillingPeriod['Name'];
     207
     208    $BankAccount = $SupplierBankAccount['NumberFull'];
     209
     210    $DbResult = $this->Database->select('Member', '*', '`Subject`='.$this->System->Config['Finance']['MainSubjectId']);
     211    if ($DbResult->num_rows > 0)
     212    {
     213      $SupplierMember = $DbResult->fetch_assoc();
     214    } else die('Customer not found.');
     215
     216    $DbResult = $this->Database->query('SELECT Contact.Value AS Phone FROM User '.
     217      'LEFT JOIN Contact ON Contact.User=User.ID AND Contact.Category=1 '.
     218      'WHERE User.Id='.$SupplierMember['ResponsibleUser']);
     219    if ($DbResult->num_rows > 0)
     220    {
     221      $SupplierUser = $DbResult->fetch_assoc();
     222      $SupplierPhone = $SupplierUser['Phone'];
     223    } else $SupplierPhone = '';
     224
     225    $DbResult = $this->Database->query('SELECT Contact.Value AS Phone FROM User '.
     226      'LEFT JOIN Contact ON Contact.User=User.ID AND Contact.Category=1 '.
     227      'WHERE User.Id='.$Customer['ResponsibleUser']);
     228    if ($DbResult->num_rows > 0)
     229    {
     230      $CustomerUser = $DbResult->fetch_assoc();
     231      $CustomerPhone = $CustomerUser['Phone'];
     232      if ($CustomerPhone == null) $CustomerPhone = '';
     233    } else $CustomerPhone = '';
     234
     235    $DbResult = $this->Database->query('SELECT Contact.Value AS Email FROM User '.
     236      'LEFT JOIN Contact ON Contact.User=User.ID AND Contact.Category=4 '.
     237      'WHERE User.Id='.$Customer['ResponsibleUser']);
     238    if ($DbResult->num_rows > 0)
     239    {
     240      $CustomerUser = $DbResult->fetch_assoc();
     241      $CustomerEmail = $CustomerUser['Email'];
     242      if ($CustomerEmail == null) $CustomerEmail = '';
     243    } else $CustomerEmail = '';
     244
     245    $SupplierName = $Supplier['Name'];
     246    $SupplierStreet = $Supplier['AddressStreet'];
     247    $SupplierTown = $Supplier['AddressTown'];
     248    $SupplierPsc = $Supplier['AddressPSC'];
     249    $SupplierIC = $Supplier['IC'];
     250    $SupplierDIC = 'neplátce DPH';
     251
     252    $Web = '<a href="https://www.zdechov.net/">www.zdechov.net</a>';
     253
     254    $CustomerName = $Subject['Name'];
     255    $CustomerStreet = $Subject['AddressStreet'];
     256    $CustomerTown = $Subject['AddressTown'];
     257    $CustomerPsc = $Subject['AddressPSC'];
     258    $CustomerIC = $Subject['IC'];
     259    $CustomerDIC = $Subject['DIC'];
     260    $CustomerPhone = $CustomerPhone;
     261    $CustomerEmail = $CustomerEmail;
     262
     263    $SignDate = HumanDate($Contract['ValidFrom']);
     264
     265
     266    $Output = '<html>
     267    <head></head>
     268    <body><table width="100%"><tr><td colspan="2">'.
    130269      '<font size="6"><div align="center">Smlova o připojení k internetu a poskytování datových služeb</font></div>'.
    131       '<font size="3"><div align="center">Číslo:</font></div>'.
    132       '<hr></td></tr>'.
    133       '<hr>'.
     270      '<font size="3"><div align="center">Číslo: '.$ContractCode.'</font></div>'.
     271      '</td></tr>'.
     272      '</table>'.
    134273      '<br>'.
    135       '<tr><td colspan="2">'.
     274      '<table width="100%">'.
     275      '<tr><th width="25%">Poskytovatel:</td><td width="25%"></td><th width="25%">Odběratel:</th><td width="25%"></td></tr>'.
     276      '<tr><td>'.NotBlank($SupplierName).'</td><td></td><td>'.NotBlank($CustomerName).'</td><td></td></tr>'.
     277      '<tr><td>'.NotBlank($SupplierStreet).'</td><td></td><td>'.NotBlank($CustomerStreet).'</td><td></td></tr>'.
     278      '<tr><td>'.NotBlank($SupplierTown).'</td><td></td><td>'.NotBlank($CustomerTown).'</td><td></td></tr>'.
     279      '<tr><td>'.NotBlank($SupplierPsc).'</td><td></td><td>'.NotBlank($CustomerPsc).'</td><td></td></tr>'.
     280      '<tr><td colspan="4">&nbsp;</td></tr>'.
     281      '<tr><td>IČ:</td><td>'.NotBlank($SupplierIC).'</td><td>Telefon:</td><td>'.NotBlank($CustomerPhone).'</td></tr>'.
     282      '<tr><td>DIČ:</td><td>'.NotBlank($SupplierDIC).'</td><td>E-mail:</td><td>'.NotBlank($CustomerEmail).'</td></tr>'.
     283      '<tr><td>Telefon:</td><td>'.NotBlank($SupplierPhone).'</td><td>RČ/IČ:</td><td>'.NotBlank($CustomerIC).'</td></tr>'.
     284      '<tr><td>Web:</td><td>'.NotBlank($Web).'</td><td>OP/DIČ:</td><td>'.NotBlank($CustomerDIC).'</td></tr>'.
     285      '<tr><td>Bank. spojení:</td><td>'.NotBlank($BankAccount).'</td><td>Přípojné místo:</td><td></td></tr>'.
     286      '</table>'.
     287      '<br/>'.
    136288      '<strong>I. Předmět smlouvy:</strong><br/>'.
    137289      'Smlouva se uzavírá mezi Poskytovatelem a Odběratelem a předmětem smlouvy je poskytování datových služeb a připojení k síti internet, umožňující Odběrateli odebírat v koncovém bodě za úplatu internetovou konektivitu prostřednictvím telekomunikační sítě Poskytovatele. Odběratel se zavazuje za tyto služby Poskytovateli platit cenu ve výši a pravidelných intervalech uvedených v této smlouvě. Smlouva se sjednává na dobu neurčitou.<br/>'.
    138290      '<br/>'.
    139291      '<strong>II. Poskytované služby:</strong><br/>'.
    140       ''.
     292      '<table width="100%" border="1">'.
     293      '<tr><td width="50%" aling="center">Zvolený typ (tarif) služby:</td><td width="50%">'.NotBlank($ServiceType).'</td></tr>'.
     294      '</table>'.
     295      '<br/>'.
     296      '<table width="100%" border="1">'.
     297      '<tr><th colspan="4" align="center">Technické specifikace služby</th></tr>'.
     298      '<tr><td width="25%">Max. rychlost:</td><td width="25%">'.NotBlank($MaxSpeed).'</td><td width="25%">IP adresa:</td><td width="25%">'.NotBlank($IpAddress).'</td></tr>'.
     299      '<tr><td>Min. rychlost:</td><td>'.NotBlank($MinSpeed).'</td><td>Maska podsítě:</td><td>'.NotBlank($NetMask).'</td></tr>'.
     300      '<tr><td>MAC adresa:</td><td>'.NotBlank($MacAddress).'</td><td>Výchozí brána:</td><td>'.NotBlank($DefaultGateway).'</td></tr>'.
     301      '<tr><td>Předávací rozhraní:</td><td>'.NotBlank($Interface).'</td><td>Primární DNS:</td><td>'.NotBlank($PrimaryDNS).'</td></tr>'.
     302      '</table>'.
    141303      '<br/>'.
    142304      '<strong>III. Cena a platební podmínky:</strong><br/>'.
    143305      'Poplatky a pravidelné platby budou na základě této smlouvy hrazeny Odběratelem na bankovní účet Poskytovatele bankovním převodem, nebo složenkou, v uvedené výši a s uvedenou frekvencí. Jako VS bude uvedeno přidělené číslo. V případě prodlení s platbou mohou být uplatněny sankce, či služba pozastavena, nebo zrušena (dle Ceníku a Všeobecných smluvních podmínek).<br/>'.
     306      '<table width="100%">'.
     307      '<tr><td width="25%">Cena služby:</td><td width="25%">'.NotBlank($Price).' Kč</td><td width="25%">Číslo účtu:</td><td width="25%">'.NotBlank($BankAccount).'</td></tr>'.
     308      '<tr><td>Pronájem zařízení:</td><td>0 Kč</td><td>Variabilní symbol:</td><td>'.NotBlank($VarSymbol).'</td></tr>'.
     309      '<tr><td>Frekvence platby:</td><td>'.NotBlank($PaymentPeriod).'</td><td></td><td></td></tr>'.
     310      '<tr><td>První platba:</td><td></td><td></td><td></td></tr>'.
     311      '<tr><td>Splatnost:</td><td>do 21. dne uvedeného měsíce</td><td></td><td></td></tr>'.
     312      '</table>'.
    144313      '<br/>'.
    145314      '<strong>IV. Závěrečná ustanovení:</strong><br/>'.
    146       'Odběratel svým podpisem stvrzuje, že se seznámil a souhlasí se Všeobecnými smluvními podmínkami, aktuálním Ceníkem Poskytovatele a výše uvedenými skutečnostmi, které tvoří součást této Smlouvy. Dálestvrzuje, že souhlasí s provedením instalace a umístěním přijímacího zařízení a kabeláže a nemá proti nim námitky, příp., že vlastní veškerá příslušná povolení a souhlas s jejich umístěním. Smlouva je vyhotovena ve dvou provedeních, kdy Odběratel i Poskytovatel obdrží po jedné. Aktivace služby začíná dnem podpisu této Smlouvy. Výpovědní lhůta je 30 dnů. Případné změny této Smlouvy vyžadují formy vzájemně oběma stranami podepsaného dodatku.<br/>'.
    147       '<br/>'.
     315      'Odběratel svým podpisem stvrzuje, že se seznámil a souhlasí se Všeobecnými smluvními podmínkami, aktuálním Ceníkem Poskytovatele a výše uvedenými skutečnostmi, které tvoří součást této Smlouvy. Dále stvrzuje, že souhlasí s provedením instalace a umístěním přijímacího zařízení a kabeláže a nemá proti nim námitky, příp., že vlastní veškerá příslušná povolení a souhlas s jejich umístěním. Smlouva je vyhotovena ve dvou provedeních, kdy Odběratel i Poskytovatel obdrží po jedné. Aktivace služby začíná dnem podpisu této Smlouvy. Výpovědní lhůta je 30 dnů. Případné změny této Smlouvy vyžadují formy vzájemně oběma stranami podepsaného dodatku.<br/>'.
     316      '<br/>'.
     317      '<table width="100%">'.
     318      '<tr><td width="20%" aling="left">Ve Zděchově</td><td width="20%">dne '.NotBlank($SignDate).'</td></tr>'.
     319      '</table>'.
     320      '<br/><br/><br/><br/>'.
     321      '<table width="100%">'.
     322      '<tr><td width="50%" aling="center">odběratel</td><td width="50%">dodavatel</td></tr>'.
     323      '</table>'.
    148324      '</td></tr>'.
    149       '</table>';
    150 
     325      '</table>'.
     326      '</body></html>';
    151327    return $Output;
    152328  }
  • trunk/Modules/Finance/Manage.php

    r901 r902  
    429429      if ($Row['File'] == null)
    430430      {
    431         $this->Database->insert('File', array('Name' => '', 'Size' => 0, 'Directory' => $DirectoryId, 'Time' => 'NOW()'));
     431        $this->Database->insert('File', array('Name' => '', 'Size' => 0, 'Directory' => $DirectoryId, 'Time' => 'NOW()',
     432          'Hash' => 'SHA1(CONCAT(Id,Name,Size,Time))'));
    432433        $FileId = $this->Database->insert_id;
    433434      } else $FileId = $Row['File'];
    434435      $FileName = 'doklad-'.$FileId.'.pdf';
    435436      $Bill = new BillInvoice($this->System);
    436       $Bill->Database = &$this->System->Database;
    437       $Bill->System = &$this->System;
    438437      $Bill->InvoiceId = $Row['Id'];
    439438      $FullFileName = ModuleFile::Cast($this->System->GetModule('File'))->File->GetDir($DirectoryId).$FileName;
     
    460459      {
    461460        $DbResult2 = $this->Database->insert('File', array('Name' => '', 'Size' => 0,
    462           'Directory' => $DirectoryId, 'Time' => 'NOW()'));
     461          'Directory' => $DirectoryId, 'Time' => 'NOW()', 'Hash' => 'SHA1(CONCAT(Id,Name,Size,Time))'));
    463462        $FileId = $this->Database->insert_id;
    464463      } else $FileId = $Row['File'];
    465464      $FileName = 'doklad2-'.$FileId.'.pdf';
    466465      $Bill = new BillOperation($this->System);
    467       $Bill->Database = &$this->System->Database;
    468       $Bill->System = &$this->System;
    469466      $Bill->OperationId = $Row['Id'];
    470467      $FullFileName = ModuleFile::Cast($this->System->GetModule('File'))->File->GetDir($DirectoryId).$FileName;
  • trunk/Modules/Portal/Portal.php

    r901 r902  
    274274          'WHERE `User`='.ModuleUser::Cast($this->System->GetModule('User'))->User->User['Id']);
    275275        $CustomerUserRel = $DbResult->fetch_assoc();
    276         $CustomerId = $CustomerUserRel['Member'];
     276        $CustomerId = $CustomerUserRel['Customer'];
    277277
    278278        $DbResult = $this->Database->update('Member', 'Id='.$CustomerId,
  • trunk/Packages/Common/Pdf.php

    r901 r902  
    44{
    55  public bool $Checked = false;
     6  public string $BorderTop = '';
     7  public string $BorderLeft = '';
     8  public string $BorderRight = '';
     9  public string $BorderBottom = '';
     10  public int $FontSize = 0;
     11  public string $OutputFormat = 'pdf';
     12  public string $Charset = '8859-2';
    613
    714  function GenerateHTML(): string
     
    2431      } else throw new Exception('htmldoc is not installed.');
    2532    }
     33    $Parameters = '--no-numbered --footer . --webpage --no-embedfonts --charset '.$this->Charset.' -t '.$this->OutputFormat;
     34    if ($this->FontSize > 0) $Parameters .= ' --fontsize '.$this->FontSize;
     35    if ($this->BorderLeft != '') $Parameters .= ' --left '.$this->BorderLeft;
     36    if ($this->BorderTop != '') $Parameters .= ' --top '.$this->BorderTop;
     37    if ($this->BorderRight != '') $Parameters .= ' --right '.$this->BorderRight;
     38    if ($this->BorderBottom != '') $Parameters .= ' --bottom '.$this->BorderBottom;
    2639    $Output = shell_exec('echo "'.addslashes($Encoding->FromUTF8($HtmlCode)).
    27       '"|htmldoc --no-numbered --webpage --no-embedfonts --charset 8859-2 -t pdf -');
     40      '"|htmldoc '.$Parameters.' -');
    2841    return $Output;
    2942  }
  • trunk/Packages/Common/PrefixMultiplier.php

    r874 r902  
    7272class PrefixMultiplier
    7373{
    74   function TruncateDigits($Value, $Digits = 4)
     74  function TruncateDigits($Value, $Digits = 4): string
    7575  {
    7676    for ($II = 2; $II > -6; $II--)
     
    8787  }
    8888
    89   function Add($Value, $Unit, $Digits = 4, $PrefixType = 'Decimal')
     89  function Add($Value, $Unit, $Digits = 4, $PrefixType = 'Decimal'): string
    9090  {
    9191    global $PrefixMultipliers;
Note: See TracChangeset for help on using the changeset viewer.