Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16766 | Rev 16769 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Authentication\AuthenticationService;
7
use Laminas\Authentication\Result as AuthResult;
8
use Laminas\Db\Adapter\AdapterInterface;
9
 
10
 
16768 efrain 11
 
1 www 12
use Laminas\Mvc\Controller\AbstractActionController;
13
use Laminas\Mvc\I18n\Translator;
14
use Laminas\Log\LoggerInterface;
15
 
16
use Laminas\View\Model\ViewModel;
17
use Laminas\View\Model\JsonModel;
18
use LeadersLinked\Library\Functions;
19
use LeadersLinked\Mapper\CompanySizeMapper;
20
use LeadersLinked\Form\CompanySizeForm;
21
use LeadersLinked\Model\CompanySize;
22
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
23
 
24
class CompanySizeController extends AbstractActionController
25
{
26
    /**
27
     *
28
     * @var AdapterInterface
29
     */
30
    private $adapter;
31
 
32
    /**
33
     *
34
     * @var  LoggerInterface
35
     */
36
    private $logger;
37
 
38
    /**
39
     *
40
     * @var array
41
     */
42
    private $config;
16768 efrain 43
 
1 www 44
    /**
45
     *
46
     * @param AdapterInterface $adapter
47
     * @param LoggerInterface $logger
48
     * @param array $config
49
     */
16768 efrain 50
    public function __construct($adapter, $logger, $config)
1 www 51
    {
16768 efrain 52
        $this->adapter = $adapter;
53
        $this->logger = $logger;
54
        $this->config = $config;
1 www 55
    }
56
 
57
    public function indexAction()
58
    {
59
        $request = $this->getRequest();
60
 
61
 
62
        $request = $this->getRequest();
63
        if($request->isGet()) {
64
 
65
 
66
            $headers  = $request->getHeaders();
67
 
68
            $isJson = false;
69
            if($headers->has('Accept')) {
70
                $accept = $headers->get('Accept');
71
 
72
                $prioritized = $accept->getPrioritized();
73
 
74
                foreach($prioritized as $key => $value) {
75
                    $raw = trim($value->getRaw());
76
 
77
                    if(!$isJson) {
78
                        $isJson = strpos($raw, 'json');
79
                    }
80
 
81
                }
82
            }
83
 
84
            if($isJson) {
5225 stevensc 85
                $search = $this->params()->fromQuery('search');
16766 efrain 86
                /* $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']); */
1 www 87
 
88
                $page               = intval($this->params()->fromQuery('start', 1), 10);
89
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
90
                $order              =  $this->params()->fromQuery('order', []);
91
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
16766 efrain 92
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(Functions::sanitizeFilterString($order[0]['dir']));
1 www 93
 
94
                $fields =  ['name', 'minimum_no_of_employee', 'maximum_no_of_employee'];
95
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
96
 
97
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
98
                    $order_direction = 'ASC';
99
                }
100
 
101
                $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
102
                $paginator = $companySizeMapper->fetchAllDataTable($search, $page, $records_x_page, $order_field, $order_direction);
103
 
104
                $items = [];
105
                $records = $paginator->getCurrentItems();
106
                foreach($records as $record)
107
                {
108
                    $item = [
109
                        'id' => $record->id,
110
                        'name' => $record->name,
111
                        'minimum_no_of_employee' => $record->minimum_no_of_employee,
112
                        'maximum_no_of_employee' => $record->maximum_no_of_employee,
113
                        'status' => $record->status,
114
                        'actions' => [
115
                            'link_edit' => $this->url()->fromRoute('settings/company-sizes/edit', ['id' => $record->uuid ]),
116
                            'link_delete' => $this->url()->fromRoute('settings/company-sizes/delete', ['id' =>$record->uuid ])
117
                        ]
118
                    ];
119
 
120
                    array_push($items, $item);
121
                }
122
 
123
                return new JsonModel([
124
                    'success' => true,
125
                    'data' => [
126
                        'items' => $items,
127
                        'total' => $paginator->getTotalItemCount(),
128
                    ]
129
                ]);
130
            } else {
131
 
132
                $form = new CompanySizeForm();
133
 
134
                $this->layout()->setTemplate('layout/layout-backend');
135
                $viewModel = new ViewModel();
136
                $viewModel->setTemplate('leaders-linked/company-sizes/index.phtml');
137
                $viewModel->setVariable('form', $form);
138
                return $viewModel ;
139
            }
140
 
141
        } else {
142
            return new JsonModel([
143
                'success' => false,
144
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
145
            ]);;
146
        }
147
    }
148
 
149
    public function addAction()
