1 | <?php
|
---|
2 |
|
---|
3 | class ModuleContract extends Module
|
---|
4 | {
|
---|
5 | public int $DirectoryId;
|
---|
6 |
|
---|
7 | function __construct(System $System)
|
---|
8 | {
|
---|
9 | parent::__construct($System);
|
---|
10 | $this->Name = 'Contract';
|
---|
11 | $this->Version = '1.0';
|
---|
12 | $this->Creator = 'Chronos';
|
---|
13 | $this->License = 'GNU/GPLv3';
|
---|
14 | $this->Description = 'Contract documents management';
|
---|
15 | $this->Dependencies = array(ModuleDocument::GetName(), ModuleSubject::GetName(), ModuleFile::GetName(), ModuleFinance::GetName());
|
---|
16 | $this->Models = array(Contract::GetClassName());
|
---|
17 |
|
---|
18 | $this->DirectoryId = 0;
|
---|
19 | }
|
---|
20 |
|
---|
21 | function DoStart(): void
|
---|
22 | {
|
---|
23 | global $Config;
|
---|
24 |
|
---|
25 | $this->DirectoryId = $Config['Contract']['DirectoryId'];
|
---|
26 | $this->System->RegisterPage(['smlouvy', 'generovat'], 'PageContractGenerate');
|
---|
27 | $this->System->FormManager->RegisterClass('Contract', array(
|
---|
28 | 'Title' => 'Smlouvy',
|
---|
29 | 'Table' => 'Contract',
|
---|
30 | 'Items' => array(
|
---|
31 | 'DocumentLine' => array('Type' => 'TDocumentLine', 'Caption' => 'Dokladová řada', 'Default' => ''),
|
---|
32 | 'BillCode' => array('Type' => 'TDocumentLineCode', 'Caption' => 'Kód', 'Default' => '', 'Null' => true),
|
---|
33 | 'Subject' => array('Type' => 'TSubject', 'Caption' => 'Subjekt', 'Default' => ''),
|
---|
34 | 'ValidFrom' => array('Type' => 'Date', 'Caption' => 'Platnost od', 'Default' => ''),
|
---|
35 | 'ValidTo' => array('Type' => 'Date', 'Caption' => 'Platnost do', 'Default' => '', 'Null' => true),
|
---|
36 | 'File' => array('Type' => 'TFile', 'Caption' => 'Soubor', 'Default' => '', 'Null' => true),
|
---|
37 | 'Generate' => array('Type' => 'Boolean', 'Caption' => 'Generovat', 'Default' => ''),
|
---|
38 | 'EmployeeSalaries' => array('Type' => 'TEmployeeSalaryListContract', 'Caption' => 'Výplaty zaměstnanců', 'Default' => ''),
|
---|
39 | 'Customers' => array('Type' => 'TCustomerListContract', 'Caption' => 'Zákazníci', 'Default' => ''),
|
---|
40 | ),
|
---|
41 | 'BeforeInsert' => array($this, 'BeforeInsertContract'),
|
---|
42 | 'ItemActions' => array(
|
---|
43 | array('Caption' => 'Generovat', 'URL' => '/smlouvy/generovat/?i=#RowId'),
|
---|
44 | )
|
---|
45 | ));
|
---|
46 | $this->System->FormManager->RegisterFormType('TContract', array(
|
---|
47 | 'Type' => 'Reference',
|
---|
48 | 'Table' => 'Contract',
|
---|
49 | 'Id' => 'Id',
|
---|
50 | 'Name' => '(SELECT `DocumentLineCode`.`Name` FROM `DocumentLineCode` WHERE `Id`=`Contract`.`BillCode`)',
|
---|
51 | 'Filter' => '1',
|
---|
52 | ));
|
---|
53 | }
|
---|
54 |
|
---|
55 | function BeforeInsertContract(Form $Form): array
|
---|
56 | {
|
---|
57 | if (array_key_exists('Time', $Form->Values)) $Year = date("Y", $Form->Values['Time']);
|
---|
58 | else $Year = date("Y", $Form->Values['ValidFrom']);
|
---|
59 | $Form->Values['BillCode'] = ModuleDocument::Cast($this->System->GetModule('Document'))->GetNextDocumentLineNumberId($Form->Values['DocumentLine'], $Year);
|
---|
60 | return $Form->Values;
|
---|
61 | }
|
---|
62 |
|
---|
63 | static function Cast(Module $Module): ModuleContract
|
---|
64 | {
|
---|
65 | if ($Module instanceof ModuleContract)
|
---|
66 | {
|
---|
67 | return $Module;
|
---|
68 | }
|
---|
69 | throw new Exception('Expected ModuleContract type but '.gettype($Module));
|
---|
70 | }
|
---|
71 | }
|
---|
72 |
|
---|
73 | class PageContractGenerate extends Page
|
---|
74 | {
|
---|
75 | function __construct(System $System)
|
---|
76 | {
|
---|
77 | parent::__construct($System);
|
---|
78 | $this->FullTitle = 'Generování smlouvy';
|
---|
79 | $this->ShortTitle = 'Generování smlouvy';
|
---|
80 | $this->ParentClass = 'PagePortal';
|
---|
81 | }
|
---|
82 |
|
---|
83 | function GenerateContract($Where = '')
|
---|
84 | {
|
---|
85 | $DirectoryId = ModuleContract::Cast($this->System->GetModule('Contract'))->DirectoryId;
|
---|
86 | $Output = '';
|
---|
87 | $DbResult = $this->Database->query('SELECT * FROM `Contract` WHERE (`BillCode` <> "") '.
|
---|
88 | 'AND (`ValidFrom` IS NOT NULL) AND (`Generate` = 1)'.$Where);
|
---|
89 | while ($Row = $DbResult->fetch_assoc())
|
---|
90 | {
|
---|
91 | if ($Row['File'] == null)
|
---|
92 | {
|
---|
93 | $this->Database->insert('File', array('Name' => '', 'Size' => 0, 'Directory' => $DirectoryId, 'Time' => 'NOW()'));
|
---|
94 | $FileId = $this->Database->insert_id;
|
---|
95 | } else $FileId = $Row['File'];
|
---|
96 | $FileName = 'smlouva-'.$FileId.'.pdf';
|
---|
97 | $Bill = new BillContract($this->System);
|
---|
98 | $Bill->Database = &$this->System->Database;
|
---|
99 | $Bill->System = &$this->System;
|
---|
100 | $Bill->ContractId = $Row['Id'];
|
---|
101 | $FullFileName = ModuleFile::Cast($this->System->GetModule('File'))->File->GetDir($DirectoryId).$FileName;
|
---|
102 | $Bill->SaveToFile($FullFileName);
|
---|
103 | if (file_exists($FullFileName))
|
---|
104 | {
|
---|
105 | $this->Database->update('File', 'Id='.$FileId, array('Name' => $FileName, 'Size' => filesize($FullFileName), 'Hash' => 'SHA1(CONCAT(Id,Name,Size,Time))'));
|
---|
106 | $this->Database->update('Contract', 'Id='.$Row['Id'], array('File' => $FileId));
|
---|
107 | $Output .= 'Smlouva '.$Row['Id'].' vygenerována do souboru '.$FileName.'<br/>'."\n";
|
---|
108 | } else $Output .= 'Soubor "'.$FullFileName.'" se nepodařilo uložit.';
|
---|
109 | }
|
---|
110 | return $Output;
|
---|
111 | }
|
---|
112 |
|
---|
113 | function Show(): string
|
---|
114 | {
|
---|
115 | if (array_key_exists('i', $_GET))
|
---|
116 | {
|
---|
117 | $Output = $this->GenerateContract(' AND (Id='.($_GET['i'] * 1).')');
|
---|
118 | } else $Output = 'Missing contract id.';
|
---|
119 | return $Output;
|
---|
120 | }
|
---|
121 | }
|
---|
122 |
|
---|
123 | class BillContract extends Pdf
|
---|
124 | {
|
---|
125 | public string $ContractId;
|
---|
126 |
|
---|
127 | function GenerateHTML(): string
|
---|
128 | {
|
---|
129 | $Output = '<table width="100%"><tr><td colspan="2">'.
|
---|
130 | '<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>'.
|
---|
134 | '<br>'.
|
---|
135 | '<tr><td colspan="2">'.
|
---|
136 | '<strong>I. Předmět smlouvy:</strong><br/>'.
|
---|
137 | '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/>'.
|
---|
138 | '<br/>'.
|
---|
139 | '<strong>II. Poskytované služby:</strong><br/>'.
|
---|
140 | ''.
|
---|
141 | '<br/>'.
|
---|
142 | '<strong>III. Cena a platební podmínky:</strong><br/>'.
|
---|
143 | '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/>'.
|
---|
144 | '<br/>'.
|
---|
145 | '<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/>'.
|
---|
148 | '</td></tr>'.
|
---|
149 | '</table>';
|
---|
150 |
|
---|
151 | return $Output;
|
---|
152 | }
|
---|
153 | }
|
---|
154 |
|
---|
155 | class Contract extends Model
|
---|
156 | {
|
---|
157 | static function GetModelDesc(): ModelDesc
|
---|
158 | {
|
---|
159 | $Desc = new ModelDesc(self::GetClassName());
|
---|
160 | $Desc->AddReference('DocumentLine', DocumentLine::GetClassName());
|
---|
161 | $Desc->AddReference('BillCode', DocumentLineCode::GetClassName());
|
---|
162 | $Desc->AddReference('Subject', Subject::GetClassName());
|
---|
163 | $Desc->AddDate('ValidFrom');
|
---|
164 | $Desc->AddDate('ValidTo');
|
---|
165 | $Desc->AddReference('File', File::GetClassName());
|
---|
166 | return $Desc;
|
---|
167 | }
|
---|
168 | }
|
---|