Skip to content

Commit a2a79ac

Browse files
author
Jan Staněk
authored
Merge pull request #324 from jan-stanek/podakce
Podakce - 1. cast
2 parents 71f26ca + 7a5e09a commit a2a79ac

File tree

80 files changed

+4239
-762
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+4239
-762
lines changed

app/AdminModule/ConfigurationModule/forms/MailingForm.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class MailingForm extends Nette\Object
5555
* MailingForm constructor.
5656
* @param BaseForm $baseForm
5757
* @param SettingsRepository $settingsRepository
58-
*
58+
* @param UserRepository $userRepository
5959
* @param MailService $mailService
6060
* @param LinkGenerator $linkGenerator
6161
*/

app/AdminModule/ConfigurationModule/forms/PaymentForm.php

+47-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace App\AdminModule\ConfigurationModule\Forms;
44

55
use App\AdminModule\Forms\BaseForm;
6+
use App\Model\Enums\MaturityType;
67
use App\Model\Enums\VariableSymbolType;
78
use App\Model\Settings\Settings;
89
use App\Model\Settings\SettingsRepository;
@@ -64,12 +65,35 @@ public function create()
6465

6566
$form->addSelect('variableSymbolType', 'admin.configuration.variable_symbol_type', $this->prepareVariableSympolTypeOptions());
6667

68+
$maturityTypeSelect = $form->addSelect('maturityType', 'admin.configuration.maturity_type', $this->prepareMaturityTypeOptions());
69+
$maturityTypeSelect->addCondition($form::EQUAL, MaturityType::DATE)->toggle('maturity-date');
70+
$maturityTypeSelect->addCondition($form::EQUAL, MaturityType::DAYS)->toggle('maturity-days');
71+
$maturityTypeSelect->addCondition($form::EQUAL, MaturityType::WORK_DAYS)->toggle('maturity-work-days');
72+
73+
$form->addDatePicker('maturityDate', 'admin.configuration.maturity_date')
74+
->setOption('id', 'maturity-date');
75+
76+
$form->addText('maturityDays', 'admin.configuration.maturity_days')
77+
->setOption('id', 'maturity-days')
78+
->addCondition(Form::FILLED)
79+
->addRule(Form::INTEGER, 'admin.configuration.maturity_days_format');
80+
81+
$form->addText('maturityWorkDays', 'admin.configuration.maturity_work_days')
82+
->setOption('id', 'maturity-work-days')
83+
->addCondition(Form::FILLED)
84+
->addRule(Form::INTEGER, 'admin.configuration.maturity_work_days_format');
85+
86+
6787
$form->addSubmit('submit', 'admin.common.save');
6888

6989
$form->setDefaults([
7090
'accountNumber' => $this->settingsRepository->getValue(Settings::ACCOUNT_NUMBER),
7191
'variableSymbolCode' => $this->settingsRepository->getValue(Settings::VARIABLE_SYMBOL_CODE),
72-
'variableSymbolType' => $this->settingsRepository->getValue(Settings::VARIABLE_SYMBOL_TYPE)
92+
'variableSymbolType' => $this->settingsRepository->getValue(Settings::VARIABLE_SYMBOL_TYPE),
93+
'maturityType' => $this->settingsRepository->getValue(Settings::MATURITY_TYPE),
94+
'maturityDate' => $this->settingsRepository->getValue(Settings::MATURITY_DATE),
95+
'maturityDays' => $this->settingsRepository->getValue(Settings::MATURITY_DAYS),
96+
'maturityWorkDays' => $this->settingsRepository->getValue(Settings::MATURITY_WORK_DAYS)
7397
]);
7498

