source: trunk/Modules/Customer/Customer.php

Last change on this file was 970, checked in by chronos, 6 months ago
  • Modified: Service internet speed min and max used as contracted speeds. Real speed will be calculated with bonus speed and further queues calculations.
  • Added: Bonus internet speed service field.
  • Modified: Few PHP 8.3 fixes.
File size: 21.2 KB
Line 
1<?php
2
3class ModuleCustomer extends Module
4{
5 function __construct(System $System)
6 {
7 parent::__construct($System);
8 $this->Name = 'Customer';
9 $this->Version = '1.0';
10 $this->Creator = 'Chronos';
11 $this->License = 'GNU/GPLv3';
12 $this->Description = 'Customer management';
13 $this->Dependencies = array(ModuleUser::GetName(), ModuleFinance::GetName());
14 $this->Models = array(Member::GetClassName(), MemberPayment::GetClassName(), SupportActivity::GetClassName(), ServiceCategory::GetClassName(),
15 Service::GetClassName(), ServiceCustomerRel::GetClassName(), UserCustomerRel::GetClassName(), AddressPlace::GetClassName());
16 }
17
18 function DoStart(): void
19 {
20 $this->System->FormManager->RegisterClass('Member', array(
21 'Title' => 'Zákazníci',
22 'Table' => 'Member',
23 'DefaultSortColumn' => 'Name',
24 'Items' => array(
25 'Name' => array('Type' => 'String', 'Caption' => 'Jméno', 'Default' => ''),
26 'ResponsibleUser' => array('Type' => 'TUser', 'Caption' => 'Zodpovědný uživatel', 'Default' => ''),
27 'Subject' => array('Type' => 'TSubject', 'Caption' => 'Subjekt', 'Default' => ''),
28 'AddressPlace' => array('Type' => 'TAddressPlace', 'Caption' => 'Adresní místo', 'Default' => '', 'Null' => true),
29 'FamilyMemberCount' => array('Type' => 'String', 'Caption' => 'Bydlících osob', 'Default' => '0', 'Suffix' => 'osob'),
30 'MembershipDate' => array('Type' => 'Date', 'Caption' => 'Datum členství', 'Default' => ''),
31 'BillingPeriod' => array('Type' => 'TFinanceBillingPeriod', 'Caption' => 'Fakturační období aktuální', 'Default' => ''),
32 'BillingPeriodLastDate' => array('Type' => 'Date', 'Caption' => 'Datum poslední fakturace', 'Default' => ''),
33 'Blocked' => array('Type' => 'Boolean', 'Caption' => 'Blokování', 'Default' => '0'),
34 'PayDay' => array('Type' => 'Integer', 'Caption' => 'Den placení', 'Default' => '1', 'Suffix' => 'den'),
35 'Devices' => array('Type' => 'TDeviceList', 'Caption' => 'Registrovaná zařízení', 'Default' => ''),
36 'UserRel' => array('Type' => 'TUserCustomerRelListCustomer', 'Caption' => 'Přiřazení uživatelé', 'Default' => ''),
37 'ServiceRel' => array('Type' => 'TServiceCustomerRelListCustomer', 'Caption' => 'Placené služby', 'Default' => ''),
38 'SupportActivity' => array('Type' => 'TSupportActivityListCustomer', 'Caption' => 'Zákaznická podpora', 'Default' => ''),
39 'Consumption' => array('Type' => 'TCustomerStockSerialNumber', 'Caption' => 'Spotřeba zařízení', 'Default' => ''),
40 'Contract' => array('Type' => 'TContract', 'Caption' => 'Smlouva', 'Default' => '', 'Null' => true),
41 'PaymentEmailTime' => array('Type' => 'DateTime', 'Caption' => 'Čas platebního emailu', 'Default' => 'now', 'Null' => true, 'NotInList' => true),
42 'ChangeAction' => array('Type' => 'TActionEnum', 'Caption' => 'Změna - akce', 'Default' => '', 'Null' => true, 'NotInList' => true),
43 'ChangeTime' => array('Type' => 'DateTime', 'Caption' => 'Změna - čas', 'Default' => '', 'Null' => true, 'NotInList' => true),
44 'ChangeReplaceId' => array('Type' => 'TMember', 'Caption' => 'Změna - položka', 'Default' => '0', 'Null' => true, 'NotInList' => true),
45 ),
46 'ItemActions' => array(
47 array('Caption' => 'Klientská sekce', 'URL' => '/finance/platby/?i=#RowId'),
48 array('Caption' => 'Email s vyúčtováním do fronty', 'URL' => '/finance/sprava/?Operation=SendPaymentEmail&amp;i=#RowId'),
49 ),
50 ));
51 $this->System->FormManager->RegisterClass('MemberPayment', array(
52 'Title' => 'Placení zákazníků',
53 'Table' => 'MemberPayment',
54 'Items' => array(
55 'Member' => array('Type' => 'TMember', 'Caption' => 'Zákazník', 'Default' => '', 'ReadOnly' => true),
56 'MonthlyTotal' => array('Type' => 'Integer', 'Caption' => 'Celkem měsíčně', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true),
57 'MonthlyInternet' => array('Type' => 'Integer', 'Caption' => 'Internet měsíčně', 'Default' => '', 'Suffix' => 'Kč', 'ReadOnly' => true),
58 'MonthlyConsumption' => array('Type' => 'Integer', 'Caption' => 'Spotřeba měsíčně', 'Default' => '', 'Suffix' => 'Kč', 'ReadOnly' => true),
59 'MonthlyPlus' => array('Type' => 'Integer', 'Caption' => 'Měsíčně plus', 'Default' => '', 'Suffix' => 'Kč', 'ReadOnly' => true),
60 'Cash' => array('Type' => 'Integer', 'Caption' => 'Kredit', 'Default' => '', 'Suffix' => 'Kč', 'ReadOnly' => true),
61 ),
62 'Actions' => array(
63 array('Caption' => 'Přepočítat', 'URL' => '/finance/sprava/?Operation=Recalculate'),
64 ),
65 ));
66 $this->System->FormManager->RegisterFormType('TMember', array(
67 'Type' => 'Reference',
68 'Table' => 'Member',
69 'Id' => 'Id',
70 'Name' => 'Name',
71 'Filter' => '1',
72 ));
73 $this->System->FormManager->RegisterClass('Service', array(
74 'Title' => 'Služby',
75 'Table' => 'Service',
76 'DefaultSortColumn' => 'Name',
77 'Items' => array(
78 'Name' => array('Type' => 'String', 'Caption' => 'Jméno', 'Default' => ''),
79 'Category' => array('Type' => 'TServiceCategory', 'Caption' => 'Skupina', 'Default' => '', 'Null' => true),
80 'Price' => array('Type' => 'Integer', 'Caption' => 'Cena', 'Default' => '0', 'Suffix' => 'Kč'),
81 'VAT' => array('Type' => 'TFinanceVATType', 'Caption' => 'Sazba DPH', 'Default' => '0', 'Suffix' => ''),
82 'CustomerCount' => array('Type' => 'Integer', 'Caption' => 'Počet zákazníků', 'Default' => '', 'ReadOnly' => true,
83 'SQL' => '(SELECT COUNT(*) FROM `ServiceCustomerRel` LEFT JOIN `Member` ON `Member`.`Id`=`ServiceCustomerRel`.`Customer` WHERE (`ServiceCustomerRel`.`Service`=#Id) AND (`Member`.`Blocked`=0))'),
84 'Public' => array('Type' => 'Boolean', 'Caption' => 'Veřejné', 'Default' => ''),
85 'InternetSpeedMin' => array('Type' => 'Integer', 'Caption' => 'Min. rychlost internetu', 'Default' => '0', 'Suffix' => 'bit/s'),
86 'InternetSpeedMax' => array('Type' => 'Integer', 'Caption' => 'Max. rychlost internetu', 'Default' => '0', 'Suffix' => 'bit/s'),
87 'InternetSpeedBonus' => array('Type' => 'Integer', 'Caption' => 'Bonusová rychlost internetu', 'Default' => '0', 'Suffix' => 'bit/s'),
88 'UploadAsymmetry' => array('Type' => 'Integer', 'Caption' => 'Asymetrie odesílání', 'Default' => '1'),
89 'Memory' => array('Type' => 'Integer', 'Caption' => 'Paměť', 'Default' => '0', 'Suffix' => 'GB'),
90 'MemorySwap' => array('Type' => 'Integer', 'Caption' => 'Odkládací oddíl', 'Default' => '0', 'Suffix' => 'GB'),
91 'Storage' => array('Type' => 'Integer', 'Caption' => 'Úložiště', 'Default' => '0', 'Suffix' => 'GB'),
92 'CPUCount' => array('Type' => 'Integer', 'Caption' => 'Počet jader', 'Default' => '0', 'Suffix' => ''),
93 'ChangeAction' => array('Type' => 'TActionEnum', 'Caption' => 'Změna - akce', 'Default' => '', 'Null' => true, 'NotInList' => true),
94 'ChangeTime' => array('Type' => 'DateTime', 'Caption' => 'Změna - čas', 'Default' => '', 'Null' => true, 'NotInList' => true),
95 'ChangeReplaceId' => array('Type' => 'TService', 'Caption' => 'Změna - položka', 'Default' => '', 'Null' => true, 'NotInList' => true),
96 'CustomerRel' => array('Type' => 'TServiceCustomerRelListService', 'Caption' => 'Placení zákazníky', 'Default' => ''),
97 'TvRel' => array('Type' => 'TServiceTvRelListService', 'Caption' => 'TV kanály', 'Default' => ''),
98 ),
99 ));
100 $this->System->FormManager->RegisterClass('ServiceCategory', array(
101 'Title' => 'Kategorie služeb',
102 'Table' => 'ServiceCategory',
103 'Items' => array(
104 'Name' => array('Type' => 'String', 'Caption' => 'Jméno', 'Default' => ''),
105 'Items' => array('Type' => 'TServiceListServiceCategory', 'Caption' => 'Služby', 'Default' => ''),
106 ),
107 ));
108 $this->System->FormManager->RegisterClass('ServiceCustomerRel', array(
109 'Title' => 'Služby zákazníka',
110 'Table' => 'ServiceCustomerRel',
111 'Items' => array(
112 'Service' => array('Type' => 'TService', 'Caption' => 'Služba', 'Default' => ''),
113 'ServicePrice' => array('Type' => 'Integer', 'Caption' => 'Cena', 'Default' => '', 'ReadOnly' => true, 'Suffix' => 'Kč',
114 'SQL' => 'SELECT `Service`.`Price` FROM `Service` WHERE `Service`.`Id`=`TX`.`Service`'),
115 'Customer' => array('Type' => 'TMember', 'Caption' => 'Zákazník', 'Default' => ''),
116 'SpeedLimit' => array('Type' => 'TNetworkSpeedLimit', 'Caption' => 'Omezení rychlosti', 'Default' => null, 'Null' => true),
117 'Devices' => array('Type' => 'TNetworkDeviceListService', 'Caption' => 'Zařízení', 'Default' => ''),
118 'Subnets' => array('Type' => 'TNetworkSubnetListService', 'Caption' => 'Podsítě', 'Default' => ''),
119 'ChangeAction' => array('Type' => 'TActionEnum', 'Caption' => 'Změna - akce', 'Default' => '', 'Null' => true, 'NotInList' => true),
120 'ChangeTime' => array('Type' => 'DateTime', 'Caption' => 'Změna - čas', 'Default' => '', 'Null' => true, 'NotInList' => true),
121 'ChangeReplaceId' => array('Type' => 'TServiceCustomerRel', 'Caption' => 'Změna - položka', 'Default' => '', 'Null' => true, 'NotInList' => true),
122 ),
123 ));
124 $this->System->FormManager->RegisterClass('AddressPlace', array(
125 'Title' => 'Adresní místo',
126 'Table' => 'AddressPlace',
127 'DefaultSortColumn' => 'HouseNumber',
128 'DefaultSortOrder' => 1,
129 'Items' => array(
130 'Town' => array('Type' => 'String', 'Caption' => 'Město', 'Default' => ''),
131 'Street' => array('Type' => 'String', 'Caption' => 'Ulice', 'Default' => ''),
132 'HouseNumber' => array('Type' => 'Integer', 'Caption' => 'Číslo domu', 'Default' => ''),
133 'HouseNumberType' => array('Type' => 'THouseNumberType', 'Caption' => 'Typ čísla', 'Default' => ''),
134 'Psc' => array('Type' => 'Integer', 'Caption' => 'PSČ', 'Default' => ''),
135 'RuianCode' => array('Type' => 'Integer', 'Caption' => 'Kód Ruian', 'Default' => ''),
136 'Customers' => array('Type' => 'TCustomerListAddressPlace', 'Caption' => 'Zákazníci', 'Default' => '', 'Null' => true, 'NotInList' => true),
137 ),
138 ));
139 $this->System->FormManager->RegisterFormType('TAddressPlace', array(
140 'Type' => 'Reference',
141 'Table' => 'AddressPlace',
142 'Id' => 'Id',
143 'Name' => 'CONCAT_WS(" ", NULLIF(AddressPlace.Town, ""), REPLACE(REPLACE(AddressPlace.HouseNumberType, "0", ""), 1, "e.v."), NULLIF(AddressPlace.HouseNumber, ""))',
144 'Filter' => '1',
145 ));
146 $this->System->FormManager->RegisterFormType('THouseNumberType', array(
147 'Type' => 'Enumeration',
148 'States' => array(0 => 'Popisné', 1 => 'Evidenční'),
149 ));
150 $this->System->FormManager->RegisterFormType('TCustomerListAddressPlace', array(
151 'Type' => 'ManyToOne',
152 'Table' => 'Member',
153 'Id' => 'Id',
154 'Ref' => 'AddressPlace',
155 'Filter' => '1',
156 ));
157 $this->System->FormManager->RegisterFormType('TServiceCategory', array(
158 'Type' => 'Reference',
159 'Table' => 'ServiceCategory',
160 'Id' => 'Id',
161 'Name' => 'Name',
162 'Filter' => '1',
163 ));
164 $this->System->FormManager->RegisterFormType('TService', array(
165 'Type' => 'Reference',
166 'Table' => 'Service',
167 'Id' => 'Id',
168 'Name' => 'Name',
169 'Filter' => '1',
170 ));
171 $this->System->FormManager->RegisterFormType('TServiceCustomerRel', array(
172 'Type' => 'Reference',
173 'Table' => 'ServiceCustomerRel',
174 'Id' => 'Id',
175 'Name' => 'Id',
176 'Filter' => '1',
177 ));
178 $this->System->FormManager->RegisterFormType('TServiceCustomerRelListCustomer', array(
179 'Type' => 'ManyToOne',
180 'Table' => 'ServiceCustomerRel',
181 'Id' => 'Id',
182 'Ref' => 'Customer',
183 'Filter' => '1',
184 ));
185 $this->System->FormManager->RegisterFormType('TNetworkDeviceListService', array(
186 'Type' => 'ManyToOne',
187 'Table' => 'NetworkDevice',
188 'Id' => 'Id',
189 'Ref' => 'Service',
190 'Filter' => '1',
191 ));
192 $this->System->FormManager->RegisterFormType('TNetworkSubnetListService', array(
193 'Type' => 'ManyToOne',
194 'Table' => 'NetworkSubnet',
195 'Id' => 'Id',
196 'Ref' => 'Service',
197 'Filter' => '1',
198 ));
199 $this->System->FormManager->RegisterFormType('TServiceCustomerRelListService', array(
200 'Type' => 'ManyToOne',
201 'Table' => 'ServiceCustomerRel',
202 'Id' => 'Id',
203 'Ref' => 'Service',
204 'Filter' => '1',
205 ));
206 $this->System->FormManager->RegisterFormType('TServiceTvRelListService', array(
207 'Type' => 'ManyToOne',
208 'Table' => 'ServiceTvRel',
209 'Id' => 'Id',
210 'Ref' => 'Service',
211 'Filter' => '1',
212 ));
213 $this->System->FormManager->RegisterFormType('TServiceListServiceCategory', array(
214 'Type' => 'ManyToOne',
215 'Table' => 'Service',
216 'Id' => 'Id',
217 'Ref' => 'Category',
218 'Filter' => '1',
219 ));
220 $this->System->FormManager->RegisterClass('SupportActivity', array(
221 'Title' => 'Zákaznická podpora',
222 'Table' => 'SupportActivity',
223 'DefaultSortColumn' => 'Time',
224 'DefaultSortOrder' => 1,
225 'Items' => array(
226 'Time' => array('Type' => 'DateTime', 'Caption' => 'Čas', 'Default' => ''),
227 'Description' => array('Type' => 'Text', 'Caption' => 'Popis', 'Default' => ''),
228 'Customer' => array('Type' => 'TMember', 'Caption' => 'Zákazník', 'Default' => ''),
229 'User' => array('Type' => 'TUser', 'Caption' => 'Pracovník', 'Default' => ''),
230 ),
231 ));
232 $this->System->FormManager->RegisterFormType('TSupportActivityListCustomer', array(
233 'Type' => 'ManyToOne',
234 'Table' => 'SupportActivity',
235 'Id' => 'Id',
236 'Ref' => 'Customer',
237 'Filter' => '1',
238 ));
239 $this->System->FormManager->RegisterClass('UserCustomerRel', array(
240 'Title' => 'Vztahy uživatel - zákazník',
241 'Table' => 'UserCustomerRel',
242 'Items' => array(
243 'User' => array('Type' => 'TUser', 'Caption' => 'Uživatel', 'Default' => ''),
244 'Customer' => array('Type' => 'TMember', 'Caption' => 'Zákazník', 'Default' => ''),
245 ),
246 ));
247 $this->System->FormManager->RegisterFormType('TCustomerListContract', array(
248 'Type' => 'ManyToOne',
249 'Table' => 'Member',
250 'Id' => 'Id',
251 'Ref' => 'Contract',
252 'Filter' => '1',
253 ));
254
255 $this->System->RegisterPage(['user', 'dokumenty'], 'PageCustomerDocuments');
256
257 ModuleIS::Cast(Core::Cast($this->System)->GetModule('IS'))->RegisterDashboardItem('Customer',
258 array($this, 'ShowDashboardItem'));
259 }
260
261 function ShowDashboardItem(): string
262 {
263 $DbResult = $this->Database->select('Member', 'COUNT(*)', '1');
264 $DbRow = $DbResult->fetch_row();
265 $Output = 'Zákazníků: registrovaných: <a href="'.$this->System->Link('/is/?a=list&amp;t=Member').'">'.$DbRow['0'].'</a>';
266
267 $DbResult = $this->Database->select('Member', 'COUNT(*)', '(`Blocked`=0) AND (`BillingPeriod`<>1)');
268 $DbRow = $DbResult->fetch_row();
269 $Output .= ' aktivních: <a href="'.$this->System->Link('/is/?a=list&t=Member&amp;filter=1&amp;FilterBlocked=0&amp;FilterBillingPeriod=Nikdy&amp;FilterOpBillingPeriod=notequal').'">'.$DbRow['0'].'</a>';
270
271 $DbResult = $this->Database->select('Member', 'COUNT(*)', '(`Blocked`=0) AND (`BillingPeriod`<>1) AND '.
272 '((SELECT SUM(Service.Price) FROM ServiceCustomerRel LEFT JOIN Service ON Service.Id=ServiceCustomerRel.Service WHERE ServiceCustomerRel.Customer=Member.Id) <> 0)');
273 $DbRow = $DbResult->fetch_row();
274 $Output .= ' platících: <a href="'.$this->System->Link('/is/?a=list&t=Member&amp;filter=1&amp;FilterBlocked=0&amp;FilterBillingPeriod=Nikdy&amp;FilterOpBillingPeriod=notequal').'">'.$DbRow['0'].'</a><br/>';
275
276 return $Output;
277 }
278}
279
280class PageCustomerDocuments extends Page
281{
282 function __construct(System $System)
283 {
284 parent::__construct($System);
285 $this->Title = 'Dokumenty';
286 $this->Description = 'Dokumenty klienta';
287 $this->ParentClass = 'PageUser';
288 }
289
290 function Show(): string
291 {
292 $Output = '<br/><div><strong>Dostupné dokumenty:</strong></div><br/>';
293
294 $User = &ModuleUser::Cast($this->System->GetModule('User'))->User;
295
296 // Determine which customer should be displayed
297 if (array_key_exists('i', $_GET))
298 {
299 if (!$User->CheckPermission('Finance', 'Manage')) return 'Nemáte oprávnění';
300 $CustomerId = $_GET['i'];
301 } else
302 {
303 if (!$User->CheckPermission('Customer', 'DisplayCustomerDocuments')) return 'Nemáte oprávnění';
304 $UserId = ModuleUser::Cast($this->System->GetModule('User'))->User->User['Id'];
305 $DbResult = $this->Database->query('SELECT `Customer` FROM `UserCustomerRel` WHERE `User`='.$UserId.' LIMIT 1');
306 if ($DbResult->num_rows > 0)
307 {
308 $CustomerUserRel = $DbResult->fetch_assoc();
309 $CustomerId = $CustomerUserRel['Customer'];
310 } else return $this->SystemMessage('Chyba', 'Nejste zákazníkem');
311 }
312
313 // Load customer info
314 $DbResult = $this->Database->query('SELECT * FROM `Member` WHERE `Id`='.$CustomerId);
315 if ($DbResult->num_rows == 1)
316 {
317 $Customer = $DbResult->fetch_assoc();
318 } else return $this->SystemMessage('Položka nenalezena', 'Zákazník nenalezen');
319
320 if ($Customer['Contract'] != '')
321 {
322 $DbResult = $this->Database->query('SELECT Contract.*, File.Hash AS FileHash, DocumentLineCode.Name AS BillCodeText FROM Contract '.
323 'LEFT JOIN File ON File.Id=Contract.File '.
324 'LEFT JOIN DocumentLineCode ON DocumentLineCode.Id=Contract.BillCode '.
325 'WHERE (Contract.Id='.$Customer['Contract'].')');
326 if ($DbResult->num_rows > 0)
327 {
328 $Contract = $DbResult->fetch_assoc();
329 if ($Contract['File'] > 0) $Output .= 'Smlouva: <a href="'.$this->System->Link('/file?h='.$Contract['FileHash']).'">'.$Contract['BillCodeText'].'</a><br/>';
330 else $Output .= 'Smlouva: '.$Contract['BillCodeText'].'<br/>';
331 $Output .= 'Všeobecné smluvní podmínky: <a href="https://www.zdechov.net/docs/V%C5%A1eobecn%C3%A9%20smluvn%C3%AD%20podm%C3%ADnky.pdf">PDF</a><br/>';
332 }
333 }
334 return $Output;
335 }
336}
337
338class Member extends Model
339{
340 static function GetModelDesc(): ModelDesc
341 {
342 $Desc = new ModelDesc(self::GetClassName());
343 $Desc->AddString('Name');
344 $Desc->AddReference('Subject', Subject::GetClassName());
345 $Desc->AddReference('ResponsibleUser', User::GetClassName());
346 $Desc->AddInteger('FamilyMemberCount');
347 $Desc->AddDate('MembershipDate');
348 $Desc->AddInteger('MemberState');
349 $Desc->AddInteger('GPS');
350 $Desc->AddReference('BillingPeriod', FinanceBillingPeriod::GetClassName());
351 $Desc->AddDate('BillingPeriodLastDate');
352 $Desc->AddBoolean('Blocked');
353 $Desc->AddInteger('PayDay');
354 $Desc->AddDateTime('PaymentEmailTime');
355 $Desc->AddChangeAction();
356 return $Desc;
357 }
358}
359
360class MemberPayment extends Model
361{
362 static function GetModelDesc(): ModelDesc
363 {
364 $Desc = new ModelDesc(self::GetClassName());
365 $Desc->AddReference('Member', Member::GetClassName());
366 $Desc->AddFloat('MonthlyTotal');
367 $Desc->AddFloat('MonthlyInternet');
368 $Desc->AddFloat('MonthlyConsumption');
369 $Desc->AddFloat('MonthlyPlus');
370 $Desc->AddFloat('Cash');
371 return $Desc;
372 }
373}
374
375class Service extends Model
376{
377 static function GetModelDesc(): ModelDesc
378 {
379 $Desc = new ModelDesc(self::GetClassName());
380 $Desc->AddString('Name');
381 $Desc->AddReference('Category', ServiceCategory::GetClassName());
382 $Desc->AddInteger('Price');
383 $Desc->AddInteger('VAT');
384 $Desc->AddChangeAction();
385 $Desc->AddBoolean('Public');
386 $Desc->AddInteger('InternetSpeedMax');
387 $Desc->AddInteger('InternetSpeedMin');
388 $Desc->AddInteger('InternetSpeedBonus');
389 $Desc->AddInteger('InternetUploadAsymmetry');
390 $Desc->AddInteger('Memory');
391 $Desc->AddInteger('MemorySwap');
392 $Desc->AddInteger('Storage');
393 $Desc->AddInteger('CPUCount');
394 return $Desc;
395 }
396}
397
398class ServiceCategory extends Model
399{
400 static function GetModelDesc(): ModelDesc
401 {
402 $Desc = new ModelDesc(self::GetClassName());
403 $Desc->AddString('Name');
404 return $Desc;
405 }
406}
407
408class SupportActivity extends Model
409{
410 static function GetModelDesc(): ModelDesc
411 {
412 $Desc = new ModelDesc(self::GetClassName());
413 $Desc->AddDateTime('Time');
414 $Desc->AddString('Description');
415 $Desc->AddReference('Customer', Member::GetClassName());
416 $Desc->AddReference('User', User::GetClassName());
417 return $Desc;
418 }
419}
420
421class ServiceCustomerRel extends Model
422{
423 static function GetModelDesc(): ModelDesc
424 {
425 $Desc = new ModelDesc(self::GetClassName());
426 $Desc->AddReference('Service', Service::GetClassName());
427 $Desc->AddReference('Customer', Member::GetClassName());
428 $Desc->AddChangeAction();
429 $Desc->AddInteger('SpeedLimit');
430 return $Desc;
431 }
432}
433
434class UserCustomerRel extends Model
435{
436 static function GetModelDesc(): ModelDesc
437 {
438 $Desc = new ModelDesc(self::GetClassName());
439 $Desc->AddReference('User', User::GetClassName());
440 $Desc->AddReference('Customer', Member::GetClassName());
441 return $Desc;
442 }
443}
444
445class AddressPlace extends Model
446{
447 static function GetModelDesc(): ModelDesc
448 {
449 $Desc = new ModelDesc(self::GetClassName());
450 $Desc->AddString('Town');
451 $Desc->AddString('Street');
452 $Desc->AddString('HouseNumber');
453 $Desc->AddEnum('HouseNumberType', array('Popisné', 'Evidenční'));
454 $Desc->AddString('Psc');
455 $Desc->AddInteger('RuianCode');
456 return $Desc;
457 }
458}
Note: See TracBrowser for help on using the repository browser.