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 ManagerPresenter extends BasePresenter {
19
20
21 public $areaRepository;
22
23
24 public $consultationRepository;
25
26
27 public $postRepository;
28
29
30 public $orderRepository;
31
32
33 public $ordertypeRepository;
34
35
36 public $realizationRepository;
37
38
39 public $timelineRepository;
40
41
42 public $itemorderRepository;
43
44
45 public $commentRepository;
46
47
48 public $unituserRepository;
49
50
51 public $unitRepository;
52
53
54 public $userRepository;
55
56
57 public $documentFactory;
58
59
60 public $documenttypeRepository;
61
62
63 public $documentRepository;
64
65
66 public $chiefRepository;
67
68
69 public $traderRepository;
70
71
72 public $managerRepository;
73
74
75 public $expertRepository;
76
77
78 public $cfgRepository;
79
80
81 public $parameters;
82
83
84 public $mailerCfg;
85
86
87
88 89 90 91
92 public function createComponentManagerValidateGrid($name) {
93
94 $user = $this->getUser();
95
96 $grid = new \Grido\Grid($this, $name);
97 $grid->setmodel($this->orderRepository->getGridSelectionManagerValidate());
98
99 $grid->translator->lang = 'cs';
100 $grid->setDefaultSort(array('id' => 'ASC'));
101 $grid->defaultPerPage = 15;
102 $grid->filterRenderType = \Grido\Components\Filters\Filter::RENDER_OUTER;
103 $grid->setRememberState(FALSE);
104
105 $grid->setRowCallback(function($row, \Nette\Utils\Html $tr) {
106 if($row->isinvestment == 1) {
107 $tr->class[] = 'investment';
108 }
109 return $tr;
110 });
111
112 $grid->addColumnText('id', 'ID')
113 ->setSortable()
114 ->setFilterText()
115 ->setWhere(function ($value, $connection) { $connection->where("order.id ?", $value);});
116 $grid->getColumn('id')->cellPrototype->class[] = 'center';
117 $grid->getColumn('id')->headerPrototype->style['width'] = '3%';
118
119 $grid->addColumnText('name', 'Předmět')
120 ->setSortable()
121 ->setColumn('name')
122 ->setFilterText()
123 ->setSuggestion(function ($item){ return $item->name; })
124 ->setColumn('name')
125 ->setWhere(function ($value, $connection){ $connection->where("order.name LIKE ?", "%$value%");});
126 $grid->getColumn('name')->headerPrototype->style['width'] = '15%';
127
128 $grid->addColumnDate('created', 'Vytvořeno')
129 ->setSortable()
130 ->setDateFormat(\Grido\Components\Columns\Date::FORMAT_DATE)
131 ->setFilterDate();
132 $grid->getColumn('created')->cellPrototype->class[] = 'center';
133
134 $grid->addColumnText('ns', 'NS')
135 ->setSortable()
136 ->setColumn('ns')
137 ->setFilterText()
138 ->setSuggestion(function ($item){ return $item->ns; })
139 ->setColumn('ns')
140 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.ns LIKE ?", "%$value%");});
141 $grid->getColumn('ns')->headerPrototype->style['width'] = '5%';
142
143 $grid->addColumnText('uname', 'Název')
144 ->setSortable()
145 ->setColumn('uname')
146 ->setFilterText()
147 ->setSuggestion(function ($item){ return $item->uname; })
148 ->setColumn('uname')
149 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.name LIKE ?", "%$value%");});
150 $grid->getColumn('uname')->headerPrototype->style['width'] = '13%';
151
152 $grid->addColumnText('tname', 'Typ')
153 ->setSortable()
154 ->setColumn('tname');
155 $grid->getColumn('tname')->headerPrototype->style['width'] = '5%';
156 $grid->addFilterSelect('tname', 'Typ', array('' => '') + $this->ordertypeRepository->getFilterData())
157 ->setWhere(function ($value, $connection){ $connection->where("ordertype.name LIKE ?", "%$value%");});
158
159 $grid->addColumnText('rname', 'Realizace')
160 ->setSortable()
161 ->setColumn('rname');
162 $grid->getColumn('rname')->headerPrototype->style['width'] = '15%';
163 $grid->addFilterSelect('rname', 'Realizace', array('' => '') + $this->realizationRepository->getFilterData())
164 ->setWhere(function ($value, $connection){ $connection->where("realization.name LIKE ?", "%$value%");});
165
166 $grid->addActionHref('view', 'Zobrazit')
167 ->setIcon('fa fa-eye fa-fw')
168 ->setCustomRender($this->gridBtnSuccess);
169
170
171 $grid->setExport();
172 }
173
174 175 176 177 178
179 public function createComponentManagerClosedGrid($name) {
180
181 $user = $this->getUser();
182
183 $grid = new \Grido\Grid($this, $name);
184 $grid->setmodel($this->orderRepository->getGridSelectionManagerClosed());
185
186 $grid->translator->lang = 'cs';
187 $grid->setDefaultSort(array('id' => 'DESC'));
188 $grid->defaultPerPage = 15;
189 $grid->filterRenderType = \Grido\Components\Filters\Filter::RENDER_OUTER;
190 $grid->setRememberState(FALSE);
191
192 $grid->setRowCallback(function($row, \Nette\Utils\Html $tr) {
193 if($row->isinvestment == 1) {
194 $tr->class[] = 'investment';
195 }
196 return $tr;
197 });
198
199 $grid->addColumnText('id', 'ID')
200 ->setSortable()
201 ->setFilterText()
202 ->setWhere(function ($value, $connection) { $connection->where("order.id ?", $value);});
203 $grid->getColumn('id')->cellPrototype->class[] = 'center';
204 $grid->getColumn('id')->headerPrototype->style['width'] = '3%';
205
206 $grid->addColumnText('name', 'Předmět')
207 ->setSortable()
208 ->setColumn('name')
209 ->setFilterText()
210 ->setSuggestion(function ($item){ return $item->name; })
211 ->setColumn('name')
212 ->setWhere(function ($value, $connection){ $connection->where("order.name LIKE ?", "%$value%");});
213 $grid->getColumn('name')->headerPrototype->style['width'] = '15%';
214
215 $grid->addColumnDate('created', 'Vytvořeno')
216 ->setSortable()
217 ->setDateFormat(\Grido\Components\Columns\Date::FORMAT_DATE)
218 ->setFilterDate();
219 $grid->getColumn('created')->cellPrototype->class[] = 'center';
220
221 $grid->addColumnText('ns', 'NS')
222 ->setSortable()
223 ->setColumn('ns')
224 ->setFilterText()
225 ->setSuggestion(function ($item){ return $item->ns; })
226 ->setColumn('ns')
227 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.ns LIKE ?", "%$value%");});
228 $grid->getColumn('ns')->headerPrototype->style['width'] = '4%';
229
230 $grid->addColumnText('uname', 'Název')
231 ->setSortable()
232 ->setColumn('uname')
233 ->setFilterText()
234 ->setSuggestion(function ($item){ return $item->uname; })
235 ->setColumn('uname')
236 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.name LIKE ?", "%$value%");});
237 $grid->getColumn('uname')->headerPrototype->style['width'] = '13%';
238
239 $grid->addColumnText('tname', 'Typ')
240 ->setSortable()
241 ->setColumn('tname');
242 $grid->getColumn('tname')->headerPrototype->style['width'] = '5%';
243 $grid->addFilterSelect('tname', 'Typ', array('' => '') + $this->ordertypeRepository->getFilterData())
244 ->setWhere(function ($value, $connection){ $connection->where("ordertype.name LIKE ?", "%$value%");});
245
246
247
248
249
250 $grid->addFilterSelect('rname', 'Realizace', array('' => '') + $this->realizationRepository->getFilterData())
251 ->setWhere(function ($value, $connection){ $connection->where("realization.name LIKE ?", "%$value%");});
252
253 $grid->addFilterText('myear', 'Ukončeno (Rok)')
254 ->setWhere(function ($value, $connection){ $connection->where("YEAR(CASE WHEN order.managerflag IS NULL THEN order.created ELSE :managerresult.lastmod END) = ?", "$value");});
255
256 $column = new \Grido\Components\Columns\Boolean($grid, 'mapproved', 'Schváleno');
257 $column->setSortable()->headerPrototype->style['width'] ='4%';
258 $grid->getColumn('mapproved')->headerPrototype->class[] = 'center';
259 $grid->addFilterCheck('approved', 'Jen schválené objednávky')
260 ->setWhere(function($value, $connection) {$value ? $connection->where(':managerresult.approved ?' , '1'): NULL;});
261
262
263 $columnr = new \Grido\Components\Columns\Boolean($grid, 'realizedflag', 'Realizováno');
264 $columnr->setSortable()->headerPrototype->style['width'] ='4%';
265 $grid->getColumn('realizedflag')->headerPrototype->class[] = 'center';
266 $grid->addFilterCheck('norealized', 'Jen nerealizované objednávky')
267 ->setWhere(function($value, $connection) {$value ? $connection->where('order.realizedflag' , NULL): NULL;});
268
269 $grid->addActionHref('view', 'Zobrazit')
270 ->setIcon('fa fa-eye fa-fw')
271 ->setCustomRender($this->gridBtnSuccess);
272
273
274 $grid->setExport();
275 }
276
277 278 279 280 281
282 public function createComponentManagerAllGrid($name) {
283
284 $user = $this->getUser();
285
286 $grid = new \Grido\Grid($this, $name);
287 $grid->setmodel($this->orderRepository->getGridSelectionOrdersAll());
288
289 $grid->translator->lang = 'cs';
290 $grid->setDefaultSort(array('id' => 'DESC'));
291 $grid->defaultPerPage = 15;
292 $grid->filterRenderType = \Grido\Components\Filters\Filter::RENDER_OUTER;
293 $grid->setRememberState(FALSE);
294
295 $grid->setRowCallback(function($row, \Nette\Utils\Html $tr) {
296 if($row->isinvestment == 1) {
297 $tr->class[] = 'investment';
298 }
299 return $tr;
300 });
301
302 $grid->addColumnText('id', 'ID')
303 ->setSortable()
304 ->setFilterText()
305 ->setWhere(function ($value, $connection) { $connection->where("order.id ?", $value);});
306 $grid->getColumn('id')->cellPrototype->class[] = 'center';
307 $grid->getColumn('id')->headerPrototype->style['width'] = '3%';
308
309 $grid->addColumnText('name', 'Předmět')
310 ->setSortable()
311 ->setColumn('name')
312 ->setFilterText()
313 ->setSuggestion(function ($item){ return $item->name; })
314 ->setColumn('name')
315 ->setWhere(function ($value, $connection){ $connection->where("order.name LIKE ?", "%$value%");});
316 $grid->getColumn('name')->headerPrototype->style['width'] = '15%';
317
318 $grid->addColumnDate('created', 'Vytvořeno')
319 ->setSortable()
320 ->setDateFormat(\Grido\Components\Columns\Date::FORMAT_DATE)
321 ->setFilterDate();
322 $grid->getColumn('created')->cellPrototype->class[] = 'center';
323
324 $grid->addColumnText('ns', 'NS')
325 ->setSortable()
326 ->setColumn('ns')
327 ->setFilterText()
328 ->setSuggestion(function ($item){ return $item->ns; })
329 ->setColumn('ns')
330 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.ns LIKE ?", "%$value%");});
331 $grid->getColumn('ns')->headerPrototype->style['width'] = '4%';
332
333 $grid->addColumnText('uname', 'Název')
334 ->setSortable()
335 ->setColumn('uname')
336 ->setFilterText()
337 ->setSuggestion(function ($item){ return $item->uname; })
338 ->setColumn('uname')
339 ->setWhere(function ($value, $connection){ $connection->where("user:unit_user.unit.name LIKE ?", "%$value%");});
340 $grid->getColumn('uname')->headerPrototype->style['width'] = '13%';
341
342 $grid->addColumnText('tname', 'Typ')
343 ->setSortable()
344 ->setColumn('tname');
345 $grid->getColumn('tname')->headerPrototype->style['width'] = '5%';
346 $grid->addFilterSelect('tname', 'Typ', array('' => '') + $this->ordertypeRepository->getFilterData())
347 ->setWhere(function ($value, $connection){ $connection->where("ordertype.name LIKE ?", "%$value%");});
348
349
350
351
352
353 $grid->addFilterSelect('rname', 'Realizace', array('' => '') + $this->realizationRepository->getFilterData())
354 ->setWhere(function ($value, $connection){ $connection->where("realization.name LIKE ?", "%$value%");});
355
356 $column = new \Grido\Components\Columns\Boolean($grid, 'mapproved', 'Schváleno');
357 $column->setSortable()->headerPrototype->style['width'] ='4%';
358 $grid->getColumn('mapproved')->headerPrototype->class[] = 'center';
359 $grid->addFilterCheck('approved', 'Jen schválené objednávky')
360 ->setWhere(function($value, $connection) {$value ? $connection->where(':managerresult.approved ?' , '1'): NULL;});
361
362
363 $columnr = new \Grido\Components\Columns\Boolean($grid, 'realizedflag', 'Realizováno');
364 $columnr->setSortable()->headerPrototype->style['width'] ='4%';
365 $grid->getColumn('realizedflag')->headerPrototype->class[] = 'center';
366 $grid->addFilterCheck('norealized', 'Jen nerealizované objednávky')
367 ->setWhere(function($value, $connection) {$value ? $connection->where('order.realizedflag' , NULL): NULL;});
368
369 $grid->addActionHref('view', 'Zobrazit')
370 ->setIcon('fa fa-eye fa-fw')
371 ->setCustomRender($this->gridBtnSuccess);
372
373
374 $grid->setExport();
375 }
376
377 378 379 380 381 382
383 public function gridBtnSuccess($item, \Nette\Utils\Html $el)
384 {
385 if ($item['isinvestment'] == 1) {
386 $class = str_replace('btn-default ', '', implode(' ', $el->class));
387 $el->class = [$class . ' btn-success'];
388 }
389 return $el;
390 }
391
392 public function renderView($id){
393
394 $item = $this->orderRepository->findById($id);
395 $user = $this->getUser();
396
397 if ($item === false) {
398 $this->flashMessage('Objednávka č. '. $id .' nebyla dohledána.', 'error');
399 $this->redirect('Homepage:default');
400 }
401
402 $this->template->orderdetail = $this->orderRepository->findOrderForTrader($id);
403 $this->template->timelineevents = $this->timelineRepository->getTimelineRecords($id);
404
405 $this->template->documentRepository = $this->documentRepository;
406 $this->template->documents = $this->orderRepository->getAssignedDocuments($item->id);
407
408 $this->template->itemsorder = $this->itemorderRepository->getItemsOrder($id);
409
410
411 $this->template->chiefresults = $this->chiefRepository->getChiefResults($item->id);
412 $this->template->traderresults = $this->traderRepository->getTraderResults($item->id);
413 $this->template->managerresults = $this->managerRepository->getManagerResults($item->id);
414
415 $iditems = $this->itemorderRepository->getIdItemsOrder($item->id);
416 $this->template->expertresults = $this->expertRepository->getExpertResults($iditems);
417
418 $this->template->maxsizedoc = $this->parameters->formatBytes($this->parameters->getMaxSizeUpload());
419
420
421 $consultations = $this->consultationRepository->getConsultationHeader($user->getId(), $item->id);
422 if ($consultations->fetch() != NULL) {
423 $this->template->consultations = $consultations;
424 }
425 else {
426 $this->template->consultations = NULL;
427 }
428
429
430 $this->template->icons = $this->cfgRepository->getTimelineIcons();
431 $this->template->colors = $this->cfgRepository->getTimelineColors();
432 $this->template->inverted = $this->cfgRepository->getTimelineInverted();
433
434
435 $mySection = $this->getSession()->getSection('history');
436 $mySection->beforePresenter = 'Manager';
437 $mySection->setExpiration(0);
438
439 }
440
441
442 443 444 445 446
447 public function createComponentAddDocument() {
448
449 try {
450 $iduser = $this->getUser()->getId();
451 $idorder = $this->getParameter('id');
452
453 $form = $this->documentFactory->createAddDocument($idorder,$iduser);
454 $this->flashMessage('Soubor byl uložen.', 'success');
455
456 return $form;
457
458 } catch (\PDOException $e) {
459 $this->flashMessage("Soubor se nepodařilo uložit!", "error");
460 }
461
462 }
463
464 465 466 467 468
469 public function createComponentUpdateNameDocument(){
470
471 try {
472 $form = $this->documentFactory->createUpdateNameDocument();
473 $this->flashMessage('Dokument byl úspěšně pojmenován.', 'success');
474
475 return $form;
476
477 } catch (\PDOException $e) {
478 $this->flashMessage('Chyba při uložení do DB.', 'error');
479 }
480 }
481
482 483 484 485
486 public function createComponentDeleteDocument() {
487 try {
488 $form = $this->documentFactory->createDeleteDocument();
489 $this->flashMessage('Dokument byl odstraněn.', 'success');
490
491 return $form;
492
493 } catch (Exception $e) {
494 $this->flashMessage('Chyba. Dokument se nepodařilo odstranit.', 'error');
495 }
496 }
497
498
499 500 501 502 503
504 public function createComponentManagerResult() {
505 $user = $this->getUser();
506 $form = new UI\Form();
507 $form->setRenderer(new BootstrapRenderer());
508
509 $form->getElementPrototype()->class = 'form-horizontal';
510
511 $form->addTextArea('description', 'Odůvodnění:', NULL, 4)
512
513 ->setAttribute('class', 'form-control')
514 ->setAttribute('type', 'modal')
515 ->setAttribute('id', 'inputDescription');
516
517 $form->addRadioList('result','Objednávku:', array('1'=>'Schvaluji','0'=>'Zamítám'))
518 ->setDefaultValue('1')
519 ->getSeparatorPrototype()->setName(NULL);
520
521
522 $form->addSubmit('saving', 'Uložit a zpět')
523 ->setAttribute('class', 'btn btn-primary');
524
525
526 $form->onSuccess[] = $this->managerResultSubmitted;
527
528 return $form;
529 }
530
531
532 public function managerResultSubmitted($form) {
533
534 try {
535
536 $result = $form->getValues();
537 $idorder = $this->getParameter('id');
538
539 $res = new \Nette\Utils\ArrayHash();
540 $res->description = $result->description;
541 if ($result->result == '1') {
542 $res->approved = 1;
543 $res->rejected = NULL;
544 }
545 else {
546 $res->approved = NULL;
547 $res->rejected = 1;
548 }
549 $res->lastmod = date('Y-m-d H:i:s');
550 $res->order_id = $idorder;
551 $res->user_id = $this->getUser()->getId();
552
553 $this->managerRepository->insertData($res);
554
555
556
557 $o = new \Nette\Utils\ArrayHash();
558 $o->managerflag = 1;
559 $o->completeflag = 1;
560 $this->orderRepository->updateById($idorder, $o);
561
562
563
564 $t = new \Nette\Utils\ArrayHash;
565 $t->order_id = $idorder;
566 $t->user_id = $this->getUser()->getId();
567 $t->event_id = 8;
568 $t->created = date('Y-m-d H:i:s');
569 $this->timelineRepository->insertData($t);
570
571 $t2 = new \Nette\Utils\ArrayHash;
572 $t2->order_id = $idorder;
573 $t2->user_id = $this->getUser()->getId();
574 $t2->event_id = 12;
575 $t2->created = date('Y-m-d H:i:s');
576 $this->timelineRepository->insertData($t2);
577
578
579
580 $uri = $this->getHttpRequest()->getUrl();
581 $from = $this->parameters->getFrom();
582 $to = $this->userRepository->getTraderEmail();
583 $subject = 'Objednávka posouzená náměstkem HTS';
584 $support = $this->parameters->getSupport();
585 $params = array(
586 'order_id' => $idorder,
587 'contact' => $support,
588 'url' => $uri->hostUrl.'/trader&execution=view&id='.$idorder
589 );
590 $template = ($result->result == '1')? __DIR__ . '/../templates/Mailer/emailToTraderApproved.latte' : __DIR__ . '/../templates/Mailer/emailToTraderRejected.latte';
591 $image = __DIR__ . '/../../www/img/logo32x32.gif';
592 $mailer = $this->mailerCfg->getMailConfig();
593
594 MailerPresenter::sendMail($from, $to, $subject, $params, $template, $image, $mailer);
595
596
597
598 if ($result->result == '0') {
599 $item = $this->orderRepository->findById($idorder);
600 $to = $this->userRepository->getUnitEmail($item->user_id);
601 $subject = 'Zamítnutá objednávka';
602 $params = array(
603 'order_id' => $idorder,
604 'contact' => $support,
605 'url' => $uri->hostUrl.'/order&execution=view&id='.$idorder
606 );
607 $template = __DIR__ . '/../templates/Mailer/emailToUnitRejected.latte';
608
609 MailerPresenter::sendMail($from, $to, $subject, $params, $template, $image, $mailer);
610 }
611
612
613 $this->flashMessage("Posudek k objednávce č. $idorder byl uložen.", 'success');
614 $this->redirect('Manager:validate');
615
616 } catch (\PDOException $e) {
617 $this->flashMessage('Chyba při uložení do DB.', 'error');
618 }
619
620 }
621
622
623 624 625 626 627
628 public function createComponentSendToTraderBack() {
629 $form = new UI\Form();
630 $form->setRenderer(new BootstrapRenderer());
631
632 $form->getElementPrototype()->class = 'form-horizontal';
633
634 $form->addTextArea('message', 'Komentář:', NULL, 4)
635 ->setRequired('Upřesněte požadavek na doplnění.')
636 ->setAttribute('class', 'form-control');
637
638 $form->addSubmit('back', 'Odeslat')
639 ->setAttribute('class', 'btn btn-primary');
640
641 $form->onSuccess[] = $this->sendToTraderBackSubmitted;
642
643 return $form;
644 }
645
646 public function sendToTraderBackSubmitted($form) {
647 try {
648 $idorder = $this->getParameter('id');
649 $result = $form->getValues();
650
651 $this->orderRepository->updateById($idorder, array('traderupflag' => NULL,'returnflag' => 1));
652
653
654 if (mb_strlen(trim($result->message)) > 0) {
655 $iditemorder = $this->itemorderRepository->getIdItemsOrder($idorder)->fetch();
656 $c = new \Nette\Utils\ArrayHash;
657 $c->itemorder_id = $iditemorder;
658 $c->user_id = $this->getUser()->getId();
659 $c->description = $result->message;
660 $c->created = date('Y-m-d H:i:s');
661 $this->commentRepository->insertData($c);
662 }
663
664
665 $o = new \Nette\Utils\ArrayHash;
666 $o->order_id = $idorder;
667 $o->user_id = $this->getUser()->getId();
668 $o->event_id = 9;
669 $o->created = date('Y-m-d H:i:s');
670 $this->timelineRepository->insertData($o);
671
672 $o1 = new \Nette\Utils\ArrayHash;
673 $o1->order_id = $idorder;
674 $o1->user_id = $this->getUser()->getId();
675 $o1->event_id = 3;
676 $o1->created = date('Y-m-d H:i:s');
677 $this->timelineRepository->insertData($o1);
678
679
680 $uri = $this->getHttpRequest()->getUrl();
681 $from = $this->parameters->getFrom();
682 $to = $this->userRepository->getTraderEmail();
683 $support = $this->parameters->getSupport();
684 $subject = 'Objednávka vrácená náměstkem HTS';
685 $params = array(
686 'order_id' => $idorder,
687 'contact' => $support,
688 'url' => $uri->hostUrl.'/trader&execution=view&id='.$idorder
689 );
690 $template = __DIR__ . '/../templates/Mailer/emailToTraderBack.latte';
691 $image = __DIR__ . '/../../www/img/logo32x32.gif';
692 $mailer = $this->mailerCfg->getMailConfig();
693
694 MailerPresenter::sendMail($from, $to, $subject, $params, $template, $image, $mailer);
695
696
697 $this->flashMessage("Objednávka č. $idorder byla zaslána zpět obchodníkovi k doplnění.", 'success');
698 $this->redirect('Manager:validate');
699
700 } catch (\PDOException $e) {
701 $this->flashMessage('Chyba při uložení do DB.', 'error');
702 }
703 }
704
705
706 707 708 709 710
711 public function createComponentAddConsultation() {
712
713 $form = new UI\Form();
714 $form->setRenderer(new BootstrapRenderer());
715
716 $user = $this->getUser();
717 $roles = array('director','manager','trader');
718
719 $form->getElementPrototype()->class = 'form-horizontal';
720
721
722 $area_ids = $this->areaRepository->getAreasFromOrder($this->getParameter('id'));
723 $form->addSelect('to_id', 'Komu:', $this->userRepository->findUserByRole($roles, $user->getId()) + $this->userRepository->getUserByAreaOrderLastname($area_ids, $user->getId()))
724 ->setPrompt('Vyberte adresáta ...')
725 ->setRequired()
726 ->setAttribute('class', 'form-control');
727
728 $form->addTextArea('post', 'Zpráva:', NULL, 10)
729 ->setAttribute('class', 'form-control')
730 ->setAttribute('type', 'modal')
731 ->setRequired('Vložte odpověď');
732
733 $form->addSubmit('send', 'Odeslat')
734 ->setAttribute('class', 'btn btn-primary');
735
736 $form->onSuccess[] = array($this, 'addConsultation');
737
738 return $form;
739 }
740
741 public function addConsultation($form, $values) {
742 try {
743 $user = $this->getUser();
744 $order_id = $this->getParameter('id');
745
746 if(mb_strlen(trim($values->post)) > 0) {
747
748
749 $newconsultation = $this->consultationRepository->insertData(array(
750 'created' => date('Y-m-d H:i:s'),
751 'order_id' => $order_id,
752 'from' => $user->getId(),
753 'to' => $values->to_id,
754 'lastmod' => NULL,
755 'lastpostman' => $user->getId(),
756 'visit' => 1
757 ));
758
759
760 $this->postRepository->insertData(array(
761 'consultation_id' => $newconsultation->id,
762 'user_id' => $user->getId(),
763 'created' => date('Y-m-d H:i:s'),
764 'message' => $values->post
765 ));
766
767
768 $uri = $this->getHttpRequest()->getUrl();
769 $from = $this->parameters->getFrom();
770 $support = $this->parameters->getSupport();
771
772 $to = $this->userRepository->getUserEmail($values->to_id);
773 $roles = $this->roleRepository->findRoleById($values->to_id);
774
775 $is_consultant = FALSE;
776 foreach ($roles as $role) {
777 if($role == 'consultant') {
778 $is_consultant = TRUE;
779 }
780 }
781 $subject = 'Konzultace k objednávce';
782 $params = array(
783 'order_id' => $order_id,
784 'contact' => $support,
785 'url' => $uri->hostUrl.'/consultant&execution=view&id='.$order_id,
786 'consultation_id' => $newconsultation->id,
787 'path' => ($is_consultant)? 'Konzultant' : 'Konzultace'
788
789 );
790 $template = __DIR__ . '/../templates/Mailer/emailToConsultantFirst.latte';
791 $image = __DIR__ . '/../../www/img/logo32x32.gif';
792 $mailer = $this->mailerCfg->getMailConfig();
793
794 MailerPresenter::sendMail($from, $to, $subject, $params, $template, $image, $mailer);
795
796
797 $this->flashMessage('Požadavek na konzultaci byl uložen.', 'success');
798 $this->redirect('this');
799
800 }
801 else {
802 $this->flashMessage('Nelze uložit prázdnou konzultaci.', 'error');
803 }
804
805 }
806 catch (\PDOException $ex) {
807 $this->flashMessage('Chyba při uložení konzultace.', 'error');
808 }
809 }
810
811 }
812