150
    {
151
 
152
 
153
        $currentUserPlugin = $this->plugin('currentUserPlugin');
154
        $currentUser = $currentUserPlugin->getUser();
155
 
156
        $request = $this->getRequest();
157
 
158
 
159
        if($request->isPost()) {
160
            $form = new  CompanySizeForm();
161
            $dataPost = $request->getPost()->toArray();
162
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : CompanySize::STATUS_INACTIVE;
163
 
164
            $form->setData($dataPost);
165
 
166
            if($form->isValid()) {
167
                $dataPost = (array) $form->getData();
168
 
169
                $hydrator = new ObjectPropertyHydrator();
170
                $companySize = new CompanySize();
171
                $hydrator->hydrate($dataPost, $companySize);
172
 
173
                if(!$companySize->status) {
174
                    $companySize->status = CompanySize::STATUS_INACTIVE;
175
                }
176
 
177
 
178
                $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
179
                $result = $companySizeMapper->insert($companySize);
180
 
181
                if($result) {
182
                    $this->logger->info('Se agrego el tamaño de empresa ' . $companySize->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
183
 
184
                    $data = [
185
                        'success'   => true,
186
                        'data'   => 'LABEL_RECORD_ADDED'
187
                    ];
188
                } else {
189
                    $data = [
190
                        'success'   => false,
191
                        'data'      => $companySizeMapper->getError()
192
                    ];
193
 
194
                }
195
 
196
                return new JsonModel($data);
197
 
198
            } else {
199
                $messages = [];
200
                $form_messages = (array) $form->getMessages();
201
                foreach($form_messages  as $fieldname => $field_messages)
202
                {
203
 
204
                    $messages[$fieldname] = array_values($field_messages);
205
                }
206
 
207
                return new JsonModel([
208
                    'success'   => false,
209
                    'data'   => $messages
210
                ]);
211
            }
212
 
213
        } else {
214
            $data = [
215
                'success' => false,
216
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
217
            ];
218
 
219
            return new JsonModel($data);
220
        }
221
 
222
        return new JsonModel($data);
223
    }
224
 
225
    public function editAction()
226
    {
227
 
228
        $currentUserPlugin = $this->plugin('currentUserPlugin');
229
        $currentUser = $currentUserPlugin->getUser();
230
 
231
        $request = $this->getRequest();
232
        $uuid = $this->params()->fromRoute('id');
233
 
234
 
235
        if(!$uuid) {
236
            $data = [
237
                'success'   => false,
238
                'data'   => 'ERROR_INVALID_PARAMETER'
239
            ];
240
 
241
            return new JsonModel($data);
242
        }
243
 
244
        $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
245
        $companySize = $companySizeMapper->fetchOneByUuid($uuid);
246
        if(!$companySize) {
247
            $data = [
248
                'success'   => false,
249
                'data'   => 'ERROR_RECORD_NOT_FOUND'
250
            ];
251
 
252
            return new JsonModel($data);
253
        }
254
 
255
        if($request->isPost()) {
256
            $form = new  CompanySizeForm();
257
            $dataPost = $request->getPost()->toArray();
258
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : CompanySize::STATUS_INACTIVE;
259
 
260
            $form->setData($dataPost);
261
 
262
            if($form->isValid()) {
263
                $dataPost = (array) $form->getData();
264
 
265
                $hydrator = new ObjectPropertyHydrator();
266
                $hydrator->hydrate($dataPost, $companySize);
267
 
268
                if(!$companySize->status) {
269
                    $companySize->status = CompanySize::STATUS_INACTIVE;
270
                }
271
 
272
                $result = $companySizeMapper->update($companySize);
273
 
274
                if($result) {
275
                    $this->logger->info('Se actualizo el tamaño de empresa ' . $companySize->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
276
 
277
 
278
                    $data = [
279
                        'success' => true,
280
                        'data' => 'LABEL_RECORD_UPDATED'
281
                    ];
282
                } else {
283
                    $data = [
284
                        'success'   => false,
285
                        'data'      => $companySizeMapper->getErrno()
286
                    ];
287
                }
288
 
289
                return new JsonModel($data);
290
 
291
            } else {
292
                $messages = [];
293
                $form_messages = (array) $form->getMessages();
294
                foreach($form_messages  as $fieldname => $field_messages)
295
                {
296
                    $messages[$fieldname] = array_values($field_messages);
297
                }
298
 
299
                return new JsonModel([
300
                    'success'   => false,
301
                    'data'   => $messages
302
                ]);
303
            }
304
        } else if ($request->isGet()) {
305
            $hydrator = new ObjectPropertyHydrator();
306
 
307
            $data = [
308
                'success' => true,
309
                'data' => $hydrator->extract($companySize)
310
            ];
311
 
312
            return new JsonModel($data);
313
        } else {
314
            $data = [
315
                'success' => false,
316
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
317
            ];
318
 
319
            return new JsonModel($data);
320
        }
321
 
322
        return new JsonModel($data);
323
    }
324
 
325
    public function deleteAction()
326
    {
327
        $currentUserPlugin = $this->plugin('currentUserPlugin');
328
        $currentUser = $currentUserPlugin->getUser();
329
 
330
        $request = $this->getRequest();
331
        $uuid = $this->params()->fromRoute('id');
332
 
333
        if(!$uuid) {
334
            $data = [
335
                'success'   => false,
336
                'data'   => 'ERROR_INVALID_PARAMETER'
337
            ];
338
 
339
            return new JsonModel($data);
340
        }
341
 
342
        $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
343
        $companySize = $companySizeMapper->fetchOneByUuid($uuid);
344
        if(!$companySize) {
345
            $data = [
346
                'success'   => false,
347
                'data'   => 'ERROR_RECORD_NOT_FOUND'
348
            ];
349
 
350
            return new JsonModel($data);
351
        }
352
 
353
        if($request->isPost()) {
354
            $result = $companySizeMapper->delete($companySize);
355
            if($result) {
356
                $this->logger->info('Se borro el tamaño de empresa ' . $companySize->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
357
 
358
                $data = [
359
                    'success' => true,
360
                    'data' => 'LABEL_RECORD_DELETED'
361
                ];
362
            } else {
363
 
364
                $data = [
365
                    'success'   => false,
366
                    'data'      => $companySizeMapper->getError()
367
                ];
368
 
369
                return new JsonModel($data);
370
            }
371
 
372
        } else {
373
            $data = [
374
                'success' => false,
375
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
376
            ];
377
 
378
            return new JsonModel($data);
379
        }
380
 
381
        return new JsonModel($data);
382
    }
383
}