Proyectos de Subversion LeadersLinked - Backend

Rev

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