Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
80.58% covered (warning)
80.58%
112 / 139
81.25% covered (warning)
81.25%
26 / 32
CRAP
0.00% covered (danger)
0.00%
0 / 1
ApiController
80.58% covered (warning)
80.58%
112 / 139
81.25% covered (warning)
81.25%
26 / 32
94.02
0.00% covered (danger)
0.00%
0 / 1
 apiAccountCreate
57.14% covered (warning)
57.14%
4 / 7
0.00% covered (danger)
0.00%
0 / 1
2.31
 validateAccountCreate
80.00% covered (warning)
80.00%
4 / 5
0.00% covered (danger)
0.00%
0 / 1
3.07
 createAccountFromRequest
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 apiAccountL11nCreate
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
6
 createAccountL11nFromRequest
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
 validateAccountL11nCreate
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
12
 apiAccountUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 validateAccountUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 apiCostCenterCreate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 validateCostCenterCreate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 apiCostCenterUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 validateCostCenterUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 apiCostObjectCreate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 validateCostObjectCreate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 apiCostObjectUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 validateCostObjectUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 apiEntryCreate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 validateEntryCreate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 apiEntryUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 validateEntryUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 apiRecurringEntryCreate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 validateRecurringEntryCreate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 apiRecurringEntryUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 validateRecurringEntryUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 apiTaxKeyCreate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 validateTaxKeyCreate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 apiTaxKeyUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 validateTaxKeyUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 apiBatchEntryCreate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 validateBatchEntryCreate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 apiBatchEntryUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 validateBatchEntryUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2/**
3 * Jingga
4 *
5 * PHP Version 8.1
6 *
7 * @package   Modules\Accounting
8 * @copyright Dennis Eichhorn
9 * @license   OMS License 2.0
10 * @version   1.0.0
11 * @link      https://jingga.app
12 */
13declare(strict_types=1);
14
15namespace Modules\Accounting\Controller;
16
17use Modules\Accounting\Models\AccountAbstract;
18use Modules\Accounting\Models\AccountAbstractMapper;
19use Modules\Accounting\Models\AccountL11nMapper;
20use phpOMS\Localization\BaseStringL11n;
21use phpOMS\Localization\ISO639x1Enum;
22use phpOMS\Message\Http\RequestStatusCode;
23use phpOMS\Message\RequestAbstract;
24use phpOMS\Message\ResponseAbstract;
25use phpOMS\Model\Message\FormValidation;
26
27/**
28 * Accounting controller class.
29 *
30 * This class is responsible for the basic accounting activities.
31 *
32 * @package Modules\Accounting
33 * @license OMS License 2.0
34 * @link    https://jingga.app
35 * @since   1.0.0
36 */
37final class ApiController extends Controller
38{
39    /**
40     * Api method to create an account
41     *
42     * @param RequestAbstract  $request  Request
43     * @param ResponseAbstract $response Response
44     * @param array            $data     Generic data
45     *
46     * @return void
47     *
48     * @api
49     *
50     * @since 1.0.0
51     */
52    public function apiAccountCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
53    {
54        if (!empty($val = $this->validateAccountCreate($request))) {
55            $response->header->status = RequestStatusCode::R_400;
56            $this->createInvalidCreateResponse($request, $response, $val);
57
58            return;
59        }
60
61        $account = $this->createAccountFromRequest($request);
62        $this->createModel($request->header->account, $account, AccountAbstractMapper::class, 'account', $request->getOrigin());
63        $this->createStandardCreateResponse($request, $response, $account);
64    }
65
66    /**
67     * Validate account create request
68     *
69     * @param RequestAbstract $request Request
70     *
71     * @return array<string, bool>
72     *
73     * @since 1.0.0
74     */
75    private function validateAccountCreate(RequestAbstract $request) : array
76    {
77        $val = [];
78        if (($val['account'] = !$request->hasData('account'))
79            || ($val['content'] = !$request->hasData('content'))
80        ) {
81            return $val;
82        }
83
84        return [];
85    }
86
87    /**
88     * Method to create account from request.
89     *
90     * @param RequestAbstract $request Request
91     *
92     * @return AccountAbstract
93     *
94     * @since 1.0.0
95     */
96    private function createAccountFromRequest(RequestAbstract $request) : AccountAbstract
97    {
98        $account          = new AccountAbstract();
99        $account->account = $request->getDataString('account') ?? '';
100        $account->setL11n($request->getDataString('content') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN);
101
102        return $account;
103    }
104
105    /**
106     * Api method to create item attribute l11n
107     *
108     * @param RequestAbstract  $request  Request
109     * @param ResponseAbstract $response Response
110     * @param array            $data     Generic data
111     *
112     * @return void
113     *
114     * @api
115     *
116     * @since 1.0.0
117     */
118    public function apiAccountL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
119    {
120        if (!empty($val = $this->validateAccountL11nCreate($request))) {
121            $response->header->status = RequestStatusCode::R_400;
122            $this->createInvalidCreateResponse($request, $response, $val);
123
124            return;
125        }
126
127        $contractTypeL11n = $this->createAccountL11nFromRequest($request);
128        $this->createModel($request->header->account, $contractTypeL11n, AccountL11nMapper::class, 'contract_type_l11n', $request->getOrigin());
129        $this->createStandardCreateResponse($request, $response, $contractTypeL11n);
130    }
131
132    /**
133     * Method to create item attribute l11n from request.
134     *
135     * @param RequestAbstract $request Request
136     *
137     * @return BaseStringL11n
138     *
139     * @since 1.0.0
140     */
141    private function createAccountL11nFromRequest(RequestAbstract $request) : BaseStringL11n
142    {
143        $contractTypeL11n      = new BaseStringL11n();
144        $contractTypeL11n->ref = $request->getDataInt('ref') ?? 0;
145        $contractTypeL11n->setLanguage(
146            $request->getDataString('language') ?? $request->header->l11n->language
147        );
148        $contractTypeL11n->content = $request->getDataString('content') ?? '';
149
150        return $contractTypeL11n;
151    }
152
153    /**
154     * Validate item attribute l11n create request
155     *
156     * @param RequestAbstract $request Request
157     *
158     * @return array<string, bool>
159     *
160     * @since 1.0.0
161     */
162    private function validateAccountL11nCreate(RequestAbstract $request) : array
163    {
164        $val = [];
165        if (($val['content'] = !$request->hasData('content'))
166            || ($val['ref'] = !$request->hasData('ref'))
167        ) {
168            return $val;
169        }
170
171        return [];
172    }
173
174    /**
175     * Api method to update an account
176     *
177     * @param RequestAbstract  $request  Request
178     * @param ResponseAbstract $response Response
179     * @param array            $data     Generic data
180     *
181     * @return void
182     *
183     * @api
184     *
185     * @since 1.0.0
186     */
187    public function apiAccountUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
188    {
189        if (!empty($val = $this->validateAccountUpdate($request))) {
190            $response->data['account_update'] = new FormValidation($val);
191            $response->header->status         = RequestStatusCode::R_400;
192
193            return;
194        }
195    }
196
197    /**
198     * Validate account update request
199     *
200     * @param RequestAbstract $request Request
201     *
202     * @return array<string, bool>
203     *
204     * @since 1.0.0
205     */
206    private function validateAccountUpdate(RequestAbstract $request) : array
207    {
208        $val = [];
209        if (($val['id'] = !$request->hasData('id'))
210        ) {
211            return $val;
212        }
213
214        return [];
215    }
216
217    /**
218     * Api method to create an cost center
219     *
220     * @param RequestAbstract  $request  Request
221     * @param ResponseAbstract $response Response
222     * @param array            $data     Generic data
223     *
224     * @return void
225     *
226     * @api
227     *
228     * @since 1.0.0
229     */
230    public function apiCostCenterCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
231    {
232        if (!empty($val = $this->validateCostCenterCreate($request))) {
233            $response->header->status = RequestStatusCode::R_400;
234            $this->createInvalidCreateResponse($request, $response, $val);
235
236            return;
237        }
238    }
239
240    /**
241     * Validate cost center create request
242     *
243     * @param RequestAbstract $request Request
244     *
245     * @return array<string, bool>
246     *
247     * @since 1.0.0
248     */
249    private function validateCostCenterCreate(RequestAbstract $request) : array
250    {
251        $val = [];
252        if (($val['name'] = !$request->hasData('name'))
253        ) {
254            return $val;
255        }
256
257        return [];
258    }
259
260    /**
261     * Api method to update an cost center
262     *
263     * @param RequestAbstract  $request  Request
264     * @param ResponseAbstract $response Response
265     * @param array            $data     Generic data
266     *
267     * @return void
268     *
269     * @api
270     *
271     * @since 1.0.0
272     */
273    public function apiCostCenterUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
274    {
275        if (!empty($val = $this->validateCostCenterUpdate($request))) {
276            $response->data['account_update'] = new FormValidation($val);
277            $response->header->status         = RequestStatusCode::R_400;
278
279            return;
280        }
281    }
282
283    /**
284     * Validate cost center update request
285     *
286     * @param RequestAbstract $request Request
287     *
288     * @return array<string, bool>
289     *
290     * @since 1.0.0
291     */
292    private function validateCostCenterUpdate(RequestAbstract $request) : array
293    {
294        $val = [];
295        if (($val['id'] = !$request->hasData('id'))
296        ) {
297            return $val;
298        }
299
300        return [];
301    }
302
303    /**
304     * Api method to create an cost object
305     *
306     * @param RequestAbstract  $request  Request
307     * @param ResponseAbstract $response Response
308     * @param array            $data     Generic data
309     *
310     * @return void
311     *
312     * @api
313     *
314     * @since 1.0.0
315     */
316    public function apiCostObjectCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
317    {
318        if (!empty($val = $this->validateCostObjectCreate($request))) {
319            $response->header->status = RequestStatusCode::R_400;
320            $this->createInvalidCreateResponse($request, $response, $val);
321
322            return;
323        }
324    }
325
326    /**
327     * Validate cost object create request
328     *
329     * @param RequestAbstract $request Request
330     *
331     * @return array<string, bool>
332     *
333     * @since 1.0.0
334     */
335    private function validateCostObjectCreate(RequestAbstract $request) : array
336    {
337        $val = [];
338        if (($val['name'] = !$request->hasData('name'))
339        ) {
340            return $val;
341        }
342
343        return [];
344    }
345
346    /**
347     * Api method to update an cost object
348     *
349     * @param RequestAbstract  $request  Request
350     * @param ResponseAbstract $response Response
351     * @param array            $data     Generic data
352     *
353     * @return void
354     *
355     * @api
356     *
357     * @since 1.0.0
358     */
359    public function apiCostObjectUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
360    {
361        if (!empty($val = $this->validateCostObjectUpdate($request))) {
362            $response->data['account_update'] = new FormValidation($val);
363            $response->header->status         = RequestStatusCode::R_400;
364
365            return;
366        }
367    }
368
369    /**
370     * Validate cost object update request
371     *
372     * @param RequestAbstract $request Request
373     *
374     * @return array<string, bool>
375     *
376     * @since 1.0.0
377     */
378    private function validateCostObjectUpdate(RequestAbstract $request) : array
379    {
380        $val = [];
381        if (($val['id'] = !$request->hasData('id'))
382        ) {
383            return $val;
384        }
385
386        return [];
387    }
388
389    /**
390     * Api method to create an entry
391     *
392     * @param RequestAbstract  $request  Request
393     * @param ResponseAbstract $response Response
394     * @param array            $data     Generic data
395     *
396     * @return void
397     *
398     * @api
399     *
400     * @since 1.0.0
401     */
402    public function apiEntryCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
403    {
404        if (!empty($val = $this->validateEntryCreate($request))) {
405            $response->header->status = RequestStatusCode::R_400;
406            $this->createInvalidCreateResponse($request, $response, $val);
407
408            return;
409        }
410    }
411
412    /**
413     * Validate entry create request
414     *
415     * @param RequestAbstract $request Request
416     *
417     * @return array<string, bool>
418     *
419     * @since 1.0.0
420     */
421    private function validateEntryCreate(RequestAbstract $request) : array
422    {
423        $val = [];
424        if (($val['name'] = !$request->hasData('name'))
425        ) {
426            return $val;
427        }
428
429        return [];
430    }
431
432    /**
433     * Api method to update an entry
434     *
435     * @param RequestAbstract  $request  Request
436     * @param ResponseAbstract $response Response
437     * @param array            $data     Generic data
438     *
439     * @return void
440     *
441     * @api
442     *
443     * @since 1.0.0
444     */
445    public function apiEntryUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
446    {
447        if (!empty($val = $this->validateEntryUpdate($request))) {
448            $response->data['account_update'] = new FormValidation($val);
449            $response->header->status         = RequestStatusCode::R_400;
450
451            return;
452        }
453    }
454
455    /**
456     * Validate entry update request
457     *
458     * @param RequestAbstract $request Request
459     *
460     * @return array<string, bool>
461     *
462     * @since 1.0.0
463     */
464    private function validateEntryUpdate(RequestAbstract $request) : array
465    {
466        $val = [];
467        if (($val['id'] = !$request->hasData('id'))
468        ) {
469            return $val;
470        }
471
472        return [];
473    }
474
475    /**
476     * Api method to create an recurring entry
477     *
478     * @param RequestAbstract  $request  Request
479     * @param ResponseAbstract $response Response
480     * @param array            $data     Generic data
481     *
482     * @return void
483     *
484     * @api
485     *
486     * @since 1.0.0
487     */
488    public function apiRecurringEntryCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
489    {
490        if (!empty($val = $this->validateRecurringEntryCreate($request))) {
491            $response->header->status = RequestStatusCode::R_400;
492            $this->createInvalidCreateResponse($request, $response, $val);
493
494            return;
495        }
496    }
497
498    /**
499     * Validate recurring entry create request
500     *
501     * @param RequestAbstract $request Request
502     *
503     * @return array<string, bool>
504     *
505     * @since 1.0.0
506     */
507    private function validateRecurringEntryCreate(RequestAbstract $request) : array
508    {
509        $val = [];
510        if (($val['name'] = !$request->hasData('name'))
511        ) {
512            return $val;
513        }
514
515        return [];
516    }
517
518    /**
519     * Api method to update an recurring entry
520     *
521     * @param RequestAbstract  $request  Request
522     * @param ResponseAbstract $response Response
523     * @param array            $data     Generic data
524     *
525     * @return void
526     *
527     * @api
528     *
529     * @since 1.0.0
530     */
531    public function apiRecurringEntryUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
532    {
533        if (!empty($val = $this->validateRecurringEntryUpdate($request))) {
534            $response->data['account_update'] = new FormValidation($val);
535            $response->header->status         = RequestStatusCode::R_400;
536
537            return;
538        }
539    }
540
541    /**
542     * Validate recurring entry update request
543     *
544     * @param RequestAbstract $request Request
545     *
546     * @return array<string, bool>
547     *
548     * @since 1.0.0
549     */
550    private function validateRecurringEntryUpdate(RequestAbstract $request) : array
551    {
552        $val = [];
553        if (($val['id'] = !$request->hasData('id'))
554        ) {
555            return $val;
556        }
557
558        return [];
559    }
560
561    /**
562     * Api method to create an tax key
563     *
564     * @param RequestAbstract  $request  Request
565     * @param ResponseAbstract $response Response
566     * @param array            $data     Generic data
567     *
568     * @return void
569     *
570     * @api
571     *
572     * @since 1.0.0
573     */
574    public function apiTaxKeyCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
575    {
576        if (!empty($val = $this->validateTaxKeyCreate($request))) {
577            $response->header->status = RequestStatusCode::R_400;
578            $this->createInvalidCreateResponse($request, $response, $val);
579
580            return;
581        }
582    }
583
584    /**
585     * Validate tax key create request
586     *
587     * @param RequestAbstract $request Request
588     *
589     * @return array<string, bool>
590     *
591     * @since 1.0.0
592     */
593    private function validateTaxKeyCreate(RequestAbstract $request) : array
594    {
595        $val = [];
596        if (($val['name'] = !$request->hasData('name'))
597        ) {
598            return $val;
599        }
600
601        return [];
602    }
603
604    /**
605     * Api method to update an tax key
606     *
607     * @param RequestAbstract  $request  Request
608     * @param ResponseAbstract $response Response
609     * @param array            $data     Generic data
610     *
611     * @return void
612     *
613     * @api
614     *
615     * @since 1.0.0
616     */
617    public function apiTaxKeyUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
618    {
619        if (!empty($val = $this->validateTaxKeyUpdate($request))) {
620            $response->data['account_update'] = new FormValidation($val);
621            $response->header->status         = RequestStatusCode::R_400;
622
623            return;
624        }
625    }
626
627    /**
628     * Validate tax key update request
629     *
630     * @param RequestAbstract $request Request
631     *
632     * @return array<string, bool>
633     *
634     * @since 1.0.0
635     */
636    private function validateTaxKeyUpdate(RequestAbstract $request) : array
637    {
638        $val = [];
639        if (($val['id'] = !$request->hasData('id'))
640        ) {
641            return $val;
642        }
643
644        return [];
645    }
646
647    /**
648     * Api method to create an batch entry
649     *
650     * @param RequestAbstract  $request  Request
651     * @param ResponseAbstract $response Response
652     * @param array            $data     Generic data
653     *
654     * @return void
655     *
656     * @api
657     *
658     * @since 1.0.0
659     */
660    public function apiBatchEntryCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
661    {
662        if (!empty($val = $this->validateBatchEntryCreate($request))) {
663            $response->header->status = RequestStatusCode::R_400;
664            $this->createInvalidCreateResponse($request, $response, $val);
665
666            return;
667        }
668    }
669
670    /**
671     * Validate batch entry create request
672     *
673     * @param RequestAbstract $request Request
674     *
675     * @return array<string, bool>
676     *
677     * @since 1.0.0
678     */
679    private function validateBatchEntryCreate(RequestAbstract $request) : array
680    {
681        $val = [];
682        if (($val['name'] = !$request->hasData('name'))
683        ) {
684            return $val;
685        }
686
687        return [];
688    }
689
690    /**
691     * Api method to update an batch entry
692     *
693     * @param RequestAbstract  $request  Request
694     * @param ResponseAbstract $response Response
695     * @param array            $data     Generic data
696     *
697     * @return void
698     *
699     * @api
700     *
701     * @since 1.0.0
702     */
703    public function apiBatchEntryUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
704    {
705        if (!empty($val = $this->validateBatchEntryUpdate($request))) {
706            $response->data['account_update'] = new FormValidation($val);
707            $response->header->status         = RequestStatusCode::R_400;
708
709            return;
710        }
711    }
712
713    /**
714     * Validate batch entry update request
715     *
716     * @param RequestAbstract $request Request
717     *
718     * @return array<string, bool>
719     *
720     * @since 1.0.0
721     */
722    private function validateBatchEntryUpdate(RequestAbstract $request) : array
723    {
724        $val = [];
725        if (($val['id'] = !$request->hasData('id'))
726        ) {
727            return $val;
728        }
729
730        return [];
731    }
732}