1: <?php
2: namespace Budovy;
3:
4: use Nette\Object;
5: use Nette\Utils\Paginator;
6: use Nette\Utils\Html;
7: use Nette\Application\UI;
8: use Kdyby\BootstrapFormRenderer\BootstrapRenderer;
9:
10: class PeriodicTaskFactory extends Object {
11: 12: 13:
14: protected $periodicTaskRepository;
15:
16: 17: 18:
19: protected $unitRepository;
20:
21: 22: 23:
24: protected $operationRepository;
25:
26: 27: 28:
29: protected $contactRepository;
30:
31: 32: 33:
34: protected $placeRepository;
35:
36: 37: 38:
39: protected $documenttypeRepository;
40:
41: 42: 43:
44: protected $priorityRepository;
45:
46: function __construct(PeriodicTaskRepository $periodicTaskRepository, UnitRepository $unitRepository, OperationRepository $operationRepository, ContactRepository $contactRepository, PlaceRepository $placeRepository, DocumenttypeRepository $documenttypeRepository, PriorityRepository $priorityRepository) {
47: $this->periodicTaskRepository = $periodicTaskRepository;
48: $this->unitRepository = $unitRepository;
49: $this->operationRepository = $operationRepository;
50: $this->contactRepository = $contactRepository;
51: $this->placeRepository = $placeRepository;
52: $this->documenttypeRepository = $documenttypeRepository;
53: $this->priorityRepository = $priorityRepository;
54: }
55:
56: function createDataGrid() {
57: $grid = new \Nextras\Datagrid\Datagrid;
58:
59: $grid->addColumn('name', 'Název úkolu')->enableSort();
60: $grid->addColumn('period', 'Perioda');
61: $grid->addColumn('place', 'Umístění')->enableSort();
62: $grid->addColumn('unit', 'Jednotka')->enableSort();
63: $grid->addColumn('operation', 'Operace')->enableSort();
64: $grid->addColumn('contact', 'Kontakt')->enableSort();
65: $grid->addColumn('priority', 'Priorita')->enableSort();
66: $grid->addColumn('sendemail', 'Upozornit e-mailem');
67:
68: $grid->setRowPrimaryKey('id');
69:
70: $grid->setDatasourceCallback(function ($filter, $order, Paginator $paginator = null) {
71: return $this->periodicTaskRepository->getGridSelection($filter, $order, $paginator->page, $paginator->itemsPerPage);
72: });
73:
74: $grid->setFilterFormFactory(function () {
75: $form = new \Nette\Forms\Container;
76:
77: $form->addText('name');
78: $form->addSelect('period', 'Perioda', array('' => '') + $this->periodicTaskRepository->getPeriodNames());
79: $form->addSelect('unit', 'Jednotka', array('' => '') + $this->unitRepository->getPairData());
80: $form->addSelect('operation', 'Operace', array('' => '') + $this->operationRepository->getPairData());
81: $form->addSelect('place', 'Umístění', array('' => '') + $this->placeRepository->getPairData());
82: $form->addSelect('contact', 'Kontakt', array('' => '') + $this->contactRepository->getPairData());
83: $form->addSelect('priority', 'Priorita', array('' => '') + $this->priorityRepository->getPairData());
84:
85: $form->addSubmit('filter', 'Hledej');
86: $form->addSubmit('cancel', 'Zrušit');
87:
88: $pretyp = $form['filter']->getControlPrototype();
89: $pretyp->setName("button");
90: $pretyp->type = 'submit';
91: $pretyp->class = 'ico-btn';
92: $pretyp->create('i class="fa fa-search"');
93:
94: $pretyp = $form['cancel']->getControlPrototype();
95: $pretyp->setName("button");
96: $pretyp->type = 'submit';
97: $pretyp->class = 'ico-btn';
98: $pretyp->create('i class="fa fa-times-circle-o"');
99:
100: return $form;
101: });
102:
103: $grid->setPagination(20, function ($filter, $order) {
104: return $this->periodicTaskRepository->getGridCount($filter);
105: });
106:
107: $grid->addCellsTemplate(__DIR__ . '/../templates/PeriodicTask/grid.latte');
108:
109: return $grid;
110: }
111:
112: function createEditForm($backlink) {
113: $form = new UI\Form;
114:
115: $form->setRenderer(new BootstrapRenderer());
116:
117: $form->getElementPrototype()->class = 'form-horizontal';
118:
119: $base = $form->addContainer('base');
120:
121: $base->addText('name', 'Název:')
122: ->setRequired('Zadejte prosím jméno')
123: ->setAttribute('class', 'form-control');
124:
125: $base->addCheckbox('m1', 'Leden')
126: ->setAttribute('class', 'form-control');
127: $base->addCheckbox('m2', 'Únor')
128: ->setAttribute('class', 'form-control');
129: $base->addCheckbox('m3', 'Březen')
130: ->setAttribute('class', 'form-control');
131: $base->addCheckbox('m4', 'Duben')
132: ->setAttribute('class', 'form-control');
133: $base->addCheckbox('m5', 'Květen')
134: ->setAttribute('class', 'form-control');
135: $base->addCheckbox('m6', 'Červen')
136: ->setAttribute('class', 'form-control');
137: $base->addCheckbox('m7', 'Červenec')
138: ->setAttribute('class', 'form-control');
139: $base->addCheckbox('m8', 'Srpen')
140: ->setAttribute('class', 'form-control');
141: $base->addCheckbox('m9', 'Září')
142: ->setAttribute('class', 'form-control');
143: $base->addCheckbox('m10', 'Říjen')
144: ->setAttribute('class', 'form-control');
145: $base->addCheckbox('m11', 'Listopad')
146: ->setAttribute('class', 'form-control');
147: $base->addCheckbox('m12', 'Prosinec')
148: ->setAttribute('class', 'form-control');
149:
150: $base->addSelect('period', 'Den', $this->periodicTaskRepository->getPeriodNames());
151:
152: $base->addSelect('id_priority', 'Priorita', $this->priorityRepository->getPairData());
153: $base->addSelect('id_unit', 'Jednotka', $this->unitRepository->getPairData());
154: $base->addSelect('id_operation', 'Operace', $this->operationRepository->getPairData());
155: $base->addSelect('id_contact', 'Kontakt', array(0 => '') + $this->contactRepository->getPairData());
156:
157: $base->addCheckbox('sendemail')
158: ->setAttribute('class', 'form-control');
159:
160: $base->addTextArea('description', 'Poznámka:')
161: ->setAttribute('class', 'form-control');
162:
163: $form->addSubmit('saving', 'Uložit a zpět')
164: ->setAttribute('class', 'btn btn-primary');
165:
166: $form->addSubmit('back')
167: ->setAttribute('class', 'btn btn-inverse')
168: ->getControlPrototype()
169: ->setName('a')
170: ->href($backlink)
171: ->add(Html::el('i')->class('fa fa-reply'))
172: ->add(Html::el('span', ' Zpět'));
173:
174: $document = $form->addContainer('document');
175:
176: $document->addSelect('id_documenttype', 'Typ', $this->documenttypeRepository->getPairData());
177: $document->addUpload('files', 'Soubor', true);
178:
179: return $form;
180: }
181:
182: function createRealizationForm($backlink) {
183: $form = new UI\Form;
184:
185: $form->setRenderer(new BootstrapRenderer());
186:
187: $form->getElementPrototype()->class = 'form-horizontal';
188:
189: $base = $form->addContainer('base');
190:
191: $base->addHidden('id_periodictask');
192:
193: $base->addText('price', 'Cena opravy:')
194: ->addRule(UI\Form::FLOAT, 'Cena musí být číslo')
195: ->setAttribute('class', 'form-control');
196:
197: $base->addDate('date', 'Datum', \Vodacek\Forms\Controls\DateInput::TYPE_DATE)
198: ->addRule(UI\Form::VALID)
199: ->setAttribute('class', 'form-control');
200:
201: $base->addSelect('id_contact', 'Kontakt', array(0 => '') + $this->contactRepository->getPairData());
202:
203: $base->addTextArea('description', 'Popis:')
204: ->setAttribute('class', 'form-control');
205:
206: $form->addSubmit('saving', 'Uložit a zpět')
207: ->setAttribute('class', 'btn btn-primary');
208:
209: $form->addSubmit('back')
210: ->setAttribute('class', 'btn btn-inverse')
211: ->getControlPrototype()
212: ->setName('a')
213: ->href($backlink)
214: ->add(Html::el('i')->class('fa fa-reply'))
215: ->add(Html::el('span', ' Zpět'));
216:
217: $document = $form->addContainer('document');
218:
219: $document->addSelect('id_documenttype', 'Typ', $this->documenttypeRepository->getPairData());
220: $document->addUpload('files', 'Soubor', true);
221:
222: return $form;
223: }
224: }