7599
$form->onSuccess[] = [$this, 'processForm'];
@@ -87,6 +111,16 @@ public function processForm(Form $form, \stdClass $values)
87111
$this->settingsRepository->setValue(Settings::ACCOUNT_NUMBER, $values['accountNumber']);
88112
$this->settingsRepository->setValue(Settings::VARIABLE_SYMBOL_CODE, $values['variableSymbolCode']);
89113
$this->settingsRepository->setValue(Settings::VARIABLE_SYMBOL_TYPE, $values['variableSymbolType']);
114+
$this->settingsRepository->setValue(Settings::MATURITY_TYPE, $values['maturityType']);
115+
116+
if (array_key_exists('maturityDate', $values))
117+
$this->settingsRepository->setValue(Settings::MATURITY_DATE, $values['maturityDate']);
118+
119+
if (array_key_exists('maturityDays', $values))
120+
$this->settingsRepository->setValue(Settings::MATURITY_DAYS, $values['maturityDays']);
121+
122+
if (array_key_exists('maturityWorkDays', $values))
123+
$this->settingsRepository->setValue(Settings::MATURITY_WORK_DAYS, $values['maturityWorkDays']);
90124
}
91125

92126
/**
@@ -100,4 +134,16 @@ private function prepareVariableSympolTypeOptions()
100134
$options[$type] = 'common.variable_symbol_type.' . $type;
101135
return $options;
102136
}
137+
138+
/**
139+
* Vrátí způsoby výpočtu splatnosti jako možnosti pro select.
140+
* @return array
141+
*/
142+
private function prepareMaturityTypeOptions()
143+
{
144+
$options = [];
145+
foreach (MaturityType::$types as $type)
146+
$options[$type] = 'common.maturity_type.' . $type;
147+
return $options;
148+
}
103149
}

app/AdminModule/ConfigurationModule/forms/SeminarForm.php

+17-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use App\AdminModule\Forms\BaseForm;
66
use App\Model\Settings\Settings;
77
use App\Model\Settings\SettingsRepository;
8+
use App\Model\Structure\SubeventRepository;
89
use Nette;
910
use Nette\Application\UI\Form;
1011

@@ -23,16 +24,22 @@ class SeminarForm extends Nette\Object
2324
/** @var SettingsRepository */
2425
private $settingsRepository;
2526

27+
/** @var SubeventRepository */
28+
private $subeventRepository;
29+
2630

2731
/**
2832
* SeminarForm constructor.
2933
* @param BaseForm $baseForm
3034
* @param SettingsRepository $settingsRepository
35+
* @param SubeventRepository $subeventRepository
3136
*/
32-
public function __construct(BaseForm $baseForm, SettingsRepository $settingsRepository)
37+
public function __construct(BaseForm $baseForm, SettingsRepository $settingsRepository,
38+
SubeventRepository $subeventRepository)
3339
{
3440
$this->baseForm = $baseForm;
3541
$this->settingsRepository = $settingsRepository;
42+
$this->subeventRepository = $subeventRepository;
3643
}
3744

