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 ScheduledTaskFactory extends Object {
11: 12: 13:
14: protected $scheduledTaskRepository;
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(ScheduledTaskRepository $scheduledTaskRepository, UnitRepository $unitRepository, OperationRepository $operationRepository, ContactRepository $contactRepository, PlaceRepository $placeRepository, DocumenttypeRepository $documenttypeRepository, PriorityRepository $priorityRepository) {
47: $this->scheduledTaskRepository = $scheduledTaskRepository;
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('start', 'Start')->enableSort();
61: $grid->addColumn('end', 'Konec')->enableSort();
62: $grid->addColumn('place', 'Umístění')->enableSort();
63: $grid->addColumn('unit', 'Jednotka')->enableSort();
64: $grid->addColumn('operation', 'Operace')->enableSort();
65: $grid->addColumn('contact', 'Kontakt')->enableSort();
66: $grid->addColumn('priority', 'Priorita')->enableSort();
67: $grid->addColumn('sendemail', 'Upozornit e-mailem');
68:
69: $grid->setRowPrimaryKey('id');
70:
71: $grid->setDatasourceCallback(function ($filter, $order, Paginator $paginator = null) {
72: return $this->scheduledTaskRepository->getGridSelection($filter, $order, $paginator->page, $paginator->itemsPerPage);
73: });
74:
75: $grid->setFilterFormFactory(function () {
76: $form = new \Nette\Forms\Container;
77:
78: $form->addText('name');
79: $form->addText('start')->setAttribute('data-dateinput-type', 'date');
80: $form->addText('end')->setAttribute('data-dateinput-type', 'date');
81: $form->addSelect('place', 'Umístění', array('' => '') + $this->placeRepository->getPairData());
82: $form->addSelect('unit', 'Jednotka', array('' => '') + $this->unitRepository->getPairData());
83: $form->addSelect('operation', 'Operace', array('' => '') + $this->operationRepository->getPairData());
84: $form->addSelect('contact', 'Kontakt', array('' => '') + $this->contactRepository->getPairData());
85: $form->addSelect('priority', 'Priorita', array('' => '') + $this->priorityRepository->getPairData());
86:
87: $form->addSubmit('filter', 'Hledej');
88: $form->addSubmit('cancel', 'Zrušit');
89:
90: $pretyp = $form['filter']->getControlPrototype();
91: $pretyp->setName("button");
92: $pretyp->type = 'submit';
93: $pretyp->class = 'ico-btn';
94: $pretyp->create('i class="fa fa-search"');
95:
96: $pretyp = $form['cancel']->getControlPrototype();
97: $pretyp->setName("button");
98: $pretyp->type = 'submit';
99: $pretyp->class = 'ico-btn';
100: $pretyp->create('i class="fa fa-times-circle-o"');
101:
102: return $form;
103: });
104:
105: $grid->setPagination(20, function ($filter, $order) {
106: return $this->scheduledTaskRepository->getGridCount($filter);
107: });
108:
109: $grid->addCellsTemplate(__DIR__ . '/../templates/ScheduledTask/grid.latte');
110:
111: return $grid;
112: }
113:
114: function createEditForm($backlink) {
115: $form = new UI\Form;
116:
117: $form->setRenderer(new BootstrapRenderer());
118:
119: $form->getElementPrototype()->class = 'form-horizontal';
120:
121: $base = $form->addContainer('base');
122:
123: $base->addText('name', 'Název:')
124: ->setRequired('Zadejte prosím jméno')
125: ->setAttribute('class', 'form-control');
126:
127: $base->addDate('start', 'Start', \Vodacek\Forms\Controls\DateInput::TYPE_DATE)
128: ->addRule(UI\Form::VALID)
129: ->setAttribute('class', 'form-control');
130:
131: $base->addDate('end', 'Konec', \Vodacek\Forms\Controls\DateInput::TYPE_DATE)
132: ->addRule(UI\Form::VALID)
133: ->setAttribute('class', 'form-control');
134:
135: $base->addSelect('id_priority', 'Priorita', $this->priorityRepository->getPairData());
136: $base->addSelect('id_unit', 'Jednotka', $this->unitRepository->getPairData());
137: $base->addSelect('id_operation', 'Operace', $this->operationRepository->getPairData());
138: $base->addSelect('id_contact', 'Kontakt', array(0 => '') + $this->contactRepository->getPairData());
139:
140: $base->addCheckbox('sendemail')
141: ->setAttribute('class', 'form-control');
142:
143: $base->addTextArea('description', 'Poznámka:')
144: ->setAttribute('class', 'form-control');
145:
146: $form->addSubmit('saving', 'Uložit a zpět')
147: ->setAttribute('class', 'btn btn-primary');
148:
149: $form->addSubmit('back')
150: ->setAttribute('class', 'btn btn-inverse')
151: ->getControlPrototype()
152: ->setName('a')
153: ->href($backlink)
154: ->add(Html::el('i')->class('fa fa-reply'))
155: ->add(Html::el('span', ' Zpět'));
156:
157: $document = $form->addContainer('document');
158:
159: $document->addSelect('id_documenttype', 'Typ', $this->documenttypeRepository->getPairData());
160: $document->addUpload('files', 'Soubor', true);
161:
162: return $form;
163: }
164:
165: function createRealizationForm($backlink) {
166: $form = new UI\Form;
167:
168: $form->setRenderer(new BootstrapRenderer());
169:
170: $form->getElementPrototype()->class = 'form-horizontal';
171:
172: $base = $form->addContainer('base');
173:
174: $base->addHidden('id_scheduledtask');
175:
176: $base->addText('price', 'Cena opravy:')
177: ->addRule(UI\Form::FLOAT, 'Cena musí být číslo')
178: ->setAttribute('class', 'form-control');
179:
180: $base->addDate('date', 'Datum', \Vodacek\Forms\Controls\DateInput::TYPE_DATE)
181: ->addRule(UI\Form::VALID)
182: ->setAttribute('class', 'form-control');
183:
184: $base->addSelect('id_contact', 'Kontakt', array(0 => '') + $this->contactRepository->getPairData());
185:
186: $base->addTextArea('description', 'Popis:')
187: ->setAttribute('class', 'form-control');
188:
189: $form->addSubmit('saving', 'Uložit a zpět')
190: ->setAttribute('class', 'btn btn-primary');
191:
192: $form->addSubmit('back')
193: ->setAttribute('class', 'btn btn-inverse')
194: ->getControlPrototype()
195: ->setName('a')
196: ->href($backlink)
197: ->add(Html::el('i')->class('fa fa-reply'))
198: ->add(Html::el('span', ' Zpět'));
199:
200:
201: $document = $form->addContainer('document');
202:
203: $document->addSelect('id_documenttype', 'Typ', $this->documenttypeRepository->getPairData());
204: $document->addUpload('files', 'Soubor', true);
205:
206: return $form;
207: }
208: }