source: trunk/Modules/Finance/Finance.php

Last change on this file was 979, checked in by chronos, 36 hours ago
  • Fixed: Treasury check difference.
File size: 52.3 KB
Line 
1<?php
2
3include_once(dirname(__FILE__).'/FinanceModels.php');
4include_once(dirname(__FILE__).'/Bill.php');
5include_once(dirname(__FILE__).'/Manage.php');
6include_once(dirname(__FILE__).'/UserState.php');
7include_once(dirname(__FILE__).'/Import.php');
8include_once(dirname(__FILE__).'/Trade.php');
9
10class ModuleFinance extends Module
11{
12 public Finance $Finance;
13 public Bill $Bill;
14
15 function __construct(System $System)
16 {
17 parent::__construct($System);
18 $this->Name = 'Finance';
19 $this->Version = '1.0';
20 $this->Creator = 'Chronos';
21 $this->License = 'GNU/GPLv3';
22 $this->Description = 'Base module for finance management';
23 $this->Dependencies = array(ModuleFile::GetName(), ModuleEmailQueue::GetName(), ModuleSubject::GetName(),
24 ModuleDocument::GetName());
25 $this->Models = array(FinanceBillingPeriod::GetClassName(), FinanceVatType::GetClassName(), FinanceVat::GetClassName(),
26 FinanceGroup::GetClassName(), FinanceOperationGroup::GetClassName(), FinanceOperation::GetClassName(),
27 FinanceInvoiceGroup::GetClassName(), FinanceInvoice::GetClassName(), FinanceInvoiceItem::GetClassName(),
28 Company::GetClassName(), FinanceTreasury::GetClassName(), FinanceTreasuryCheck::GetClassName(),
29 Currency::GetClassName(), FinanceBank::GetClassName(), FinanceBankAccount::GetClassName(), FinanceCharge::GetClassName(),
30 FinanceInvoiceOperationRel::GetClassName());
31
32 $this->Bill = new Bill($this->System);
33 $this->Finance = new Finance($this->System);
34 }
35
36 function DoStart(): void
37 {
38 $this->Finance->MainSubject = $this->System->Config['Finance']['MainSubjectId'];
39 $this->Finance->DirectoryId = $this->System->Config['Finance']['DirectoryId'];
40
41 $this->System->RegisterPage(['finance', 'sprava'], 'PageFinanceManage');
42 $this->System->RegisterPage(['finance', 'platby'], 'PageFinanceUserState');
43 $this->System->RegisterPage(['finance', 'import'], 'PageFinanceImportPayment');
44 $this->System->RegisterPage(['finance', 'zivnost'], 'PageFinanceTaxFiling');
45
46 $this->System->FormManager->RegisterClass('FinanceOperation', array(
47 'Title' => 'Finanční operace',
48 'Table' => 'FinanceOperation',
49 'DefaultSortColumn' => 'Time',
50 'DefaultSortOrder' => 1,
51 'Items' => array(
52 'Group' => array('Type' => 'TFinanceOperationGroup', 'Caption' => 'Skupina', 'Default' => ''),
53 'BillCode' => array('Type' => 'TDocumentLineCode', 'Caption' => 'Označení', 'Default' => '', 'ReadOnly' => true),
54 'Subject' => array('Type' => 'TSubject', 'Caption' => 'Subjekt', 'Default' => ''),
55 'Time' => array('Type' => 'DateTime', 'Caption' => 'Čas realizace', 'Default' => ''),
56 'Cash' => array('Type' => 'Boolean', 'Caption' => 'Hotově', 'Default' => ''),
57 'Taxable' => array('Type' => 'Boolean', 'Caption' => 'Zdanitelné', 'Default' => ''),
58 'Value' => array('Type' => 'Integer', 'Caption' => 'Částka absolutní', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true),
59 'ValueUser' => array('Type' => 'Integer', 'Caption' => 'Částka', 'Default' => '0', 'Suffix' => 'Kč'),
60 'File' => array('Type' => 'TFile', 'Caption' => 'Doklad', 'Default' => '', 'Null' => true),
61 'Text' => array('Type' => 'String', 'Caption' => 'Popis', 'Default' => ''),
62 'Network' => array('Type' => 'Boolean', 'Caption' => 'Týkající sítě', 'Default' => ''),
63 'BankAccount' => array('Type' => 'TFinanceBankAccount', 'Caption' => 'Účet', 'Default' => '', 'Null' => true),
64 'Treasury' => array('Type' => 'TFinanceTreasury', 'Caption' => 'Pokladna', 'Default' => '', 'Null' => true),
65 'Generate' => array('Type' => 'Boolean', 'Caption' => 'Generovat', 'Default' => ''),
66 'Balance' => array('Type' => 'Integer', 'Caption' => 'Zůstatek', 'Default' => '',
67 'ReadOnly' => true, 'SQL' => '(SELECT SUM(`FinanceOperation2`.`Value`) FROM `FinanceOperation` AS `FinanceOperation2` WHERE `FinanceOperation2`.`Time`<`Time`)'),
68 'InvoiceRel' => array('Type' => 'TFinanceInvoiceOperationRelListOperation', 'Caption' => 'Zaplacené faktury', 'Default' => ''),
69 'InvoiceRelCount' => array('Type' => 'Integer', 'Caption' => 'Faktur',
70 'ReadOnly' => true, 'SQL' => '(SELECT COUNT(`FinanceInvoiceOperationRel`.`Id`) FROM `FinanceInvoiceOperationRel` '.
71 'WHERE `FinanceInvoiceOperationRel`.`Operation`=#Id)'),
72 ),
73 'BeforeInsert' => array($this, 'BeforeInsertFinanceOperation'),
74 'AfterInsert' => array($this, 'AfterInsertFinanceOperation'),
75 'BeforeModify' => array($this, 'BeforeModifyFinanceOperation'),
76 'AfterModify' => array($this, 'BeforeModifyFinanceOperation'),
77 'ItemActions' => array(
78 array('Caption' => 'Přegenerovat doklad', 'URL' => '/finance/sprava/?Operation=RegenerateOperation&i=#RowId'),
79 ),
80 ));
81
82 $this->System->FormManager->RegisterClass('FinanceTreasuryIn', $this->System->FormManager->Classes['FinanceOperation']);
83 $this->System->FormManager->Classes['FinanceTreasuryIn']['Title'] = 'Pokladní příjmy';
84 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['Group']['Default'] = OPERATION_GROUP_TREASURY_IN;
85 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['Group']['Hidden'] = true;
86 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['Group']['Filter'] = true;
87 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['Cash']['Default'] = 1;
88 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['Cash']['Hidden'] = true;
89 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['Cash']['Filter'] = false;
90 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['BankAccount']['Hidden'] = true;
91 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['Value']['Hidden'] = true;
92
93 $this->System->FormManager->RegisterClass('FinanceTreasuryOut', $this->System->FormManager->Classes['FinanceOperation']);
94 $this->System->FormManager->Classes['FinanceTreasuryOut']['Title'] = 'Pokladní výdeje';
95 $this->System->FormManager->Classes['FinanceTreasuryOut']['Items']['Group']['Default'] = OPERATION_GROUP_TREASURY_OUT;
96 $this->System->FormManager->Classes['FinanceTreasuryOut']['Items']['Group']['Hidden'] = true;
97 $this->System->FormManager->Classes['FinanceTreasuryOut']['Items']['Group']['Filter'] = true;
98 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['Cash']['Default'] = 1;
99 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['Cash']['Hidden'] = true;
100 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['Cash']['Filter'] = false;
101 $this->System->FormManager->Classes['FinanceTreasuryOut']['Items']['BankAccount']['Hidden'] = true;
102 $this->System->FormManager->Classes['FinanceTreasuryOut']['Items']['Value']['Hidden'] = true;
103
104 $this->System->FormManager->RegisterClass('FinanceAccountIn', $this->System->FormManager->Classes['FinanceOperation']);
105 $this->System->FormManager->Classes['FinanceAccountIn']['Title'] = 'Příjmy na účet';
106 $this->System->FormManager->Classes['FinanceAccountIn']['Items']['Group']['Default'] = OPERATION_GROUP_ACCOUNT_IN;
107 $this->System->FormManager->Classes['FinanceAccountIn']['Items']['Group']['Hidden'] = true;
108 $this->System->FormManager->Classes['FinanceAccountIn']['Items']['Group']['Filter'] = true;
109 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['Cash']['Default'] = 0;
110 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['Cash']['Hidden'] = true;
111 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['Cash']['Filter'] = false;
112 $this->System->FormManager->Classes['FinanceAccountIn']['Items']['Treasury']['Hidden'] = true;
113 $this->System->FormManager->Classes['FinanceAccountIn']['Items']['Value']['Hidden'] = true;
114
115 $this->System->FormManager->RegisterClass('FinanceAccountOut', $this->System->FormManager->Classes['FinanceOperation']);
116 $this->System->FormManager->Classes['FinanceAccountOut']['Title'] = 'Výdeje z účtu';
117 $this->System->FormManager->Classes['FinanceAccountOut']['Items']['Group']['Default'] = OPERATION_GROUP_ACCOUNT_OUT;
118 $this->System->FormManager->Classes['FinanceAccountOut']['Items']['Group']['Hidden'] = true;
119 $this->System->FormManager->Classes['FinanceAccountOut']['Items']['Group']['Filter'] = true;
120 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['Cash']['Default'] = 0;
121 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['Cash']['Hidden'] = true;
122 $this->System->FormManager->Classes['FinanceTreasuryIn']['Items']['Cash']['Filter'] = false;
123 $this->System->FormManager->Classes['FinanceAccountOut']['Items']['Treasury']['Hidden'] = true;
124 $this->System->FormManager->Classes['FinanceAccountOut']['Items']['Value']['Hidden'] = true;
125
126 $this->System->FormManager->RegisterClass('FinanceOperationGroup', array(
127 'Title' => 'Skupina finančních operací',
128 'Table' => 'FinanceOperationGroup',
129 'Items' => array(
130 'Name' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => '0'),
131 'DocumentLine' => array('Type' => 'TDocumentLine', 'Caption' => 'Dokladová řada', 'Default' => '0'),
132 'ValueSign' => array('Type' => 'TFinanceValueSign', 'Caption' => 'Znaménko hodnoty', 'Default' => '0'),
133 'Direction' => array('Type' => 'TFinanceDirection', 'Caption' => 'Směr', 'Default' => '0'),
134 'Items' => array('Type' => 'TFinanceOperationListGroup', 'Caption' => 'Operace', 'Default' => ''),
135 ),
136 ));
137 $this->System->FormManager->RegisterClass('FinanceBillingPeriod', array(
138 'Title' => 'Platební období',
139 'Table' => 'FinanceBillingPeriod',
140 'Items' => array(
141 'Name' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => '0'),
142 'MonthCount' => array('Type' => 'Integer', 'Caption' => 'Počet měsíců', 'Default' => '0'),
143 'Customers' => array('Type' => 'TCustomerBillingPeriod', 'Caption' => 'Zákazníci')
144 ),
145 ));
146 $this->System->FormManager->RegisterFormType('TFinanceOperationGroup', array(
147 'Type' => 'Reference',
148 'Table' => 'FinanceOperationGroup',
149 'Id' => 'Id',
150 'Name' => 'Name',
151 'Filter' => '1',
152 ));
153 $this->System->FormManager->RegisterFormType('TFinanceValueSign', array(
154 'Type' => 'Enumeration',
155 'States' => array(-1 => 'Mínus', 1 => 'Plus'),
156 ));
157 $this->System->FormManager->RegisterFormType('TFinanceDirection', array(
158 'Type' => 'Enumeration',
159 'States' => array(0 => 'Příjem', 1 => 'Výdej'),
160 ));
161 $this->System->FormManager->RegisterClass('FinanceInvoice', array(
162 'Title' => 'Faktury',
163 'Table' => 'FinanceInvoice',
164 'DefaultSortColumn' => 'Time',
165 'DefaultSortOrder' => 1,
166 'Items' => array(
167 'Group' => array('Type' => 'TFinanceInvoiceGroup', 'Caption' => 'Skupina', 'Default' => ''),
168 'BillCode' => array('Type' => 'TDocumentLineCode', 'Caption' => 'Označení', 'Default' => '', 'ReadOnly' => true),
169 'Subject' => array('Type' => 'TSubject', 'Caption' => 'Subjekt', 'Default' => ''),
170 'Time' => array('Type' => 'Date', 'Caption' => 'Čas vytvoření', 'Default' => ''),
171 'TimeDue' => array('Type' => 'Date', 'Caption' => 'Čas splatnosti', 'Default' => ''),
172 'TimePayment' => array('Type' => 'Date', 'Caption' => 'Čas zaplacení', 'Default' => '', 'Null' => true),
173 'Value' => array('Type' => 'Integer', 'Caption' => 'Částka absolutní', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true),
174 'ValueUser' => array('Type' => 'Integer', 'Caption' => 'Částka', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
175 'SQL' => 'SELECT ROUND(SUM(`Price`*`Quantity`), '.$this->System->Config['Finance']['Rounding'].') FROM `FinanceInvoiceItem` WHERE `FinanceInvoiceItem`.`FinanceInvoice`=#Id'),
176 'File' => array('Type' => 'TFile', 'Caption' => 'Doklad', 'Default' => '', 'Null' => true),
177 'Generate' => array('Type' => 'Boolean', 'Caption' => 'Generovat', 'Default' => ''),
178 'PeriodFrom' => array('Type' => 'Date', 'Caption' => 'Období od', 'Default' => '', 'Null' => true),
179 'PeriodTo' => array('Type' => 'Date', 'Caption' => 'Období do', 'Default' => '', 'Null' => true),
180 'Cash' => array('Type' => 'Boolean', 'Caption' => 'Platit hotově', 'Default' => ''),
181 'VisibleToUser' => array('Type' => 'Boolean', 'Caption' => 'Viditelné uživatelům', 'Default' => '1'),
182 'Items' => array('Type' => 'TFinanceInvoiceItemListInvoice', 'Caption' => 'Položky', 'Default' => ''),
183 'StornoBy' => array('Type' => 'TFinanceInvoiceStornoListBy', 'Caption' => 'Původní doklady', 'Default' => ''),
184 'StornoOf' => array('Type' => 'TFinanceInvoiceStornoListOf', 'Caption' => 'Storno doklady', 'Default' => ''),
185 'OperationRel' => array('Type' => 'TFinanceInvoiceOperationRelListInvoice', 'Caption' => 'Platba', 'Default' => ''),
186 'OperationRelCount' => array('Type' => 'Integer', 'Caption' => 'Plateb',
187 'ReadOnly' => true, 'SQL' => '(SELECT COUNT(`FinanceInvoiceOperationRel`.`Id`) FROM `FinanceInvoiceOperationRel` '.
188 'WHERE `FinanceInvoiceOperationRel`.`Invoice`=#Id)'),
189 ),
190 'BeforeInsert' => array($this, 'BeforeInsertFinanceInvoice'),
191 'AfterInsert' => array($this, 'AfterInsertFinanceInvoice'),
192 'BeforeModify' => array($this, 'BeforeModifyFinanceInvoice'),
193 'AfterModify' => array($this, 'BeforeModifyFinanceInvoice'),
194 'ItemActions' => array(
195 array('Caption' => 'Přegenerovat doklad', 'URL' => '/finance/sprava/?Operation=RegenerateInvoice&i=#RowId'),
196 ),
197 ));
198 $this->System->FormManager->RegisterClass('FinanceInvoiceIn', $this->System->FormManager->Classes['FinanceInvoice']);
199 $this->System->FormManager->Classes['FinanceInvoiceIn']['Title'] = 'Přijaté faktury';
200 $this->System->FormManager->Classes['FinanceInvoiceIn']['Items']['Group']['Default'] = INVOICE_GROUP_IN;
201 $this->System->FormManager->Classes['FinanceInvoiceIn']['Items']['Group']['Hidden'] = true;
202 $this->System->FormManager->Classes['FinanceInvoiceIn']['Items']['Group']['Filter'] = true;
203 $this->System->FormManager->Classes['FinanceInvoiceIn']['Items']['Value']['Hidden'] = true;
204
205 $this->System->FormManager->RegisterClass('FinanceInvoiceOut', $this->System->FormManager->Classes['FinanceInvoice']);
206 $this->System->FormManager->Classes['FinanceInvoiceOut']['Title'] = 'Vydané faktury';
207 $this->System->FormManager->Classes['FinanceInvoiceOut']['Items']['Group']['Default'] = INVOICE_GROUP_OUT;
208 $this->System->FormManager->Classes['FinanceInvoiceOut']['Items']['Group']['Hidden'] = true;
209 $this->System->FormManager->Classes['FinanceInvoiceOut']['Items']['Group']['Filter'] = true;
210 $this->System->FormManager->Classes['FinanceInvoiceOut']['Items']['Value']['Hidden'] = true;
211
212 $this->System->FormManager->RegisterClass('FinanceInvoiceGroup', array(
213 'Title' => 'Skupina faktur',
214 'Table' => 'FinanceInvoiceGroup',
215 'Items' => array(
216 'Name' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => '0'),
217 'DocumentLine' => array('Type' => 'TDocumentLine', 'Caption' => 'Dokladová řada', 'Default' => '0'),
218 'ValueSign' => array('Type' => 'TFinanceValueSign', 'Caption' => 'Znaménko hodnoty', 'Default' => '0'),
219 'Direction' => array('Type' => 'TFinanceDirection', 'Caption' => 'Směr', 'Default' => '0'),
220 'Items' => array('Type' => 'TFinanceInvoiceListGroup', 'Caption' => 'Faktury', 'Default' => ''),
221 ),
222 ));
223
224 $this->System->FormManager->RegisterClass('FinanceInvoiceStorno', array(
225 'Title' => 'Storno faktur',
226 'Table' => 'FinanceInvoiceStorno',
227 'Items' => array(
228 'StornoBy' => array('Type' => 'TFinanceInvoice', 'Caption' => 'Storno doklad', 'Default' => ''),
229 'StornoOf' => array('Type' => 'TFinanceInvoice', 'Caption' => 'Původní doklad', 'Default' => ''),
230 ),
231 ));
232 $this->System->FormManager->RegisterFormType('TFinanceInvoiceGroup', array(
233 'Type' => 'Reference',
234 'Table' => 'FinanceInvoiceGroup',
235 'Id' => 'Id',
236 'Name' => 'Name',
237 'Filter' => '1',
238 ));
239
240 $this->System->FormManager->RegisterClass('Company', array(
241 'Title' => 'Firma',
242 'Table' => 'Company',
243 'Items' => array(
244 'Name' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => '0'),
245 'Subject' => array('Type' => 'TSubject', 'Caption' => 'Subjekt', 'Default' => '0'),
246 ),
247 ));
248 $this->System->FormManager->RegisterClass('FinanceInvoiceItem', array(
249 'Title' => 'Položka faktury',
250 'Table' => 'FinanceInvoiceItem',
251 'Items' => array(
252 'FinanceInvoice' => array('Type' => 'TFinanceInvoice', 'Caption' => 'Faktura', 'Default' => '0'),
253 'Description' => array('Type' => 'String', 'Caption' => 'Popis', 'Default' => 'Položka'),
254 'Price' => array('Type' => 'Float', 'Caption' => 'Částka', 'Default' => '0', 'Suffix' => 'Kč'),
255 'Quantity' => array('Type' => 'Float', 'Caption' => 'Množství', 'Default' => '1'),
256 'VAT' => array('Type' => 'Integer', 'Caption' => 'Daň', 'Default' => '21', 'Suffix' => '%'),
257 'Total' => array('Type' => 'Integer', 'Caption' => 'Celkem', 'Default' => '', 'Suffix' => 'Kč',
258 'ReadOnly' => true, 'SQL' => 'ROUND(`Price` * `Quantity`, '.$this->System->Config['Finance']['Rounding'].')'),
259 ),
260 'AfterInsert' => array($this, 'AfterInsertFinanceInvoiceItem'),
261 'AfterModify' => array($this, 'AfterModifyFinanceInvoiceItem'),
262 'AfterDelete' => array($this, 'AfterModifyFinanceInvoiceItem'),
263 ));
264 $this->System->FormManager->RegisterClass('FinanceTreasury', array(
265 'Title' => 'Pokladny',
266 'Table' => 'FinanceTreasury',
267 'DefaultSortColumn' => 'Name',
268 'Items' => array(
269 'Name' => array('Type' => 'String', 'Caption' => 'Jméno', 'Default' => ''),
270 'TimeCreate' => array('Type' => 'Date', 'Caption' => 'Čas vytvoření', 'Default' => ''),
271 'State' => array('Type' => 'Float', 'Caption' => 'Stav', 'Default' => '',
272 'ReadOnly' => true, 'Suffix' => 'Kč', 'SQL' => 'IFNULL(ROUND((SELECT SUM(`FinanceOperation`.`Value`) FROM `FinanceOperation` '.
273 'WHERE `FinanceOperation`.`Treasury`=#Id), '.$this->System->Config['Finance']['Rounding'].'), 0)'),
274 'Operations' => array('Type' => 'TFinanceOperationListTreasury', 'Caption' => 'Operace', 'Default' => ''),
275 'Check' => array('Type' => 'TFinanceTreasuryCheckListTreasury', 'Caption' => 'Kontrola', 'Default' => ''),
276 ),
277 ));
278 $this->System->FormManager->RegisterClass('FinanceTreasuryCheck', array(
279 'Title' => 'Kontrola pokladen',
280 'Table' => 'FinanceTreasuryCheck',
281 'DefaultSortColumn' => 'Time',
282 'DefaultSortOrder' => 1,
283 'Items' => array(
284 'Treasury' => array('Type' => 'TFinanceTreasury', 'Caption' => 'Pokladna', 'Default' => ''),
285 'Time' => array('Type' => 'DateTime', 'Caption' => 'Čas', 'Default' => ''),
286 'Value1' => array('Type' => 'Integer', 'Caption' => 'Hodnota 1', 'Default' => '0', 'Suffix' => 'ks'),
287 'Value2' => array('Type' => 'Integer', 'Caption' => 'Hodnota 2', 'Default' => '0', 'Suffix' => 'ks'),
288 'Value5' => array('Type' => 'Integer', 'Caption' => 'Hodnota 5', 'Default' => '0', 'Suffix' => 'ks'),
289 'Value10' => array('Type' => 'Integer', 'Caption' => 'Hodnota 10', 'Default' => '0', 'Suffix' => 'ks'),
290 'Value20' => array('Type' => 'Integer', 'Caption' => 'Hodnota 20', 'Default' => '0', 'Suffix' => 'ks'),
291 'Value50' => array('Type' => 'Integer', 'Caption' => 'Hodnota 50', 'Default' => '0', 'Suffix' => 'ks'),
292 'Value100' => array('Type' => 'Integer', 'Caption' => 'Hodnota 100', 'Default' => '0', 'Suffix' => 'ks'),
293 'Value200' => array('Type' => 'Integer', 'Caption' => 'Hodnota 200', 'Default' => '0', 'Suffix' => 'ks'),
294 'Value500' => array('Type' => 'Integer', 'Caption' => 'Hodnota 500', 'Default' => '0', 'Suffix' => 'ks'),
295 'Value1000' => array('Type' => 'Integer', 'Caption' => 'Hodnota 1000', 'Default' => '0', 'Suffix' => 'ks'),
296 'Value2000' => array('Type' => 'Integer', 'Caption' => 'Hodnota 2000', 'Default' => '0', 'Suffix' => 'ks'),
297 'Value5000' => array('Type' => 'Integer', 'Caption' => 'Hodnota 5000', 'Default' => '0', 'Suffix' => 'ks'),
298 'Sum' => array('Type' => 'Integer', 'Caption' => 'Součet', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
299 'SQL' => '(`Value1` * 1 + `Value2` * 2 + `Value5` * 5 + `Value10` * 10 + '.
300 '`Value20` * 20 + `Value50` * 50 + `Value100` * 100 + `Value200` * 200 + '.
301 '`Value500` * 500 + `Value1000` * 1000 + `Value2000` * 2000 + `Value5000` * 5000)'),
302 'Missing' => array('Type' => 'Integer', 'Caption' => 'Odchylka', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
303 'SQL' =>
304 '-(`Value1` * 1 + `Value2` * 2 + `Value5` * 5 + `Value10` * 10 + '.
305 '`Value20` * 20 + `Value50` * 50 + `Value100` * 100 + `Value200` * 200 + '.
306 '`Value500` * 500 + `Value1000` * 1000 + `Value2000` * 2000 + `Value5000` * 5000) + '.
307 '(SELECT (T2.`Value1` * 1 + T2.`Value2` * 2 + T2.`Value5` * 5 + T2.`Value10` * 10 + '.
308 'T2.`Value20` * 20 + T2.`Value50` * 50 + T2.`Value100` * 100 + T2.`Value200` * 200 + '.
309 'T2.`Value500` * 500 + T2.`Value1000` * 1000 + T2.`Value2000` * 2000 + T2.`Value5000` * 5000)'.
310 ' + (SELECT SUM(T3.Value) FROM FinanceOperation AS T3 WHERE (T3.Time <= TX.Time) AND (T3.Time > T2.Time) AND (T3.Treasury=TX.Treasury))'.
311 ' FROM FinanceTreasuryCheck AS T2 WHERE (T2.Time < TX.Time) ORDER BY T2.Time DESC LIMIT 1)'),
312 ),
313 ));
314 $this->System->FormManager->RegisterFormType('TCustomerBillingPeriod', array(
315 'Type' => 'ManyToOne',
316 'Table' => 'Member',
317 'Id' => 'Id',
318 'Ref' => 'BillingPeriod',
319 'Filter' => '1',
320 ));
321 $this->System->FormManager->RegisterFormType('TFinanceTreasuryCheckListTreasury', array(
322 'Type' => 'ManyToOne',
323 'Table' => 'FinanceTreasuryCheck',
324 'Id' => 'Id',
325 'Ref' => 'Treasury',
326 'Filter' => '1',
327 ));
328 $this->System->FormManager->RegisterFormType('TFinanceTreasury', array(
329 'Type' => 'Reference',
330 'Table' => 'FinanceTreasury',
331 'Id' => 'Id',
332 'Name' => 'Name',
333 'Filter' => '1',
334 ));
335 $this->System->FormManager->RegisterClass('FinanceBankAccount', array(
336 'Title' => 'Účty',
337 'Table' => 'FinanceBankAccount',
338 'DefaultSortColumn' => 'Comment',
339 'Items' => array(
340 'Subject' => array('Type' => 'TSubject', 'Caption' => 'Vlastník', 'Default' => ''),
341 'Comment' => array('Type' => 'String', 'Caption' => 'Komentář', 'Default' => ''),
342 'Number' => array('Type' => 'String', 'Caption' => 'Číslo', 'Default' => ''),
343 'Bank' => array('Type' => 'TFinanceBank', 'Caption' => 'Banka', 'Default' => ''),
344 'TimeCreate' => array('Type' => 'Date', 'Caption' => 'Čas vytvoření', 'Default' => ''),
345 'TimeEnd' => array('Type' => 'Date', 'Caption' => 'Čas zrušení', 'Default' => '', 'Null' => true),
346 'Currency' => array('Type' => 'TCurrency', 'Caption' => 'Měna', 'Default' => ''),
347 'LoginName' => array('Type' => 'String', 'Caption' => 'Přihlašovací jméno / token', 'Default' => '', 'NotInList' => true),
348 'LoginPassword' => array('Type' => 'String', 'Caption' => 'Přihlašovací heslo', 'Default' => '', 'NotInList' => true),
349 'Operations' => array('Type' => 'TFinanceOperationListAccount', 'Caption' => 'Operace', 'Default' => ''),
350 'Use' => array('Type' => 'Boolean', 'Caption' => 'Používat', 'Default' => '0'),
351 'LastImportDate' => array('Type' => 'Date', 'Caption' => 'Datum posledního importu', 'Default' => ''),
352 'LastImportId' => array('Type' => 'String', 'Caption' => 'Id posledního importu', 'Default' => ''),
353 'State' => array('Type' => 'Float', 'Caption' => 'Stav', 'Default' => '',
354 'ReadOnly' => true, 'Suffix' => 'Kč', 'SQL' => '(SELECT SUM(`FinanceOperation`.`Value`) FROM `FinanceOperation` '.
355 'WHERE `FinanceOperation`.`BankAccount`=#Id)'),
356 'AutoImport' => array('Type' => 'Boolean', 'Caption' => 'Automaticky stahovat z banky', 'Default' => ''),
357 ),
358 'ItemActions' => array(
359 array('Caption' => 'Import plateb z banky', 'URL' => '/finance/import-api/?i=#RowId'),
360 array('Caption' => 'Import plateb ze souboru', 'URL' => '/finance/import-soubor/?i=#RowId'),
361 ),
362 ));
363 $this->System->FormManager->RegisterClass('FinanceBankAccountReport', array(
364 'Title' => 'Roční výkaz operací',
365 'Table' => 'FinanceBankAccountReport',
366 'SQL' => 'SELECT Id, DateEnd, DateStart FROM FinanceYear',
367 'DefaultSortColumn' => 'Id',
368 'Items' => array(
369 'Id' => array('Type' => 'TFinanceYear', 'Caption' => 'Rok', 'Default' => '',
370 'ReadOnly' => true),
371 //'Account' => array('Type' => 'TFinanceBankAccount', 'Caption' => 'Bankovní účet', 'Default' => '',
372 // 'ReadOnly' => true),
373 'StartBalance' => array('Type' => 'Integer', 'Caption' => 'Starý zůstatek', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
374 'SQL' => '(SELECT ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
375 'LEFT JOIN `FinanceOperationGroup` ON `FinanceOperationGroup`.`Id`=`FinanceOperation`.`Group` '.
376 'WHERE (`FinanceOperation`.`Time` <= `DateStart`) AND (`FinanceOperation`.`BankAccount` = 2))'),
377 'EndBalance' => array('Type' => 'Integer', 'Caption' => 'Nový zůstatek', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
378 'SQL' => '(SELECT ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
379 'LEFT JOIN `FinanceOperationGroup` ON `FinanceOperationGroup`.`Id`=`FinanceOperation`.`Group` '.
380 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) AND (`FinanceOperation`.`BankAccount` = 2))'),
381 'Change' => array('Type' => 'Integer', 'Caption' => 'Změna', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
382 'SQL' => '(SELECT ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
383 'LEFT JOIN `FinanceOperationGroup` ON `FinanceOperationGroup`.`Id`=`FinanceOperation`.`Group` '.
384 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) '.
385 'AND (`FinanceOperation`.`Time` >= `DateStart`) AND (`FinanceOperation`.`BankAccount` = 2))'),
386 ),
387 //'AfterInsert' => array($this, 'AfterInsertFinanceYear'),
388 ));
389 $this->System->FormManager->RegisterFormType('TFinanceBankAccount', array(
390 'Type' => 'Reference',
391 'Table' => 'FinanceBankAccount',
392 'Id' => 'Id',
393 'Name' => 'Comment',
394 'Filter' => '1',
395 ));
396 $this->System->FormManager->RegisterClass('FinanceBank', array(
397 'Title' => 'Banky',
398 'Table' => 'FinanceBank',
399 'Items' => array(
400 'Name' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => ''),
401 'Code' => array('Type' => 'String', 'Caption' => 'Český kód', 'Default' => ''),
402 'BIC' => array('Type' => 'String', 'Caption' => 'Kód BIC', 'Default' => ''),
403 'Country' => array('Type' => 'TCountry', 'Caption' => 'Země', 'Default' => ''),
404 ),
405 ));
406 $this->System->FormManager->RegisterFormType('TFinanceBank', array(
407 'Type' => 'Reference',
408 'Table' => 'FinanceBank',
409 'Id' => 'Id',
410 'Name' => 'CONCAT(Name, " (", Code, ")")',
411 'Filter' => '1',
412 ));
413 $this->System->FormManager->RegisterClass('Currency', array(
414 'Title' => 'Měny',
415 'Table' => 'Currency',
416 'Items' => array(
417 'Code' => array('Type' => 'String', 'Caption' => 'Kód', 'Default' => ''),
418 'Name' => array('Type' => 'String', 'Caption' => 'Jméno', 'Default' => ''),
419 'Symbol' => array('Type' => 'String', 'Caption' => 'Symbol', 'Default' => ''),
420 ),
421 ));
422 $this->System->FormManager->RegisterClass('FinanceCharge', array(
423 'Title' => 'Parametry účtování',
424 'Table' => 'FinanceCharge',
425 'Items' => array(
426 'Internet' => array('Type' => 'Integer', 'Caption' => 'Platba Internetu', 'Default' => '0', 'Suffix' => 'Kč'),
427 'InternetSpeed' => array('Type' => 'Integer', 'Caption' => 'Rychlost Internetu', 'Default' => '0', 'Suffix' => 'Mbit/s'),
428 'InternetSpeedReserve' => array('Type' => 'Integer', 'Caption' => 'Rezerva rychlosti', 'Default' => '0', 'Suffix' => 'Mbit/s'),
429 'AdministrationPerUser' => array('Type' => 'Integer', 'Caption' => 'Správa za uživatele', 'Default' => '0', 'Suffix' => 'Kč'),
430 'kWh' => array('Type' => 'Integer', 'Caption' => 'Cena kWh', 'Default' => '0', 'Suffix' => 'Kč'),
431 'BaseSpeedElement' => array('Type' => 'Integer', 'Caption' => 'Základní díl rychlosti', 'Default' => '0', 'Suffix' => 'Mbit/s'),
432 'BaseTariffPrice' => array('Type' => 'Integer', 'Caption' => 'Základní cena tarifu', 'Default' => '0', 'Suffix' => 'Kč'),
433 'TopTariffPrice' => array('Type' => 'Integer', 'Caption' => 'Nejvyšší cena tarifu', 'Default' => '0', 'Suffix' => 'Kč'),
434 'ChangeAction' => array('Type' => 'TActionEnum', 'Caption' => 'Změna - akce', 'Default' => '', 'Null' => true, 'NotInList' => true),
435 'ChangeTime' => array('Type' => 'DateTime', 'Caption' => 'Změna - čas', 'Default' => '', 'Null' => true, 'NotInList' => true),
436 'ChangeReplaceId' => array('Type' => 'TFinanceCharge', 'Caption' => 'Změna - položka', 'Default' => '0', 'Null' => true, 'NotInList' => true),
437 ),
438 ));
439 $this->System->FormManager->RegisterClass('FinanceVAT', array(
440 'Title' => 'Sazby DPH',
441 'Table' => 'FinanceVAT',
442 'Items' => array(
443 'Type' => array('Type' => 'TFinanceVATType', 'Caption' => 'Typ', 'Default' => ''),
444 'ValidFrom' => array('Type' => 'Date', 'Caption' => 'Platnost od', 'Default' => ''),
445 'ValidTo' => array('Type' => 'Date', 'Caption' => 'Platnost do', 'Default' => '', 'Null' => true),
446 'Value' => array('Type' => 'Integer', 'Caption' => 'Hodnota', 'Default' => '', 'Suffix' => '%'),
447 ),
448 ));
449 $this->System->FormManager->RegisterClass('FinanceVATType', array(
450 'Title' => 'Sazby DPH',
451 'Table' => 'FinanceVATType',
452 'Items' => array(
453 'Name' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => ''),
454 ),
455 ));
456 $this->System->FormManager->RegisterFormType('TFinanceVAT', array(
457 'Type' => 'Reference',
458 'Table' => 'FinanceVAT',
459 'Id' => 'Id',
460 'Name' => 'Name',
461 'Filter' => '1',
462 ));
463 $this->System->FormManager->RegisterFormType('TFinanceVATType', array(
464 'Type' => 'Reference',
465 'Table' => 'FinanceVATType',
466 'Id' => 'Id',
467 'Name' => 'Name',
468 'Filter' => '1',
469 ));
470 $this->System->FormManager->RegisterFormType('TBankAccount', array(
471 'Type' => 'Reference',
472 'Table' => 'FinanceBankAccount',
473 'Id' => 'Id',
474 'Name' => 'CONCAT(`Comment`, " (", `Number`, "/", '.
475 '(SELECT `FinanceBank`.`Code` FROM `FinanceBank` WHERE `FinanceBank`.`Id`=`FinanceBankAccount`.`Bank`), ")")',
476 'Filter' => '1',
477 ));
478 $this->System->FormManager->RegisterClass('FinanceYearReport', array(
479 'Title' => 'Roční výkaz',
480 'Table' => 'FinanceYearReport',
481 'SQL' => 'SELECT Id, DateEnd, DateStart FROM FinanceYear',
482 'DefaultSortColumn' => 'Id',
483 'DefaultSortOrder' => 1,
484 'Items' => array(
485 'Id' => array('Type' => 'TFinanceYear', 'Caption' => 'Rok', 'Default' => '',
486 'ReadOnly' => true),
487 'Income' => array('Type' => 'Integer', 'Caption' => 'Evidenční příjmy', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
488 'SQL' => '(SELECT ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
489 'LEFT JOIN `FinanceOperationGroup` ON `FinanceOperationGroup`.`Id`=`FinanceOperation`.`Group` '.
490 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) '.
491 'AND (`FinanceOperation`.`Time` >= `DateStart`) AND (`FinanceOperationGroup`.`ValueSign` = 1))'),
492 'Spending' => array('Type' => 'Integer', 'Caption' => 'Evidenční výdaje', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
493 'SQL' => '(SELECT -ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
494 'LEFT JOIN `FinanceOperationGroup` ON `FinanceOperationGroup`.`Id`=`FinanceOperation`.`Group` '.
495 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) '.
496 'AND (`FinanceOperation`.`Time` >= `DateStart`) AND (`FinanceOperationGroup`.`ValueSign` = -1))'),
497 'OperationBalance' => array('Type' => 'Integer', 'Caption' => 'Evidenční zisk', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
498 'SQL' => '(SELECT ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
499 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) '.
500 'AND (`FinanceOperation`.`Time` >= `DateStart`))'),
501 'RealIncome' => array('Type' => 'Integer', 'Caption' => 'Skutečné příjmy', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
502 'SQL' => '(SELECT ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
503 'LEFT JOIN `FinanceOperationGroup` ON `FinanceOperationGroup`.`Id`=`FinanceOperation`.`Group` '.
504 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) AND (`FinanceOperation`.`Subject` != '.$this->Finance->MainSubject.')'.
505 'AND (`FinanceOperation`.`Time` >= `DateStart`) AND (`FinanceOperationGroup`.`ValueSign` = 1))'),
506 'RealSpending' => array('Type' => 'Integer', 'Caption' => 'Skutečné výdaje', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
507 'SQL' => '(SELECT -ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
508 'LEFT JOIN `FinanceOperationGroup` ON `FinanceOperationGroup`.`Id`=`FinanceOperation`.`Group` '.
509 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) AND (`FinanceOperation`.`Subject` != '.$this->Finance->MainSubject.')'.
510 'AND (`FinanceOperation`.`Time` >= `DateStart`) AND (`FinanceOperationGroup`.`ValueSign` = -1))'),
511 'RealOperationBalance' => array('Type' => 'Integer', 'Caption' => 'Skutečný zisk', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
512 'SQL' => '(SELECT ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
513 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) AND (`FinanceOperation`.`Subject` != '.$this->Finance->MainSubject.')'.
514 'AND (`FinanceOperation`.`Time` >= `DateStart`))'),
515 'TaxIncome' => array('Type' => 'Integer', 'Caption' => 'Daňové příjmy', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
516 'SQL' => '(SELECT ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
517 'LEFT JOIN `FinanceOperationGroup` ON `FinanceOperationGroup`.`Id`=`FinanceOperation`.`Group` '.
518 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) '.
519 'AND (`FinanceOperation`.`Time` >= `DateStart`) AND (`FinanceOperation`.`Taxable` = 1) AND (`FinanceOperationGroup`.`ValueSign` = 1))'),
520 'TaxSpending' => array('Type' => 'Integer', 'Caption' => 'Daňové výdaje', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
521 'SQL' => '(SELECT -ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
522 'LEFT JOIN `FinanceOperationGroup` ON `FinanceOperationGroup`.`Id`=`FinanceOperation`.`Group` '.
523 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) '.
524 'AND (`FinanceOperation`.`Time` >= `DateStart`) AND (`FinanceOperation`.`Taxable` = 1) AND (`FinanceOperationGroup`.`ValueSign` = -1))'),
525 'TaxBase' => array('Type' => 'Integer', 'Caption' => 'Základ daně', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
526 'SQL' => '(SELECT ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
527 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) '.
528 'AND (`FinanceOperation`.`Time` >= `DateStart`) AND (`FinanceOperation`.`Taxable` = 1))'),
529 'Claims' => array('Type' => 'Integer', 'Caption' => 'Pohledávky', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
530 'SQL' => '(SELECT ROUND(SUM(`FinanceInvoice`.`Value`)) FROM `FinanceInvoice` '.
531 'LEFT JOIN `FinanceInvoiceGroup` ON `FinanceInvoiceGroup`.`Id`=`FinanceInvoice`.`Group` '.
532 'WHERE (`FinanceInvoice`.`Time` <= `DateEnd`) '.
533 'AND (`FinanceInvoice`.`Time` >= `DateStart`) AND (`FinanceInvoiceGroup`.`ValueSign` = 1))'),
534 'Liabilities' => array('Type' => 'Integer', 'Caption' => 'Závazky', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
535 'SQL' => '(SELECT -ROUND(SUM(`FinanceInvoice`.`Value`)) FROM `FinanceInvoice` '.
536 'LEFT JOIN `FinanceInvoiceGroup` ON `FinanceInvoiceGroup`.`Id`=`FinanceInvoice`.`Group` '.
537 'WHERE (`FinanceInvoice`.`Time` <= `DateEnd`) '.
538 'AND (`FinanceInvoice`.`Time` >= `DateStart`) AND (`FinanceInvoiceGroup`.`ValueSign` = -1))'),
539 'InvoiceBalance' => array('Type' => 'Integer', 'Caption' => 'Fakturační rozdíl', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
540 'SQL' => '(SELECT ROUND(SUM(`FinanceInvoice`.`Value`)) FROM `FinanceInvoice` WHERE (`FinanceInvoice`.`Time` <= `DateEnd`) '.
541 'AND (`FinanceInvoice`.`Time` >= `DateStart`))'),
542 'IncomeList' => array('Type' => 'TIncomeList', 'Caption' => 'Příjmy', 'Default' => '0'),
543 'SpendingList' => array('Type' => 'TSpendingList', 'Caption' => 'Výdaje', 'Default' => '0'),
544 'TaxIncomeList' => array('Type' => 'TTaxIncomeList', 'Caption' => 'Daňové příjmy', 'Default' => '0'),
545 'TaxSpendingList' => array('Type' => 'TTaxSpendingList', 'Caption' => 'Daňové výdaje', 'Default' => '0'),
546 'ClaimsList' => array('Type' => 'TClaimsList', 'Caption' => 'Pohledávky', 'Default' => '0'),
547 'LiabilitiesList' => array('Type' => 'TLiabilitiesList', 'Caption' => 'Závazky', 'Default' => '0'),
548 ),
549 //'AfterInsert' => array($this, 'AfterInsertFinanceYear'),
550 ));
551 $this->System->FormManager->RegisterClass('FinanceMonthReport', array(
552 'Title' => 'Měsíční výkaz',
553 'Table' => 'FinanceMonthReport',
554 'SQL' => 'SELECT 0 AS `Id`, m1 AS `DateStart`, LAST_DAY(m1) AS `DateEnd` FROM '.
555 '(SELECT ((SELECT MIN(`DateStart`) FROM `FinanceYear`) - INTERVAL DAYOFMONTH((SELECT MIN(`DateStart`) FROM `FinanceYear`)) - 1 DAY) '.
556 '+ INTERVAL m MONTH AS m1 FROM ('.
557 'SELECT @rownum := @rownum + 1 AS m FROM '.
558 '(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) t1,'.
559 '(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) t2,'.
560 '(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) t3,'.
561 '(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) t4,'.
562 '(SELECT @rownum := -1) t0'.
563 ') d1'.
564 ') d2 '.
565 'WHERE m1 <= (SELECT MAX(`DateEnd`) FROM `FinanceYear`)',
566 'DefaultSortColumn' => 'DateStart',
567 'DefaultSortOrder' => 1,
568 'Items' => array(
569 'DateStart' => array('Type' => 'Date', 'Caption' => 'Měsíc', 'Default' => '', 'ReadOnly' => true),
570 'Income' => array('Type' => 'Integer', 'Caption' => 'Evidenční příjmy', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
571 'SQL' => '(SELECT ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
572 'LEFT JOIN `FinanceOperationGroup` ON `FinanceOperationGroup`.`Id`=`FinanceOperation`.`Group` '.
573 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) '.
574 'AND (`FinanceOperation`.`Time` >= `DateStart`) AND (`FinanceOperationGroup`.`ValueSign` = 1))'),
575 'Spending' => array('Type' => 'Integer', 'Caption' => 'Evidenční výdaje', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
576 'SQL' => '(SELECT -ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
577 'LEFT JOIN `FinanceOperationGroup` ON `FinanceOperationGroup`.`Id`=`FinanceOperation`.`Group` '.
578 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) '.
579 'AND (`FinanceOperation`.`Time` >= `DateStart`) AND (`FinanceOperationGroup`.`ValueSign` = -1))'),
580 'OperationBalance' => array('Type' => 'Integer', 'Caption' => 'Evidenční zisk', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
581 'SQL' => '(SELECT ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
582 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) '.
583 'AND (`FinanceOperation`.`Time` >= `DateStart`))'),
584 'RealIncome' => array('Type' => 'Integer', 'Caption' => 'Skutečné příjmy', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
585 'SQL' => '(SELECT ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
586 'LEFT JOIN `FinanceOperationGroup` ON `FinanceOperationGroup`.`Id`=`FinanceOperation`.`Group` '.
587 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) AND (`FinanceOperation`.`Subject` != '.$this->Finance->MainSubject.')'.
588 'AND (`FinanceOperation`.`Time` >= `DateStart`) AND (`FinanceOperationGroup`.`ValueSign` = 1))'),
589 'RealSpending' => array('Type' => 'Integer', 'Caption' => 'Skutečné výdaje', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
590 'SQL' => '(SELECT -ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
591 'LEFT JOIN `FinanceOperationGroup` ON `FinanceOperationGroup`.`Id`=`FinanceOperation`.`Group` '.
592 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) AND (`FinanceOperation`.`Subject` != '.$this->Finance->MainSubject.')'.
593 'AND (`FinanceOperation`.`Time` >= `DateStart`) AND (`FinanceOperationGroup`.`ValueSign` = -1))'),
594 'RealOperationBalance' => array('Type' => 'Integer', 'Caption' => 'Skutečný zisk', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
595 'SQL' => '(SELECT ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
596 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) AND (`FinanceOperation`.`Subject` != '.$this->Finance->MainSubject.')'.
597 'AND (`FinanceOperation`.`Time` >= `DateStart`))'),
598 'TaxIncome' => array('Type' => 'Integer', 'Caption' => 'Daňové příjmy', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
599 'SQL' => '(SELECT ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
600 'LEFT JOIN `FinanceOperationGroup` ON `FinanceOperationGroup`.`Id`=`FinanceOperation`.`Group` '.
601 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) '.
602 'AND (`FinanceOperation`.`Time` >= `DateStart`) AND (`FinanceOperation`.`Taxable` = 1) AND (`FinanceOperationGroup`.`ValueSign` = 1))'),
603 'TaxSpending' => array('Type' => 'Integer', 'Caption' => 'Daňové výdaje', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
604 'SQL' => '(SELECT -ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
605 'LEFT JOIN `FinanceOperationGroup` ON `FinanceOperationGroup`.`Id`=`FinanceOperation`.`Group` '.
606 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) '.
607 'AND (`FinanceOperation`.`Time` >= `DateStart`) AND (`FinanceOperation`.`Taxable` = 1) AND (`FinanceOperationGroup`.`ValueSign` = -1))'),
608 'TaxBase' => array('Type' => 'Integer', 'Caption' => 'Základ daně', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
609 'SQL' => '(SELECT ROUND(SUM(`FinanceOperation`.`Value`)) FROM `FinanceOperation` '.
610 'WHERE (`FinanceOperation`.`Time` <= `DateEnd`) '.
611 'AND (`FinanceOperation`.`Time` >= `DateStart`) AND (`FinanceOperation`.`Taxable` = 1))'),
612 'Claims' => array('Type' => 'Integer', 'Caption' => 'Pohledávky', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
613 'SQL' => '(SELECT ROUND(SUM(`FinanceInvoice`.`Value`)) FROM `FinanceInvoice` '.
614 'LEFT JOIN `FinanceInvoiceGroup` ON `FinanceInvoiceGroup`.`Id`=`FinanceInvoice`.`Group` '.
615 'WHERE (`FinanceInvoice`.`Time` <= `DateEnd`) '.
616 'AND (`FinanceInvoice`.`Time` >= `DateStart`) AND (`FinanceInvoiceGroup`.`ValueSign` = 1))'),
617 'Liabilities' => array('Type' => 'Integer', 'Caption' => 'Závazky', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
618 'SQL' => '(SELECT -ROUND(SUM(`FinanceInvoice`.`Value`)) FROM `FinanceInvoice` '.
619 'LEFT JOIN `FinanceInvoiceGroup` ON `FinanceInvoiceGroup`.`Id`=`FinanceInvoice`.`Group` '.
620 'WHERE (`FinanceInvoice`.`Time` <= `DateEnd`) '.
621 'AND (`FinanceInvoice`.`Time` >= `DateStart`) AND (`FinanceInvoiceGroup`.`ValueSign` = -1))'),
622 'InvoiceBalance' => array('Type' => 'Integer', 'Caption' => 'Fakturační rozdíl', 'Default' => '0', 'Suffix' => 'Kč', 'ReadOnly' => true,
623 'SQL' => '(SELECT ROUND(SUM(`FinanceInvoice`.`Value`)) FROM `FinanceInvoice` WHERE (`FinanceInvoice`.`Time` <= `DateEnd`) '.
624 'AND (`FinanceInvoice`.`Time` >= `DateStart`))'),
625 'IncomeList' => array('Type' => 'TIncomeList', 'Caption' => 'Příjmy', 'Default' => '0'),
626 'SpendingList' => array('Type' => 'TSpendingList', 'Caption' => 'Výdaje', 'Default' => '0'),
627 'TaxIncomeList' => array('Type' => 'TTaxIncomeList', 'Caption' => 'Daňové příjmy', 'Default' => '0'),
628 'TaxSpendingList' => array('Type' => 'TTaxSpendingList', 'Caption' => 'Daňové výdaje', 'Default' => '0'),
629 'ClaimsList' => array('Type' => 'TClaimsList', 'Caption' => 'Pohledávky', 'Default' => '0'),
630 'LiabilitiesList' => array('Type' => 'TLiabilitiesList', 'Caption' => 'Závazky', 'Default' => '0'),
631 ),
632 //'AfterInsert' => array($this, 'AfterInsertFinanceYear'),
633 ));
634 $this->System->FormManager->RegisterFormType('TClaimsList', array(
635 'Type' => 'ManyToOne',
636 'Table' => 'FinanceInvoice',
637 'Id' => 'Id',
638 'Ref' => '',
639 'Filter' => '(`TX`.`Time` <= (SELECT `FinanceYear`.`DateEnd` FROM `FinanceYear` WHERE `FinanceYear`.`Id`=#Id)) '.
640 'AND (`TX`.`Time` >= (SELECT `FinanceYear`.`DateStart` FROM `FinanceYear` WHERE `FinanceYear`.`Id`=#Id)) '.
641 'AND (SIGN(`TX`.`Value`) > 0)',
642 ));
643 $this->System->FormManager->RegisterFormType('TLiabilitiesList', array(
644 'Type' => 'ManyToOne',
645 'Table' => 'FinanceInvoice',
646 'Id' => 'Id',
647 'Ref' => '',
648 'Filter' => '(`TX`.`Time` <= (SELECT `FinanceYear`.`DateEnd` FROM `FinanceYear` WHERE `FinanceYear`.`Id`=#Id)) '.
649 'AND (`TX`.`Time` >= (SELECT `FinanceYear`.`DateStart` FROM `FinanceYear` WHERE `FinanceYear`.`Id`=#Id)) '.
650 'AND (SIGN(`TX`.`Value`) < 0)',
651 ));
652 $this->System->FormManager->RegisterFormType('TSpendingList', array(
653 'Type' => 'ManyToOne',
654 'Table' => 'FinanceOperation',
655 'Id' => 'Id',
656 'Ref' => '',
657 'Filter' => '(`TX`.`Time` <= (SELECT `FinanceYear`.`DateEnd` FROM `FinanceYear` WHERE `FinanceYear`.`Id`=#Id)) '.
658 'AND (`TX`.`Time` >= (SELECT `FinanceYear`.`DateStart` FROM `FinanceYear` WHERE `FinanceYear`.`Id`=#Id)) '.
659 'AND (SIGN(`TX`.`Value`) < 0)',
660 ));
661 $this->System->FormManager->RegisterFormType('TIncomeList', array(
662 'Type' => 'ManyToOne',
663 'Table' => 'FinanceOperation',
664 'Id' => 'Id',
665 'Ref' => '',
666 'Filter' => '(`TX`.`Time` <= (SELECT `FinanceYear`.`DateEnd` FROM `FinanceYear` WHERE `FinanceYear`.`Id`=#Id)) '.
667 'AND (`TX`.`Time` >= (SELECT `FinanceYear`.`DateStart` FROM `FinanceYear` WHERE `FinanceYear`.`Id`=#Id)) '.
668 'AND (SIGN(`TX`.`Value`) > 0)',
669 ));
670 $this->System->FormManager->RegisterFormType('TTaxSpendingList', array(
671 'Type' => 'ManyToOne',
672 'Table' => 'FinanceOperation',
673 'Id' => 'Id',
674 'Ref' => '',
675 'Filter' => '(`TX`.`Time` <= (SELECT `FinanceYear`.`DateEnd` FROM `FinanceYear` WHERE `FinanceYear`.`Id`=#Id)) '.
676 'AND (`TX`.`Time` >= (SELECT `FinanceYear`.`DateStart` FROM `FinanceYear` WHERE `FinanceYear`.`Id`=#Id)) '.
677 'AND (SIGN(`TX`.`Value`) < 0) AND (`TX`.`Taxable` = 1)',
678 ));
679 $this->System->FormManager->RegisterFormType('TTaxIncomeList', array(
680 'Type' => 'ManyToOne',
681 'Table' => 'FinanceOperation',
682 'Id' => 'Id',
683 'Ref' => '',
684 'Filter' => '(`TX`.`Time` <= (SELECT `FinanceYear`.`DateEnd` FROM `FinanceYear` WHERE `FinanceYear`.`Id`=#Id)) '.
685 'AND (`TX`.`Time` >= (SELECT `FinanceYear`.`DateStart` FROM `FinanceYear` WHERE `FinanceYear`.`Id`=#Id)) '.
686 'AND (SIGN(`TX`.`Value`) > 0) AND (`TX`.`Taxable` = 1)',
687 ));
688 $this->System->FormManager->RegisterClass('FinanceInvoiceOperationRel', array(
689 'Title' => 'Zaplacení faktůr',
690 'Table' => 'FinanceInvoiceOperationRel',
691 'Items' => array(
692 'Invoice' => array('Type' => 'TFinanceInvoice', 'Caption' => 'Faktura', 'Default' => ''),
693 'Operation' => array('Type' => 'TFinanceOperation', 'Caption' => 'Platba', 'Default' => ''),
694 ),
695 ));
696
697 ModuleIS::Cast($this->System->GetModule('IS'))->RegisterDashboardItem('Finance', array($this, 'ShowDashboardItem'));
698 }
699
700 function ShowDashboardItem(): string
701 {
702 $DbResult = $this->Database->select('FinanceOperation', 'ROUND(SUM(`Value`))', '1');
703 $DbRow = $DbResult->fetch_row();
704 $Output = 'Stav placení: '.$DbRow['0'].' Kč<br/>';
705 return $Output;
706 }
707
708 function BeforeInsertFinanceOperation(Form $Form): array
709 {
710 if (array_key_exists('Time', $Form->Values)) $Year = date("Y", $Form->Values['Time']);
711 else $Year = date("Y", $Form->Values['ValidFrom']);
712 $FinanceGroup = $this->Finance->GetFinanceGroupById($Form->Values['Group'], 'FinanceOperationGroup');
713 $Form->Values['BillCode'] = ModuleDocument::Cast($this->System->GetModule('Document'))->GetNextDocumentLineNumberId($FinanceGroup['DocumentLine'], $Year);
714 return $Form->Values;
715 }
716
717 function AfterInsertFinanceOperation(Form $Form, string $Id): array
718 {
719 $FinanceGroup = $this->Finance->GetFinanceGroupById($Form->Values['Group'], 'FinanceOperationGroup');
720 $this->Database->query('UPDATE `'.$Form->Definition['Table'].'` SET `Value`= '.
721 ($Form->Values['ValueUser'] * $FinanceGroup['ValueSign']).' WHERE `Id`='.$Id);
722 return $Form->Values;
723 }
724
725 function BeforeModifyFinanceOperation(Form $Form, string $Id): array
726 {
727 $FinanceGroup = $this->Finance->GetFinanceGroupById($Form->Values['Group'], 'FinanceOperationGroup');
728 $this->Database->query('UPDATE `'.$Form->Definition['Table'].'` SET `Value`= '.
729 ($Form->Values['ValueUser'] * $FinanceGroup['ValueSign']).' WHERE `Id`='.$Id);
730 return $Form->Values;
731 }
732
733 function BeforeInsertFinanceInvoice(Form $Form): array
734 {
735 // Get new DocumentLineCode by selected invoice Group
736 if (array_key_exists('Time', $Form->Values)) $Year = date("Y", $Form->Values['Time']);
737 else $Year = date("Y", $Form->Values['ValidFrom']);
738 $Group = $this->Finance->GetFinanceGroupById($Form->Values['Group'], 'FinanceInvoiceGroup');
739 $Form->Values['BillCode'] = ModuleDocument::Cast($this->System->GetModule('Document'))->GetNextDocumentLineNumberId($Group['DocumentLine'], $Year);
740 return $Form->Values;
741 }
742
743 function AfterInsertFinanceInvoice(Form $Form, string $Id): array
744 {
745 $FinanceGroup = $this->Finance->GetFinanceGroupById($Form->Values['Group'], 'FinanceInvoiceGroup');
746 $DbResult = $this->Database->query(str_replace('#Id', $Id, $Form->Definition['Items']['ValueUser']['SQL']));
747 $DbRow = $DbResult->fetch_row();
748 $Sum = $DbRow[0];
749
750 $this->Database->query('UPDATE `'.$Form->Definition['Table'].'` SET `Value`= '.
751 ($Sum * $FinanceGroup['ValueSign']).' WHERE `Id`='.$Id);
752 return $Form->Values;
753 }
754
755 function BeforeModifyFinanceInvoice(Form $Form, string $Id): array
756 {
757 $FinanceGroup = $this->Finance->GetFinanceGroupById($Form->Values['Group'], 'FinanceInvoiceGroup');
758 $DbResult = $this->Database->query(str_replace('#Id', $Id, $Form->Definition['Items']['ValueUser']['SQL']));
759 $DbRow = $DbResult->fetch_row();
760 $Sum = $DbRow[0];
761 $this->Database->query('UPDATE `'.$Form->Definition['Table'].'` SET `Value`= '.
762 ($Sum * $FinanceGroup['ValueSign']).' WHERE `Id`='.$Id);
763 return $Form->Values;
764 }
765
766 function AfterInsertFinanceInvoiceItem(Form $Form, string $Id): array
767 {
768 $ParentForm = new Form($this->System->FormManager);
769 $ParentForm->SetClass('FinanceInvoice');
770 $ParentForm->LoadValuesFromDatabase($Form->Values['FinanceInvoice']);
771 $this->AfterInsertFinanceInvoice($ParentForm, $Form->Values['FinanceInvoice']);
772 return $Form->Values;
773 }
774
775 function AfterModifyFinanceInvoiceItem(Form $Form, string $Id): array
776 {
777 $ParentForm = new Form($this->System->FormManager);
778 $ParentForm->SetClass('FinanceInvoice');
779 $ParentForm->LoadValuesFromDatabase($Form->Values['FinanceInvoice']);
780 $this->BeforeModifyFinanceInvoice($ParentForm, $Form->Values['FinanceInvoice']);
781 return $Form->Values;
782 }
783
784 static function Cast(Module $Module): ModuleFinance
785 {
786 if ($Module instanceof ModuleFinance)
787 {
788 return $Module;
789 }
790 throw new Exception('Expected ModuleFinance type but '.gettype($Module));
791 }
792}
Note: See TracBrowser for help on using the repository browser.