3845
/**
@@ -59,6 +66,8 @@ public function create()
5966
$editRegistrationTo = $form->addDatePicker('editRegistrationTo', 'admin.configuration.edit_registration_to')
6067
->addRule(Form::FILLED, 'admin.configuration.edit_registration_to_empty');
6168

69+
$form->addCheckbox('isAllowedAddSubeventsAfterPayment', 'admin.configuration.is_allowed_add_subevents_after_payment');
70+
6271
$seminarFromDate->addRule([$this, 'validateSeminarFromDate'], 'admin.configuration.seminar_from_date_after_to', [$seminarFromDate, $seminarToDate]);
6372
$seminarToDate->addRule([$this, 'validateSeminarToDate'], 'admin.configuration.seminar_to_date_before_from', [$seminarToDate, $seminarFromDate]);
6473
$editRegistrationTo->addRule([$this, 'validateEditRegistrationTo'], 'admin.configuration.edit_registration_to_after_from', [$editRegistrationTo, $seminarFromDate]);
@@ -69,7 +78,8 @@ public function create()
6978
'seminarName' => $this->settingsRepository->getValue(Settings::SEMINAR_NAME),
7079
'seminarFromDate' => $this->settingsRepository->getDateValue(Settings::SEMINAR_FROM_DATE),
7180
'seminarToDate' => $this->settingsRepository->getDateValue(Settings::SEMINAR_TO_DATE),
72-
'editRegistrationTo' => $this->settingsRepository->getDateValue(Settings::EDIT_REGISTRATION_TO)
81+
'editRegistrationTo' => $this->settingsRepository->getDateValue(Settings::EDIT_REGISTRATION_TO),
82+
'isAllowedAddSubeventsAfterPayment' => $this->settingsRepository->getValue(Settings::IS_ALLOWED_ADD_SUBEVENTS_AFTER_PAYMENT),
7383
]);
7484

7585
$form->onSuccess[] = [$this, 'processForm'];
@@ -85,9 +95,14 @@ public function create()
8595
public function processForm(Form $form, \stdClass $values)
8696
{
8797
$this->settingsRepository->setValue(Settings::SEMINAR_NAME, $values['seminarName']);
98+
$implicitSubevent = $this->subeventRepository->findImplicit();
99+
$implicitSubevent->setName($values['seminarName']);
100+
$this->subeventRepository->save($implicitSubevent);
101+
88102
$this->settingsRepository->setDateValue(Settings::SEMINAR_FROM_DATE, $values['seminarFromDate']);
89103
$this->settingsRepository->setDateValue(Settings::SEMINAR_TO_DATE, $values['seminarToDate']);
90104
$this->settingsRepository->setDateValue(Settings::EDIT_REGISTRATION_TO, $values['editRegistrationTo']);
105+
$this->settingsRepository->setValue(Settings::IS_ALLOWED_ADD_SUBEVENTS_AFTER_PAYMENT, $values['isAllowedAddSubeventsAfterPayment']);
91106
}
92107

93108
/**

app/AdminModule/MailingModule/forms/EditTemplateForm.php

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public function __construct(BaseForm $baseFormFactory, TemplateRepository $templ
4747

4848
/**
4949
* Vytvoří formulář.
50+
* @param $id
5051
* @return Form
5152
*/
5253
public function create($id)

app/AdminModule/ProgramModule/components/ProgramAttendeesGridControl.php

+8-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use App\Model\ACL\Permission;
66
use App\Model\ACL\Resource;
7+
use App\Model\Enums\ApplicationStates;
78
use App\Model\Mailing\Template;
89
use App\Model\Mailing\TemplateVariable;
910
use App\Model\Program\Program;
@@ -123,9 +124,14 @@ public function createComponentProgramAttendeesGrid($name)
123124
->leftJoin('u.programs', 'p', 'WITH', 'p.id = :pid')
124125
->innerJoin('u.roles', 'r')
125126
->innerJoin('r.permissions', 'per')
126-
->andWhere('per.name = :permission')
127-
->setParameter('pid', $programId)
127+
->innerJoin('u.applications', 'a')
128+
->innerJoin('a.subevents', 's')
129+
->where('per.name = :permission')
130+
->andWhere('s.id = :sid')
131+
->andWhere('(a.state = \'' . ApplicationStates::PAID . '\' OR a.state = \'' . ApplicationStates::WAITING_FOR_PAYMENT . '\')')
132+
->setParameter('pid', $program->getId())
128133
->setParameter('permission', Permission::CHOOSE_PROGRAMS)
134+
->setParameter('sid', $program->getBlock()->getSubevent()->getId())
129135
->orderBy('u.displayName');
130136

