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