1 <?php
2
3 namespace Objednavky;
4
5 use Nette\Application\UI;
6 use Nette\Utils\Html;
7 use Nette\Database\Table\Selection;
8 use Kdyby\BootstrapFormRenderer\BootstrapRenderer;
9 use PLus\Orders\Repositories;
10 use PLus\Orders\Factory;
11
12
13 14 15 16 17
18 class TraderPresenter extends BasePresenter {
19
20
21
22 public $documentFactory;
23
24
25 public $consultationFactory;
26
27
28 public $areaRepository;
29
30
31 public $consultationRepository;
32
33
34 public $postRepository;
35
36
37 public $orderRepository;
38
39
40 public $ordertypeRepository;
41
42
43 public $realizationRepository;
44
45
46 public $timelineRepository;
47
48
49 public $itemorderRepository;
50
51
52 public $itemareastateRepository;
53
54
55 public $investmentRepository;
56
57
58 public $unituserRepository;
59
60
61 public $unitRepository;
62
63
64 public $commentRepository;
65
66
67 public $userRepository;
68
69
70 public $documenttypeRepository;
71
72
73 public $documentRepository;
74
75
76 public $chiefRepository;
77
78
79 public $traderRepository;
80
81
82 public $managerRepository;
83
84
85 public $expertRepository;
86
87
88 public $cfgRepository;
89
90
91 public $parameters;
92
93
94 public $mailerCfg;
95
96
97
98
99
100 public function createComponentTraderInGrid($name) {
101
102 $user = $this->getUser();
103
104 $grid = new \Grido\Grid($this, $name);
105 $grid->setmodel($this->orderRepository->getGridSelectionTraderIn());
106
107 $grid->translator->lang = 'cs';
108 $grid->defaultPerPage = 15;
109 $grid->filterRenderType = \Grido\Components\Filters\Filter::RENDER_OUTER;
110 $grid->setRememberState(FALSE);
111
112 $grid->setRowCallback(function($row, \Nette\Utils\Html $tr) {
113 if($row->isinvestment == 1) {
114 $tr->class[] = 'investment';
115 }
116 return $tr;
117 });
118
119
120 $grid->addColumnText('id', 'ID')
121 ->setSortable()
122 ->setFilterText()
123 ->setWhere(function ($value, $connection) { $connection->where("order.id ?", $value);});
124 $grid->getColumn('id')->cellPrototype->class[] = 'center';
125 $grid->getColumn('id')->headerPrototype->style['width'] = '3%';
126
127 $grid->addColumnText('name', 'Předmět')
128 ->setSortable()
129 ->setColumn('name')
130 ->setFilterText()
131 ->setSuggestion(function ($item){ return $item->name; })
132 ->setColumn('name')
133 ->setWhere(function ($value, $connection){ $connection->where("order.name LIKE ?", "%$value%");});
134 $grid->getColumn('name')->headerPrototype->style['width'] = '15%';
135
136 $grid->addColumnDate('created', 'Vytvořeno')
137 ->setSortable()
138 ->setDateFormat(\Grido\Components\Columns\Date::FORMAT_DATE)
139 ->setFilterDate();
140 $grid->getColumn('created')->cellPrototype->class[] = 'center';
141
142 $grid->addColumnText('ns', 'NS')
143 ->setSortable()
144 ->setColumn('ns')
145 ->setFilterText()
146 ->setSuggestion(function ($item){ return $item->ns; })
147 ->setColumn('ns')
148 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.ns LIKE ?", "%$value%");});
149 $grid->getColumn('ns')->headerPrototype->style['width'] = '5%';
150
151 $grid->addColumnText('uname', 'Název')
152 ->setSortable()
153 ->setColumn('uname')
154 ->setFilterText()
155 ->setSuggestion(function ($item){ return $item->uname; })
156 ->setColumn('uname')
157 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.name LIKE ?", "%$value%");});
158 $grid->getColumn('uname')->headerPrototype->style['width'] = '10%';
159
160 $grid->addColumnText('tname', 'Typ')
161 ->setSortable()
162 ->setColumn('tname');
163 $grid->getColumn('tname')->headerPrototype->style['width'] = '5%';
164 $grid->addFilterSelect('tname', 'Typ', array('' => '') + $this->ordertypeRepository->getFilterData())
165 ->setWhere(function ($value, $connection){ $connection->where("ordertype.name LIKE ?", "%$value%");});
166
167 $grid->addColumnText('rname', 'Realizace')
168 ->setSortable()
169 ->setColumn('rname');
170 $grid->getColumn('rname')->headerPrototype->style['width'] = '15%';
171 $grid->addFilterSelect('rname', 'Realizace', array('' => '') + $this->realizationRepository->getFilterData())
172 ->setWhere(function ($value, $connection){ $connection->where("realization.name LIKE ?", "%$value%");});
173
174 $grid->addActionHref('view', 'Zobrazit')
175 ->setIcon('fa fa-eye fa-fw')
176 ->setCustomRender($this->gridBtnSuccess);
177
178
179 $grid->setExport();
180 }
181
182
183
184 public function createComponentTraderToUnitGrid($name) {
185
186 $user = $this->getUser();
187
188 $grid = new \Grido\Grid($this, $name);
189 $grid->setmodel($this->orderRepository->getGridSelectionTraderToUnit());
190
191 $grid->translator->lang = 'cs';
192 $grid->defaultPerPage = 15;
193 $grid->filterRenderType = \Grido\Components\Filters\Filter::RENDER_OUTER;
194 $grid->setRememberState(FALSE);
195
196 $grid->setRowCallback(function($row, \Nette\Utils\Html $tr) {
197 if($row->isinvestment == 1) {
198 $tr->class[] = 'investment';
199 }
200 return $tr;
201 });
202
203
204 $grid->addColumnText('id', 'ID')
205 ->setSortable()
206 ->setFilterText()
207 ->setWhere(function ($value, $connection) { $connection->where("order.id ?", $value);});
208 $grid->getColumn('id')->cellPrototype->class[] = 'center';
209 $grid->getColumn('id')->headerPrototype->style['width'] = '3%';
210
211 $grid->addColumnText('name', 'Předmět')
212 ->setSortable()
213 ->setColumn('name')
214 ->setFilterText()
215 ->setSuggestion(function ($item){ return $item->name; })
216 ->setColumn('name')
217 ->setWhere(function ($value, $connection){ $connection->where("order.name LIKE ?", "%$value%");});
218 $grid->getColumn('name')->headerPrototype->style['width'] = '15%';
219
220 $grid->addColumnDate('created', 'Vytvořeno')
221 ->setSortable()
222 ->setDateFormat(\Grido\Components\Columns\Date::FORMAT_DATE)
223 ->setFilterDate();
224 $grid->getColumn('created')->cellPrototype->class[] = 'center';
225
226 $grid->addColumnText('ns', 'NS')
227 ->setSortable()
228 ->setColumn('ns')
229 ->setFilterText()
230 ->setSuggestion(function ($item){ return $item->ns; })
231 ->setColumn('ns')
232 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.ns LIKE ?", "%$value%");});
233 $grid->getColumn('ns')->headerPrototype->style['width'] = '5%';
234
235 $grid->addColumnText('uname', 'Název')
236 ->setSortable()
237 ->setColumn('uname')
238 ->setFilterText()
239 ->setSuggestion(function ($item){ return $item->uname; })
240 ->setColumn('uname')
241 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.name LIKE ?", "%$value%");});
242 $grid->getColumn('uname')->headerPrototype->style['width'] = '13%';
243
244
245 $grid->addColumnText('tname', 'Typ')
246 ->setSortable()
247 ->setColumn('tname');
248 $grid->getColumn('tname')->headerPrototype->style['width'] = '5%';
249 $grid->addFilterSelect('tname', 'Typ', array('' => '') + $this->ordertypeRepository->getFilterData())
250 ->setWhere(function ($value, $connection){ $connection->where("ordertype.name LIKE ?", "%$value%");});
251
252 $grid->addColumnText('rname', 'Realizace')
253 ->setSortable()
254 ->setColumn('rname');
255 $grid->getColumn('rname')->headerPrototype->style['width'] = '15%';
256 $grid->addFilterSelect('rname', 'Realizace', array('' => '') + $this->realizationRepository->getFilterData())
257 ->setWhere(function ($value, $connection){ $connection->where("realization.name LIKE ?", "%$value%");});
258
259 $grid->addActionHref('view', 'Zobrazit')
260 ->setIcon('fa fa-eye fa-fw')
261 ->setCustomRender($this->gridBtnSuccess);
262
263
264 $grid->setExport();
265 }
266
267
268
269 public function createComponentTraderToExpertGrid($name) {
270
271 $user = $this->getUser();
272
273 $grid = new \Grido\Grid($this, $name);
274 $grid->setmodel($this->orderRepository->getGridSelectionTraderToExpert());
275
276 $grid->translator->lang = 'cs';
277 $grid->setDefaultSort(array('id' => 'ASC'));
278 $grid->defaultPerPage = 15;
279 $grid->filterRenderType = \Grido\Components\Filters\Filter::RENDER_OUTER;
280 $grid->setRememberState(FALSE);
281
282 $grid->setRowCallback(function($row, \Nette\Utils\Html $tr) {
283 if($row->isinvestment == 1) {
284 $tr->class[] = 'investment';
285 }
286 return $tr;
287 });
288
289
290 $grid->addColumnText('id', 'ID')
291 ->setSortable()
292 ->setFilterText()
293 ->setWhere(function ($value, $connection) { $connection->where("order.id ?", $value);});
294 $grid->getColumn('id')->cellPrototype->class[] = 'center';
295 $grid->getColumn('id')->headerPrototype->style['width'] = '3%';
296
297 $grid->addColumnText('name', 'Předmět')
298 ->setSortable()
299 ->setColumn('name')
300 ->setFilterText()
301 ->setSuggestion(function ($item){ return $item->name; })
302 ->setColumn('name')
303 ->setWhere(function ($value, $connection){ $connection->where("order.name LIKE ?", "%$value%");});
304 $grid->getColumn('name')->headerPrototype->style['width'] = '15%';
305
306 $grid->addColumnDate('created', 'Vytvořeno')
307 ->setSortable()
308 ->setDateFormat(\Grido\Components\Columns\Date::FORMAT_DATE)
309 ->setFilterDate();
310 $grid->getColumn('created')->cellPrototype->class[] = 'center';
311
312 $grid->addColumnText('ns', 'NS')
313 ->setSortable()
314 ->setColumn('ns')
315 ->setFilterText()
316 ->setSuggestion(function ($item){ return $item->ns; })
317 ->setColumn('ns')
318 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.ns LIKE ?", "%$value%");});
319 $grid->getColumn('ns')->headerPrototype->style['width'] = '5%';
320
321 $grid->addColumnText('uname', 'Název')
322 ->setSortable()
323 ->setColumn('uname')
324 ->setFilterText()
325 ->setSuggestion(function ($item){ return $item->uname; })
326 ->setColumn('uname')
327 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.name LIKE ?", "%$value%");});
328 $grid->getColumn('uname')->headerPrototype->style['width'] = '13%';
329
330
331 $grid->addColumnText('tname', 'Typ')
332 ->setSortable()
333 ->setColumn('tname');
334 $grid->getColumn('tname')->headerPrototype->style['width'] = '5%';
335 $grid->addFilterSelect('tname', 'Typ', array('' => '') + $this->ordertypeRepository->getFilterData())
336 ->setWhere(function ($value, $connection){ $connection->where("ordertype.name LIKE ?", "%$value%");});
337
338 $grid->addColumnText('rname', 'Realizace')
339 ->setSortable()
340 ->setColumn('rname');
341 $grid->getColumn('rname')->headerPrototype->style['width'] = '15%';
342 $grid->addFilterSelect('rname', 'Realizace', array('' => '') + $this->realizationRepository->getFilterData())
343 ->setWhere(function ($value, $connection){ $connection->where("realization.name LIKE ?", "%$value%");});
344
345 $grid->addActionHref('view', 'Zobrazit')
346 ->setIcon('fa fa-eye fa-fw')
347 ->setCustomRender($this->gridBtnSuccess);
348
349
350 $grid->setExport();
351 }
352
353
354
355 public function createComponentTraderToManagerGrid($name) {
356
357 $user = $this->getUser();
358
359 $grid = new \Grido\Grid($this, $name);
360 $grid->setmodel($this->orderRepository->getGridSelectionTraderToManager());
361
362 $grid->translator->lang = 'cs';
363 $grid->setDefaultSort(array('id' => 'ASC'));
364 $grid->defaultPerPage = 15;
365 $grid->filterRenderType = \Grido\Components\Filters\Filter::RENDER_OUTER;
366 $grid->setRememberState(FALSE);
367
368 $grid->setRowCallback(function($row, \Nette\Utils\Html $tr) {
369 if($row->isinvestment == 1) {
370 $tr->class[] = 'investment';
371 }
372 return $tr;
373 });
374
375 $grid->addColumnText('id', 'ID')
376 ->setSortable()
377 ->setFilterText()
378 ->setWhere(function ($value, $connection) { $connection->where("order.id ?", $value);});
379 $grid->getColumn('id')->cellPrototype->class[] = 'center';
380 $grid->getColumn('id')->headerPrototype->style['width'] = '3%';
381
382 $grid->addColumnText('name', 'Předmět')
383 ->setSortable()
384 ->setColumn('name')
385 ->setFilterText()
386 ->setSuggestion(function ($item){ return $item->name; })
387 ->setColumn('name')
388 ->setWhere(function ($value, $connection){ $connection->where("order.name LIKE ?", "%$value%");});
389 $grid->getColumn('name')->headerPrototype->style['width'] = '15%';
390
391 $grid->addColumnDate('created', 'Vytvořeno')
392 ->setSortable()
393 ->setDateFormat(\Grido\Components\Columns\Date::FORMAT_DATE)
394 ->setFilterDate();
395 $grid->getColumn('created')->cellPrototype->class[] = 'center';
396
397 $grid->addColumnText('ns', 'NS')
398 ->setSortable()
399 ->setColumn('ns')
400 ->setFilterText()
401 ->setSuggestion(function ($item){ return $item->ns; })
402 ->setColumn('ns')
403 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.ns LIKE ?", "%$value%");});
404 $grid->getColumn('ns')->headerPrototype->style['width'] = '5%';
405
406 $grid->addColumnText('uname', 'Název')
407 ->setSortable()
408 ->setColumn('uname')
409 ->setFilterText()
410 ->setSuggestion(function ($item){ return $item->uname; })
411 ->setColumn('uname')
412 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.name LIKE ?", "%$value%");});
413 $grid->getColumn('uname')->headerPrototype->style['width'] = '13%';
414
415
416 $grid->addColumnText('tname', 'Typ')
417 ->setSortable()
418 ->setColumn('tname');
419 $grid->getColumn('tname')->headerPrototype->style['width'] = '5%';
420 $grid->addFilterSelect('tname', 'Typ', array('' => '') + $this->ordertypeRepository->getFilterData())
421 ->setWhere(function ($value, $connection){ $connection->where("ordertype.name LIKE ?", "%$value%");});
422
423 $grid->addColumnText('rname', 'Realizace')
424 ->setSortable()
425 ->setColumn('rname');
426 $grid->getColumn('rname')->headerPrototype->style['width'] = '15%';
427 $grid->addFilterSelect('rname', 'Realizace', array('' => '') + $this->realizationRepository->getFilterData())
428 ->setWhere(function ($value, $connection){ $connection->where("realization.name LIKE ?", "%$value%");});
429
430 $grid->addActionHref('view', 'Zobrazit')
431 ->setIcon('fa fa-eye fa-fw')
432 ->setCustomRender($this->gridBtnSuccess);
433
434
435 $grid->setExport();
436 }
437
438
439
440 public function createComponentTraderValidateGrid($name) {
441
442 $user = $this->getUser();
443
444 $grid = new \Grido\Grid($this, $name);
445 $grid->setmodel($this->orderRepository->getGridSelectionTraderValidate());
446
447 $grid->translator->lang = 'cs';
448 $grid->setDefaultSort(array('id' => 'ASC'));
449 $grid->defaultPerPage = 15;
450 $grid->filterRenderType = \Grido\Components\Filters\Filter::RENDER_OUTER;
451 $grid->setRememberState(FALSE);
452
453 $grid->setRowCallback(function($row, \Nette\Utils\Html $tr) {
454 if($row->isinvestment == 1 && $row->returnflag != 1) {
455 $tr->class[] = 'investment';
456 }
457 elseif ($row->returnflag == 1) {
458 $tr->class[] = 'returned';
459 }
460 return $tr;
461 });
462
463 $grid->addColumnText('id', 'ID')
464 ->setSortable()
465 ->setFilterText()
466 ->setWhere(function ($value, $connection) { $connection->where("order.id ?", $value);});
467 $grid->getColumn('id')->cellPrototype->class[] = 'center';
468 $grid->getColumn('id')->headerPrototype->style['width'] = '3%';
469
470 $grid->addColumnText('name', 'Předmět')
471 ->setSortable()
472 ->setColumn('name')
473 ->setFilterText()
474 ->setSuggestion(function ($item){ return $item->name; })
475 ->setColumn('name')
476 ->setWhere(function ($value, $connection){ $connection->where("order.name LIKE ?", "%$value%");});
477 $grid->getColumn('name')->headerPrototype->style['width'] = '15%';
478
479 $grid->addColumnDate('created', 'Vytvořeno')
480 ->setSortable()
481 ->setDateFormat(\Grido\Components\Columns\Date::FORMAT_DATE)
482 ->setFilterDate();
483 $grid->getColumn('created')->cellPrototype->class[] = 'center';
484
485 $grid->addColumnText('ns', 'NS')
486 ->setSortable()
487 ->setColumn('ns')
488 ->setFilterText()
489 ->setSuggestion(function ($item){ return $item->ns; })
490 ->setColumn('ns')
491 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.ns LIKE ?", "%$value%");});
492 $grid->getColumn('ns')->headerPrototype->style['width'] = '5%';
493
494 $grid->addColumnText('uname', 'Název')
495 ->setSortable()
496 ->setColumn('uname')
497 ->setFilterText()
498 ->setSuggestion(function ($item){ return $item->uname; })
499 ->setColumn('uname')
500 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.name LIKE ?", "%$value%");});
501 $grid->getColumn('uname')->headerPrototype->style['width'] = '13%';
502
503 $grid->addColumnText('tname', 'Typ')
504 ->setSortable()
505 ->setColumn('tname');
506 $grid->getColumn('tname')->headerPrototype->style['width'] = '5%';
507 $grid->addFilterSelect('tname', 'Typ', array('' => '') + $this->ordertypeRepository->getFilterData())
508 ->setWhere(function ($value, $connection){ $connection->where("ordertype.name LIKE ?", "%$value%");});
509
510 $grid->addColumnText('rname', 'Realizace')
511 ->setSortable()
512 ->setColumn('rname');
513 $grid->getColumn('rname')->headerPrototype->style['width'] = '15%';
514 $grid->addFilterSelect('rname', 'Realizace', array('' => '') + $this->realizationRepository->getFilterData())
515 ->setWhere(function ($value, $connection){ $connection->where("realization.name LIKE ?", "%$value%");});
516
517 $grid->addActionHref('view', 'Zobrazit')
518 ->setIcon('fa fa-eye fa-fw')
519 ->setCustomRender($this->gridBtnCustom);
520
521 $grid->setExport();
522 }
523
524
525 526 527 528 529 530 531
532 public function gridBtnDanger($item, \Nette\Utils\Html $el)
533 {
534 if ($item['returnflag'] == 1) {
535 $class = str_replace('btn-default ', '', implode(' ', $el->class));
536 $el->class = [$class . ' btn-danger'];
537 }
538 return $el;
539 }
540
541 542 543 544 545 546
547 public function gridBtnSuccess($item, \Nette\Utils\Html $el)
548 {
549 if ($item['isinvestment'] == 1) {
550 $class = str_replace('btn-default ', '', implode(' ', $el->class));
551 $el->class = [$class . ' btn-success'];
552 }
553 return $el;
554 }
555
556
557 public function gridBtnCustom($item, \Nette\Utils\Html $el)
558 {
559 if ($item['isinvestment'] == 1 && $item['returnflag'] != 1) {
560 $class = str_replace('btn-default ', '', implode(' ', $el->class));
561 $el->class = [$class . ' btn-success'];
562 }
563 elseif ($item['returnflag'] == 1) {
564 $class = str_replace('btn-default ', '', implode(' ', $el->class));
565 $el->class = [$class . ' btn-danger'];
566 }
567 return $el;
568 }
569
570
571
572 public function createComponentTraderToRealizeGrid($name) {
573
574 $user = $this->getUser();
575
576 $grid = new \Grido\Grid($this, $name);
577 $order_ids = $this->itemorderRepository->findOrderWithoutImplementer();
578 $grid->setModel($this->orderRepository->getGridSelectionTraderToRealize($order_ids));
579
580 $grid->translator->lang = 'cs';
581 $grid->setDefaultSort(array('id' => 'ASC'));
582 $grid->defaultPerPage = 15;
583 $grid->filterRenderType = \Grido\Components\Filters\Filter::RENDER_OUTER;
584 $grid->setRememberState(FALSE);
585
586 $grid->setRowCallback(function($row, \Nette\Utils\Html $tr) {
587 if($row->isinvestment == 1) {
588 $tr->class[] = 'investment';
589 }
590 return $tr;
591 });
592
593 $grid->addColumnText('id', 'ID')
594 ->setSortable()
595 ->setFilterText()
596 ->setWhere(function ($value, $connection) { $connection->where("order.id ?", $value);});
597 $grid->getColumn('id')->cellPrototype->class[] = 'center';
598 $grid->getColumn('id')->headerPrototype->style['width'] = '3%';
599
600 $grid->addColumnText('name', 'Předmět')
601 ->setSortable()
602 ->setColumn('name')
603 ->setFilterText()
604 ->setSuggestion(function ($item){ return $item->name; })
605 ->setColumn('name')
606 ->setWhere(function ($value, $connection){ $connection->where("order.name LIKE ?", "%$value%");});
607 $grid->getColumn('name')->headerPrototype->style['width'] = '15%';
608
609 $grid->addColumnDate('created', 'Vytvořeno')
610 ->setSortable()
611 ->setDateFormat(\Grido\Components\Columns\Date::FORMAT_DATE)
612 ->setFilterDate();
613 $grid->getColumn('created')->cellPrototype->class[] = 'center';
614
615 $grid->addColumnText('ns', 'NS')
616 ->setSortable()
617 ->setColumn('ns')
618 ->setFilterText()
619 ->setSuggestion(function ($item){ return $item->ns; })
620 ->setColumn('ns')
621 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.ns LIKE ?", "%$value%");});
622 $grid->getColumn('ns')->headerPrototype->style['width'] = '5%';
623
624 $grid->addColumnText('uname', 'Název')
625 ->setSortable()
626 ->setColumn('uname')
627 ->setFilterText()
628 ->setSuggestion(function ($item){ return $item->uname; })
629 ->setColumn('uname')
630 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.name LIKE ?", "%$value%");});
631 $grid->getColumn('uname')->headerPrototype->style['width'] = '13%';
632
633 $grid->addColumnText('tname', 'Typ')
634 ->setSortable()
635 ->setColumn('tname');
636 $grid->getColumn('tname')->headerPrototype->style['width'] = '5%';
637 $grid->addFilterSelect('tname', 'Typ', array('' => '') + $this->ordertypeRepository->getFilterData())
638 ->setWhere(function ($value, $connection){ $connection->where("ordertype.name LIKE ?", "%$value%");});
639
640 $grid->addColumnText('rname', 'Realizace')
641 ->setSortable()
642 ->setColumn('rname');
643 $grid->getColumn('rname')->headerPrototype->style['width'] = '15%';
644 $grid->addFilterSelect('rname', 'Realizace', array('' => '') + $this->realizationRepository->getFilterData())
645 ->setWhere(function ($value, $connection){ $connection->where("realization.name LIKE ?", "%$value%");});
646
647 $grid->addActionHref('view', 'Zobrazit')
648 ->setIcon('fa fa-eye fa-fw')
649 ->setCustomRender($this->gridBtnSuccess);
650
651
652 $grid->setExport();
653 }
654
655
656 public function createComponentTraderClosedGrid($name) {
657
658 $user = $this->getUser();
659
660 $grid = new \Grido\Grid($this, $name);
661 $grid->setmodel($this->orderRepository->getGridSelectionTraderClosed());
662
663 $grid->translator->lang = 'cs';
664 $grid->setDefaultSort(array('id' => 'DESC'));
665 $grid->defaultPerPage = 15;
666 $grid->filterRenderType = \Grido\Components\Filters\Filter::RENDER_OUTER;
667 $grid->setRememberState(FALSE);
668
669 $grid->setRowCallback(function($row, \Nette\Utils\Html $tr) {
670 if($row->isinvestment == 1) {
671 $tr->class[] = 'investment';
672 }
673 return $tr;
674 });
675
676 $grid->addColumnText('id', 'ID')
677 ->setSortable()
678 ->setFilterText()
679 ->setWhere(function ($value, $connection) { $connection->where("order.id ?", $value);});
680 $grid->getColumn('id')->cellPrototype->class[] = 'center';
681 $grid->getColumn('id')->headerPrototype->style['width'] = '3%';
682
683 $grid->addColumnText('name', 'Předmět')
684 ->setSortable()
685 ->setColumn('name')
686 ->setFilterText()
687 ->setSuggestion(function ($item){ return $item->name; })
688 ->setColumn('name')
689 ->setWhere(function ($value, $connection){ $connection->where("order.name LIKE ?", "%$value%");});
690 $grid->getColumn('name')->headerPrototype->style['width'] = '15%';
691
692 $grid->addColumnDate('created', 'Vytvořeno')
693 ->setSortable()
694 ->setDateFormat(\Grido\Components\Columns\Date::FORMAT_DATE)
695 ->setFilterDate();
696 $grid->getColumn('created')->cellPrototype->class[] = 'center';
697
698 $grid->addColumnText('ns', 'NS')
699 ->setSortable()
700 ->setColumn('ns')
701 ->setFilterText()
702 ->setSuggestion(function ($item){ return $item->ns; })
703 ->setColumn('ns')
704 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.ns LIKE ?", "%$value%");});
705 $grid->getColumn('ns')->headerPrototype->style['width'] = '4%';
706
707 $grid->addColumnText('uname', 'Název')
708 ->setSortable()
709 ->setColumn('uname')
710 ->setFilterText()
711 ->setSuggestion(function ($item){ return $item->uname; })
712 ->setColumn('uname')
713 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.name LIKE ?", "%$value%");});
714 $grid->getColumn('uname')->headerPrototype->style['width'] = '13%';
715
716
717
718
719
720 $grid->addFilterSelect('tname', 'Typ', array('' => '') + $this->ordertypeRepository->getFilterData())
721 ->setWhere(function ($value, $connection){ $connection->where("ordertype.name LIKE ?", "%$value%");});
722
723
724
725
726
727
728 $grid->addFilterSelect('rname', 'Realizace', array('' => '') + $this->realizationRepository->getFilterData())
729 ->setWhere(function ($value, $connection){ $connection->where("realization.name LIKE ?", "%$value%");});
730
731
732
733
734 $grid->addFilterText('myear', 'Ukončeno (Rok)')
735 ->setWhere(function ($value, $connection){ $connection->where("(CASE WHEN order.managerflag IS NULL THEN YEAR(order.created) ELSE YEAR(:managerresult.lastmod) END) = ?", "$value");});
736
737 $column = new \Grido\Components\Columns\Boolean($grid, 'mapproved', 'Schváleno');
738 $column->setSortable()->headerPrototype->style['width'] ='4%';
739 $grid->getColumn('mapproved')->headerPrototype->class[] = 'center';
740 $grid->addFilterCheck('approved', 'Jen schválené objednávky')
741 ->setWhere(function($value, $connection) {$value ? $connection->where(':managerresult.approved ?' , '1'): NULL;});
742
743 $columna = new \Grido\Components\Columns\BooleanExtension($grid, 'impacceptflag', 'Přijato');
744 $columna->setSortable()->headerPrototype->style['width'] ='4%';
745 $grid->getColumn('impacceptflag')->headerPrototype->class[] = 'center';
746 $grid->addFilterCheck('impacceptflag', 'Jen objednávky přijaté řešiteli k realizaci')
747 ->setWhere(function($value, $connection) {$value ? $connection->where('order.impacceptflag ?' , '2'): NULL;});
748
749 $columnr = new \Grido\Components\Columns\BooleanExtension($grid, 'realizedflag', 'Realizováno');
750 $columnr->setSortable()->headerPrototype->style['width'] ='4%';
751 $grid->getColumn('realizedflag')->headerPrototype->class[] = 'center';
752 $grid->addFilterCheck('norealized', 'Jen nerealizované objednávky')
753 ->setWhere(function($value, $connection) {$value ? $connection->where('order.realizedflag' , NULL): NULL;});
754
755
756 $grid->addActionHref('view', 'Zobrazit')
757 ->setIcon('fa fa-eye fa-fw')
758 ->setCustomRender($this->gridBtnSuccess);
759
760
761 $grid->setExport();
762 }
763
764
765
766 public function renderView($id){
767
768 $item = $this->orderRepository->findById($id);
769 $user = $this->getUser();
770
771 if ($item === false) {
772 $this->flashMessage('Objednávka č. '. $id .' nebyla dohledána.', 'error');
773 $this->redirect('Homepage:default');
774 }
775
776 $this->template->orderdetail = $this->orderRepository->findOrderForTrader($id);
777 $this->template->timelineevents = $this->timelineRepository->getTimelineRecords($id);
778
779 $this->template->documentRepository = $this->documentRepository;
780 $this->template->documents = $this->orderRepository->getAssignedDocuments($item->id);
781
782 $this->template->itemsorder = $this->itemorderRepository->getItemsOrder($id);
783
784
785 $this->template->chiefresults = $this->chiefRepository->getChiefResults($item->id);
786 $this->template->traderresults = $this->traderRepository->getTraderResults($item->id);
787 $this->template->managerresults = $this->managerRepository->getManagerResults($item->id);
788
789 $iditems = $this->itemorderRepository->getIdItemsOrder($item->id);
790 $this->template->expertresults = $this->expertRepository->getExpertResults($iditems);
791
792 $this->template->maxsizedoc = $this->parameters->formatBytes($this->parameters->getMaxSizeUpload());
793
794
795 $consultations = $this->consultationRepository->getConsultationHeader($user->getId(), $item->id);
796 if ($consultations->fetch() != NULL) {
797 $this->template->consultations = $consultations;
798 }
799 else {
800 $this->template->consultations = NULL;
801 }
802
803
804 $this->template->icons = $this->cfgRepository->getTimelineIcons();
805 $this->template->colors = $this->cfgRepository->getTimelineColors();
806 $this->template->inverted = $this->cfgRepository->getTimelineInverted();
807
808
809
810 $mySection = $this->getSession()->getSection('history');
811 $mySection->beforePresenter = 'Trader';
812 $mySection->setExpiration(0);
813
814
815 }
816
817 818 819 820 821
822 public function createComponentAddDocument() {
823
824 try {
825 $iduser = $this->getUser()->getId();
826 $idorder = $this->getParameter('id');
827
828 $form = $this->documentFactory->createAddDocument($idorder,$iduser);
829 $this->flashMessage('Soubor byl uložen.', 'success');
830
831 return $form;
832
833 } catch (\PDOException $e) {
834 $this->flashMessage("Soubor se nepodařilo uložit!", "error");
835 }
836
837 }
838
839 840 841 842 843
844 public function createComponentUpdateNameDocument(){
845
846 try {
847 $form = $this->documentFactory->createUpdateNameDocument();
848 $this->flashMessage('Dokument byl úspěšně pojmenován.', 'success');
849
850 return $form;
851
852 } catch (\PDOException $e) {
853 $this->flashMessage('Chyba při uložení do DB.', 'error');
854 }
855 }
856
857 858 859 860
861 public function createComponentDeleteDocument() {
862 try {
863 $form = $this->documentFactory->createDeleteDocument();
864 $this->flashMessage('Dokument byl odstraněn.', 'success');
865
866 return $form;
867
868 } catch (Exception $e) {
869 $this->flashMessage('Chyba. Dokument se nepodařilo odstranit.', 'error');
870 }
871 }
872
873 874 875 876 877
878 public function createComponentTraderResult() {
879 $user = $this->getUser();
880 $form = new UI\Form();
881 $form->setRenderer(new BootstrapRenderer());
882
883 $form->getElementPrototype()->class = 'form-horizontal';
884
885 $form->addTextArea('description', 'Odůvodnění:', NULL, 4)
886 ->setAttribute('placeholder', 'Lze vložit odůvodnění objednávky. Společně se Souhrnem obchodníka k jednotlivým položkám bude tvořit celkový posudek.')
887 ->setAttribute('class', 'form-control')
888 ->setAttribute('type', 'modal')
889 ->setAttribute('id', 'inputDescription');
890
891 $form->addRadioList('result','Objednávku:', array('1'=>'Schvaluji','0'=>'Zamítám'))
892 ->setDefaultValue('1')
893 ->getSeparatorPrototype()->setName(NULL);
894
895
896 $form->addSubmit('saving', 'Uložit a zpět')
897 ->setAttribute('class', 'btn btn-primary');
898
899
900 $form->onSuccess[] = $this->traderResultSubmitted;
901
902 return $form;
903 }
904
905
906 public function traderResultSubmitted($form) {
907
908 try {
909
910 $result = $form->getValues();
911 $idorder = $this->getParameter('id');
912
913
914 $res = new \Nette\Utils\ArrayHash();
915
916 $items = $this->itemorderRepository->getItemsOrderWithDimenzion($idorder);
917 $description= "";
918 foreach ($items as $item) {
919 $description .= "Položka: $item->name <br>";
920 $description .= "Množství k realizaci: $item->sum_number <br>";
921 $description .= "Jednotka množství: $item->dimname <br>";
922 $description .= "Celková cena: " . number_format($item->sum_priceitem, 0, '.', ' ') . " Kč s DPH <br>";
923 $description .= $item->isplan? "Je v OP pro rok $item->yearplan.<br>" : "Není v OP. <br>";
924 $description .= mb_strlen(trim($item->note)) > 0? "$item->note <br><br>" : "<br>";
925 }
926
927
928 if ($result->result == '1') {
929 $res->approved = 1;
930 $res->rejected = NULL;
931 $res->description = $description . $result->description;
932 }
933 else {
934 $res->approved = NULL;
935 $res->rejected = 1;
936 $res->description = $result->description;
937 }
938 $res->lastmod = date('Y-m-d H:i:s');
939 $res->order_id = $idorder;
940 $res->user_id = $this->getUser()->getId();
941
942 $this->traderRepository->insertData($res);
943
944
945
946 $o = new \Nette\Utils\ArrayHash();
947 $o->traderupflag = 1;
948 $o->returnflag = NULL;
949 if ($result->result == '0')
950 $o->completeflag = 1;
951 $this->orderRepository->updateById($idorder, $o);
952
953
954
955 $t = new \Nette\Utils\ArrayHash;
956 $t->order_id = $idorder;
957 $t->user_id = $this->getUser()->getId();
958 $t->event_id = 4;
959 $t->created = date('Y-m-d H:i:s');
960 $this->timelineRepository->insertData($t);
961
962 if ($result->result == '0') {
963 $t2 = new \Nette\Utils\ArrayHash;
964 $t2->order_id = $idorder;
965 $t2->user_id = $this->getUser()->getId();
966 $t2->event_id = 12;
967 $t2->created = date('Y-m-d H:i:s');
968 $this->timelineRepository->insertData($t2);
969
970 }
971 else {
972
973 $t3 = new \Nette\Utils\ArrayHash;
974 $t3->order_id = $idorder;
975 $t3->user_id = $this->getUser()->getId();
976 $t3->event_id = 7;
977 $t3->created = date('Y-m-d H:i:s');
978 $this->timelineRepository->insertData($t3);
979 }
980
981
982 $uri = $this->getHttpRequest()->getUrl();
983 $from = $this->parameters->getFrom();
984 $support = $this->parameters->getSupport();
985 if ($result->result == '1') {
986 $to = $this->userRepository->getManagerEmail();
987 $subject = 'Objednávka k posouzení';
988 $params = array(
989 'order_id' => $idorder,
990 'contact' => $support,
991 'url' => $uri->hostUrl.'/manager&execution=view&id='.$idorder
992 );
993 $template = __DIR__ . '/../templates/Mailer/emailToManager.latte';
994 }
995 else {
996
997 $item = $this->orderRepository->findById($idorder);
998 $to = $this->userRepository->getUnitEmail($item->user_id);
999 $subject = 'Zamítnutá objednávka';
1000 $params = array(
1001 'order_id' => $idorder,
1002 'contact' => $support,
1003 'url' => $uri->hostUrl.'/order&execution=view&id='.$idorder
1004 );
1005 $template = __DIR__ . '/../templates/Mailer/emailToUnitRejected.latte';
1006 }
1007
1008 $image = __DIR__ . '/../../www/img/logo32x32.gif';
1009 $mailer = $this->mailerCfg->getMailConfig();
1010
1011 MailerPresenter::sendMail($from, $to, $subject, $params, $template, $image, $mailer);
1012
1013
1014 $this->flashMessage("Posudek k objednávce č. $idorder byl uložen.", 'success');
1015 $this->redirect('Trader:validate');
1016
1017 } catch (\PDOException $e) {
1018 $this->flashMessage('Chyba při uložení do DB.', 'error');
1019 }
1020
1021 }
1022
1023 1024 1025 1026 1027
1028 public function createComponentTraderBack() {
1029
1030
1031 $form = new UI\Form();
1032 $form->setRenderer(new BootstrapRenderer());
1033
1034 $form->getElementPrototype()->class = 'form-horizontal';
1035 $form->addSelect('back_id', 'Vrátit komu:', array(0 => 'Požadující oddělení', 1 => 'Odborné pracoviště') )
1036 ->setPrompt('Vyberte adresáta ...')
1037 ->setAttribute('class', 'form-control2');
1038
1039 $form->addTextArea('message', 'Komentář:', NULL, 4)
1040 ->setRequired('Upřesněte požadavek na doplnění.')
1041 ->setAttribute('class', 'form-control');
1042
1043 $form->addSubmit('back', 'Odeslat')
1044 ->setAttribute('class', 'btn btn-primary');
1045
1046 $form->onSuccess[] = $this->traderBackSubmitted;
1047 return $form;
1048 }
1049
1050 public function traderBackSubmitted($form) {
1051 try {
1052 $result = $form->getValues();
1053 $idorder = $this->getParameter('id');
1054
1055
1056
1057 if ($result->back_id == '0') {
1058
1059 $this->orderRepository->updateById($idorder, array(
1060 'returnflag' => 1,
1061 'completeflag' => NULL,
1062 'managerflag' => NULL,
1063 'traderupflag' => NULL,
1064 'traderdownflag' => NULL,
1065 'itemflag' => NULL,
1066 'chiefflag' => NULL,
1067 'departmentflag' => NULL
1068 ));
1069 }
1070 elseif ($result->back_id == '1') {
1071
1072
1073 $this->orderRepository->updateById($idorder, array(
1074 'returnflag' => 1,
1075 'completeflag' => NULL,
1076 'managerflag' => NULL,
1077 'traderupflag' => NULL,
1078 'itemflag' => NULL
1079 ));
1080
1081 $this->writeBackMove($idorder);
1082 }
1083
1084 $this->timelineRepository->insertData(array(
1085 'order_id' => $idorder,
1086 'user_id' => $this->getUser()->getId(),
1087 'event_id' => 9,
1088 'created' => date('Y-m-d H:i:s')
1089 ));
1090
1091
1092 if (mb_strlen(trim($result->message)) > 0) {
1093 $iditemorder = $this->itemorderRepository->getIdItemsOrder($idorder)->fetch();
1094 $this->commentRepository->insertData(array(
1095 'itemorder_id' => $iditemorder,
1096 'user_id' => $this->getUser()->getId(),
1097 'description' => $result->message,
1098 'created' => date('Y-m-d H:i:s')
1099 ));
1100 }
1101
1102
1103 $item = $this->orderRepository->findById($idorder);
1104 $uri = $this->getHttpRequest()->getUrl();
1105 $from = $this->parameters->getFrom();
1106 $support = $this->parameters->getSupport();
1107 $subject = 'Objednávka vrácená k doplnění';
1108 if ($result->back_id == '0') {
1109
1110 if ($item->isinvestment == 1) {
1111 $investment = $this->investmentRepository->findByOrderId($idorder);
1112 $to = $this->userRepository->getUserEmail($investment->user_id);
1113 }
1114 else {
1115 $to = $this->userRepository->getUnitEmail($item->user_id);
1116 }
1117 $params = array(
1118 'order_id' => $idorder,
1119 'contact' => $support,
1120 'url' => $uri->hostUrl.'/order&execution=view&id='.$idorder
1121 );
1122 $template = __DIR__ . '/../templates/Mailer/emailToUnitBack.latte';
1123 }
1124 else {
1125
1126 $iditems = $this->itemorderRepository->getIdItemsOrder($item->id);
1127 $idarea = $this->itemorderRepository->getItemOrderAreaIdByItemId($iditems);
1128 $to = $this->userRepository->getExpertEmail($idarea);
1129 $params = array(
1130 'order_id' => $idorder,
1131 'contact' => $support,
1132 'url' => $uri->hostUrl.'/expert&execution=view&id='.$idorder
1133 );
1134 $template = __DIR__ . '/../templates/Mailer/emailToExpertBack.latte';
1135 }
1136
1137 $image = __DIR__ . '/../../www/img/logo32x32.gif';
1138 $mailer = $this->mailerCfg->getMailConfig();
1139
1140 MailerPresenter::sendMail($from, $to, $subject, $params, $template, $image, $mailer);
1141
1142
1143 $text = ($result->back_id == 0)? 'požadujícímu oddělení' : 'k odbornémmu posouzení';
1144 $this->flashMessage('Objednávka č. '.$idorder.' byla vrácena '.$text.'.', 'success');
1145 $this->redirect('Trader:validate');
1146
1147 } catch (\PDOException $ex) {
1148 $this->flashMessage("Chyba při uložení do DB. ".$ex->getMessage(), 'error');
1149 }
1150 }
1151
1152
1153 1154 1155 1156 1157
1158 public function writeBackMove($order_id) {
1159
1160 $iditems = $this->itemorderRepository->getIdItemsOrder($order_id);
1161 foreach ($iditems as $iditem) {
1162 $this->itemorderRepository->updateById($iditem->id, array('resultflag' => NULL));
1163
1164 $areas = $this->itemorderRepository->getItemOrderAreaIdByItemId($iditem->id);
1165 foreach ($areas as $key => $value) {
1166 $countAreaState = $this->itemareastateRepository->countAreaState($iditem->id, $value);
1167 if($countAreaState->cnt == 0) {
1168 $this->itemareastateRepository->addAreaState($iditem->id, $value, $this->getUser()->getId());
1169 }
1170 }
1171 }
1172 }
1173
1174
1175
1176 1177 1178 1179 1180
1181 public function createComponentAddConsultation() {
1182
1183 try{
1184 $form = $this->consultationFactory->createAddConsultation($this->getParameter('id'),$this->getUser()->id, $this->getHttpRequest()->getUrl()->hostUrl);
1185 $this->flashMessage('Požadavek na konzultaci byl uložen.', 'success');
1186
1187 return $form;
1188
1189 } catch (\PDOException $ex) {
1190 $this->flashMessage("Chyba při uložení konzultace. ".$ex->getMessage(), 'error');
1191 }
1192 }
1193
1194 }
1195