131137
if ($this->program->getBlock()->getCategory()) {

app/AdminModule/ProgramModule/components/ProgramBlocksGridControl.php

+15-3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use App\Model\Program\ProgramRepository;
1010
use App\Model\Settings\Settings;
1111
use App\Model\Settings\SettingsRepository;
12+
use App\Model\Structure\SubeventRepository;
1213
use App\Model\User\UserRepository;
1314
use Kdyby\Translation\Translator;
1415
use Nette\Application\UI\Control;
@@ -40,6 +41,9 @@ class ProgramBlocksGridControl extends Control
4041
/** @var ProgramRepository */
4142
private $programRepository;
4243

44+
/** @var SubeventRepository */
45+
private $subeventRepository;
46+
4347

4448
/**
4549
* ProgramBlocksGridControl constructor.
@@ -52,7 +56,8 @@ class ProgramBlocksGridControl extends Control
5256
*/
5357
public function __construct(Translator $translator, BlockRepository $blockRepository,
5458
SettingsRepository $settingsRepository, UserRepository $userRepository,
55-
CategoryRepository $categoryRepository, ProgramRepository $programRepository)
59+
CategoryRepository $categoryRepository, ProgramRepository $programRepository,
60+
SubeventRepository $subeventRepository)
5661
{
5762
parent::__construct();
5863

@@ -62,6 +67,7 @@ public function __construct(Translator $translator, BlockRepository $blockReposi
6267
$this->userRepository = $userRepository;
6368
$this->categoryRepository = $categoryRepository;
6469
$this->programRepository = $programRepository;
70+
$this->subeventRepository = $subeventRepository;
6571
}
6672

6773
/**
@@ -83,15 +89,21 @@ public function createComponentProgramBlocksGrid($name)
8389
$grid->setDataSource($this->blockRepository->createQueryBuilder('b')
8490
->addSelect('l')->leftJoin('b.lector', 'l')
8591
->addSelect('c')->leftJoin('b.category', 'c')
92+
->addSelect('s')->leftJoin('b.subevent', 's')
8693
);
8794
$grid->setDefaultSort(['name' => 'ASC']);
8895
$grid->setPagination(FALSE);
96+
$grid->setColumnsHideable();
8997

9098

9199
$grid->addColumnText('name', 'admin.program.blocks_name')
92100
->setSortable()
93101
->setFilterText();
94102

103+
$grid->addColumnText('subevent', 'admin.program.blocks_subevent', 'subevent.name')
104+
->setSortable('s.name')
105+
->setFilterMultiSelect($this->subeventRepository->getSubeventsOptions(), 's.id');
106+
95107
$grid->addColumnText('category', 'admin.program.blocks_category', 'category.name')
96108
->setSortable('c.name')
97109
->setFilterMultiSelect($this->categoryRepository->getCategoriesOptions(), 'c.id');
@@ -100,7 +112,7 @@ public function createComponentProgramBlocksGrid($name)
100112
->setSortable('l.displayName')
101113
->setFilterMultiSelect($this->userRepository->getLectorsOptions(), 'l.id');
102114

103-
$grid->addColumnText('duration', 'admin.program.blocks_duration')
115+
$grid->addColumnNumber('duration', 'admin.program.blocks_duration')
104116
->setSortable()
105117
->setFilterText();
106118

@@ -136,7 +148,7 @@ public function createComponentProgramBlocksGrid($name)
136148
])
137149
->setTranslateOptions();
138150

139-
$grid->addColumnText('programsCount', 'admin.program.blocks_programs_count')
151+
$grid->addColumnNumber('programsCount', 'admin.program.blocks_programs_count')
140152
->setRenderer(function ($row) {
141153
return $row->getProgramsCount();
142154
});

app/AdminModule/ProgramModule/forms/BlockForm.php

+40-3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use App\Model\Program\ProgramRepository;
1212
use App\Model\Settings\Settings;
1313
use App\Model\Settings\SettingsRepository;
14+
use App\Model\Structure\SubeventRepository;
1415
use App\Model\User\User;
1516
use App\Model\User\UserRepository;
1617
use Nette;
@@ -37,6 +38,12 @@ class BlockForm extends Nette\Object
3738
*/
3839
private $block;
3940

41+
/**
42+
* Počet vytvořených podakcí.
43+
* @var int
44+
*/
45+
private $subeventsCount;
46+
4047
/** @var BaseForm */
4148
private $baseFormFactory;
4249

@@ -55,6 +62,9 @@ class BlockForm extends Nette\Object
5562
/** @var ProgramRepository */
5663
private $programRepository;
5764

65+
/** @var SubeventRepository */
66+
private $subeventRepository;
67+
5868

5969
/**
6070
* BlockForm constructor.
@@ -67,14 +77,16 @@ class BlockForm extends Nette\Object
6777
*/
6878
public function __construct(BaseForm $baseFormFactory, BlockRepository $blockRepository,
6979
UserRepository $userRepository, CategoryRepository $categoryRepository,
70-
SettingsRepository $settingsRepository, ProgramRepository $programRepository)
80+
SettingsRepository $settingsRepository, ProgramRepository $programRepository,
81+
SubeventRepository $subeventRepository)
7182
{
7283
$this->baseFormFactory = $baseFormFactory;
7384
$this->blockRepository = $blockRepository;
7485
$this->userRepository = $userRepository;
7586
$this->categoryRepository = $categoryRepository;
7687
$this->settingsRepository = $settingsRepository;
7788
$this->programRepository = $programRepository;
89+
$this->subeventRepository = $subeventRepository;
7890
}
7991

