1 <?php
2
3 namespace PLus\Orders\Factory;
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 Nette\Application\UI\Presenter;
11
12 13 14 15 16
17 class ConsultationFactory extends \Nette\Object {
18
19
20 public $areaRepository;
21
22
23 public $userRepository;
24
25
26 public $consultationRepository;
27
28
29 public $postRepository;
30
31
32 public $roleRepository;
33
34
35 public $parameters;
36
37
38 public $mailerCfg;
39
40
41 function __construct(Repositories\Lists\AreaRepository $areaRepository, Repositories\Entities\UserRepository $userRepository,
42 Repositories\Messages\ConsultationRepository $consultationRepository, Repositories\Messages\PostRepository $postRepository,
43 Repositories\Security\RoleRepository $roleRepository, Repositories\Config\Parameters $parameters, Repositories\Config\Mailer $mailerCfg) {
44 $this->areaRepository = $areaRepository;
45 $this->userRepository = $userRepository;
46 $this->consultationRepository = $consultationRepository;
47 $this->postRepository = $postRepository;
48 $this->roleRepository = $roleRepository;
49 $this->parameters = $parameters;
50 $this->mailerCfg = $mailerCfg;
51 }
52
53
54
55
56
57
58 59 60 61 62
63 public function createAddConsultation($idorder, $iduser, $hostUrl) {
64
65 $form = new UI\Form();
66 $form->setRenderer(new BootstrapRenderer());
67
68 $roles = array('director','manager','trader');
69
70 $form->getElementPrototype()->class = 'form-horizontal';
71
72
73 $area_ids = $this->areaRepository->getAreasFromOrder($idorder);
74 $form->addSelect('to_id', 'Komu:', $this->userRepository->findUserByRole($roles, $iduser) + $this->userRepository->getUserByAreaOrderLastname($area_ids, $iduser))
75 ->setPrompt('Vyberte adresáta ...')
76 ->setRequired()
77 ->setAttribute('class', 'form-control');
78
79 $form->addTextArea('post', 'Zpráva:', NULL, 10)
80 ->setAttribute('class', 'form-control')
81 ->setAttribute('type', 'modal')
82 ->setRequired('Vložte odpověď')
83
84 ->addRule(callback($this,'lengthPostValidator'), 'Nelze ukládat prázdnou zprávu.');
85
86 $form->addSubmit('send', 'Odeslat')
87 ->setAttribute('class', 'btn btn-primary');
88
89
90 $form->addHidden('idorder', $idorder);
91 $form->addHidden('iduser', $iduser);
92 $form->addHidden('hosturl', $hostUrl);
93
94 $form->onSuccess[] = function (UI\Form $form, $values) {
95
96 if(mb_strlen(trim($values->post)) > 0) {
97
98
99 $newconsultation = $this->consultationRepository->insertData(array(
100 'created' => date('Y-m-d H:i:s'),
101 'order_id' => $values->idorder,
102 'from' => $values->iduser,
103 'to' => $values->to_id,
104 'lastmod' => NULL,
105 'lastpostman' => $values->iduser,
106 'visit' => 1
107 ));
108
109
110 $this->postRepository->insertData(array(
111 'consultation_id' => $newconsultation->id,
112 'user_id' => $values->iduser,
113 'created' => date('Y-m-d H:i:s'),
114 'message' => $values->post
115 ));
116
117
118
119 $from = $this->parameters->getFrom();
120 $support = $this->parameters->getSupport();
121
122 $to = $this->userRepository->getUserEmail($values->to_id);
123 $roles = $this->roleRepository->findRoleById($values->to_id);
124
125 $is_consultant = FALSE;
126 foreach ($roles as $role) {
127 if($role == 'consultant') {
128 $is_consultant = TRUE;
129 }
130 }
131 $subject = 'Konzultace k objednávce';
132 $params = array(
133 'order_id' => $values->idorder,
134 'contact' => $support,
135 'url' => $values->hosturl.'/consultant&execution=view&id='.$values->idorder,
136 'consultation_id' => $newconsultation->id,
137 'path' => ($is_consultant)? 'Konzultant' : 'Konzultace'
138 );
139 $template = __DIR__ . '/../templates/Mailer/emailToConsultantFirst.latte';
140 $image = __DIR__ . '/../../www/img/logo32x32.gif';
141 $mailer = $this->mailerCfg->getMailConfig();
142
143 \Objednavky\MailerPresenter::sendMail($from, $to, $subject, $params, $template, $image, $mailer);
144
145 }
146 };
147
148 return $form;
149 }
150
151
152 153 154 155 156 157
158 function lengthPostValidator($item) {
159 return mb_strlen(trim($item->value)) > 0;
160 }
161
162 }