8092
/**
@@ -88,13 +100,21 @@ public function create($id, $userId)
88100
$this->block = $this->blockRepository->findById($id);
89101
$this->user = $this->userRepository->findById($userId);
90102

103+
$this->subeventsCount = $this->subeventRepository->countExplicitSubevents();
104+
91105
$form = $this->baseFormFactory->create();
92106

93107
$form->addHidden('id');
94108

95109
$form->addText('name', 'admin.program.blocks_name')
96110
->addRule(Form::FILLED, 'admin.program.blocks_name_empty');
97111

112+
if ($this->subeventsCount > 0) {
113+
$form->addSelect('subevent', 'admin.program.blocks_subevent', $this->subeventRepository->getSubeventsOptions())
114+
->setPrompt('')
115+
->addRule(Form::FILLED, 'admin.program.blocks_subevent_empty');
116+
}
117+
98118
$form->addSelect('category', 'admin.program.blocks_category', $this->categoryRepository->getCategoriesOptions())
99119
->setPrompt('');
100120

@@ -162,6 +182,12 @@ public function create($id, $userId)
162182
'description' => $this->block->getDescription(),
163183
'tools' => $this->block->getTools()
164184
]);
185+
186+
if ($this->subeventsCount > 0) {
187+
$form->setDefaults([
188+
'subevent' => $this->block->getSubevent() ? $this->block->getSubevent()->getId() : NULL
189+
]);
190+
}
165191
} else {
166192
$form['name']->addRule(Form::IS_NOT_IN, 'admin.program.blocks_name_exists', $this->blockRepository->findAllNames());
167193
}
@@ -189,6 +215,7 @@ public function processForm(Form $form, \stdClass $values)
189215

190216
$oldMandatory = $this->block->getMandatory();
191217
$oldCategory = $this->block->getCategory();
218+
$oldSubevent = $this->block->getSubevent();
192219

193220
$category = $values['category'] != '' ? $this->categoryRepository->findById($values['category']) : NULL;
194221
$lector = $values['lector'] != '' ? $this->userRepository->findById($values['lector']) : NULL;
@@ -204,6 +231,14 @@ public function processForm(Form $form, \stdClass $values)
204231
$this->block->setDescription($values['description']);
205232
$this->block->setTools($values['tools']);
206233

234+
if ($this->subeventsCount > 0) {
235+
$subevent = $values['subevent'] != '' ? $this->subeventRepository->findById($values['subevent']) : NULL;
236+
$this->block->setSubevent($subevent);
237+
}
238+
else {
239+
$this->block->setSubevent($this->subeventRepository->findImplicit());
240+
}
241+
207242
$this->blockRepository->save($this->block);
208243

209244
//odstraneni ucastniku, pokud se odstrani automaticke prihlasovani
@@ -220,8 +255,10 @@ public function processForm(Form $form, \stdClass $values)
220255
}
221256
}
222257

223-
//aktualizace ucastniku pri zmene kategorie
224-
if ($oldMandatory == $this->block->getMandatory() && $this->block->getCategory() != $oldCategory) {
258+
//aktualizace ucastniku pri zmene kategorie nebo podakce
259+
if ($oldMandatory == $this->block->getMandatory() && (
260+
$this->block->getCategory() !== $oldCategory) || ($this->block->getSubevent() !== $oldSubevent)
261+
) {
225262
$this->programRepository->updateUsersPrograms($this->userRepository->findAll());
226263
}
227264

0 commit comments

Comments
 (0)