Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 109
0.00% covered (danger)
0.00%
0 / 16
CRAP
0.00% covered (danger)
0.00%
0 / 1
ApiBillTypeController
0.00% covered (danger)
0.00%
0 / 109
0.00% covered (danger)
0.00%
0 / 16
1122
0.00% covered (danger)
0.00%
0 / 1
 apiBillTypeCreate
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
6
 createBillTypeFromRequest
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
12
 validateBillTypeCreate
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
12
 apiBillTypeL11nCreate
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
6
 createBillTypeL11nFromRequest
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
 validateBillTypeL11nCreate
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
12
 apiBillTypeUpdate
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
6
 updateBillTypeFromRequest
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
6
 validateBillTypeUpdate
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 apiBillTypeDelete
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
6
 validateBillTypeDelete
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 apiBillTypeL11nUpdate
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
6
 updateBillTypeL11nFromRequest
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
 validateBillTypeL11nUpdate
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 apiBillTypeL11nDelete
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
6
 validateBillTypeL11nDelete
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3/**
4 * Jingga
5 *
6 * PHP Version 8.1
7 *
8 * @package   Modules\Billing
9 * @copyright Dennis Eichhorn
10 * @license   OMS License 2.0
11 * @version   1.0.0
12 * @link      https://jingga.app
13 */
14declare(strict_types=1);
15
16namespace Modules\Billing\Controller;
17
18use Modules\Billing\Models\BillTransferType;
19use Modules\Billing\Models\BillType;
20use Modules\Billing\Models\BillTypeL11nMapper;
21use Modules\Billing\Models\BillTypeMapper;
22use Modules\Media\Models\NullCollection;
23use phpOMS\Localization\BaseStringL11n;
24use phpOMS\Localization\ISO639x1Enum;
25use phpOMS\Message\Http\RequestStatusCode;
26use phpOMS\Message\RequestAbstract;
27use phpOMS\Message\ResponseAbstract;
28
29/**
30 * Billing class.
31 *
32 * @package Modules\Billing
33 * @license OMS License 2.0
34 * @link    https://jingga.app
35 * @since   1.0.0
36 */
37final class ApiBillTypeController extends Controller
38{
39    /**
40     * Api method to create item bill type
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 apiBillTypeCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
53    {
54        if (!empty($val = $this->validateBillTypeCreate($request))) {
55            $response->header->status = RequestStatusCode::R_400;
56            $this->createInvalidCreateResponse($request, $response, $val);
57
58            return;
59        }
60
61        $billType = $this->createBillTypeFromRequest($request);
62        $this->createModel($request->header->account, $billType, BillTypeMapper::class, 'bill_type', $request->getOrigin());
63        $this->createStandardCreateResponse($request, $response, $billType);
64    }
65
66    /**
67     * Method to create item attribute from request.
68     *
69     * @param RequestAbstract $request Request
70     *
71     * @return BillType
72     *
73     * @since 1.0.0
74     */
75    private function createBillTypeFromRequest(RequestAbstract $request) : BillType
76    {
77        $billType = new BillType($request->getDataString('name') ?? '');
78        $billType->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN);
79        $billType->numberFormat    = $request->getDataString('number_format') ?? '{id}';
80        $billType->transferStock   = $request->getDataBool('transfer_stock') ?? false;
81        $billType->isTemplate      = $request->getDataBool('is_template') ?? false;
82        $billType->transferType    = $request->getDataInt('transfer_type') ?? BillTransferType::SALES;
83        $billType->defaultTemplate = $request->hasData('template')
84            ? new NullCollection((int) $request->getData('template'))
85            : null;
86
87        if ($request->hasData('template')) {
88            $billType->addTemplate(new NullCollection((int) $request->getData('template')));
89        }
90
91        return $billType;
92    }
93
94    /**
95     * Validate item attribute create request
96     *
97     * @param RequestAbstract $request Request
98     *
99     * @return array<string, bool>
100     *
101     * @since 1.0.0
102     */
103    private function validateBillTypeCreate(RequestAbstract $request) : array
104    {
105        $val = [];
106        if (($val['title'] = !$request->hasData('title'))
107            || ($val['name'] = !$request->hasData('name'))
108        ) {
109            return $val;
110        }
111
112        return [];
113    }
114
115    /**
116     * Api method to create item attribute l11n
117     *
118     * @param RequestAbstract  $request  Request
119     * @param ResponseAbstract $response Response
120     * @param array            $data     Generic data
121     *
122     * @return void
123     *
124     * @api
125     *
126     * @since 1.0.0
127     */
128    public function apiBillTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
129    {
130        if (!empty($val = $this->validateBillTypeL11nCreate($request))) {
131            $response->header->status = RequestStatusCode::R_400;
132            $this->createInvalidCreateResponse($request, $response, $val);
133
134            return;
135        }
136
137        $billTypeL11n = $this->createBillTypeL11nFromRequest($request);
138        $this->createModel($request->header->account, $billTypeL11n, BillTypeL11nMapper::class, 'bill_type_l11n', $request->getOrigin());
139        $this->createStandardCreateResponse($request, $response, $billTypeL11n);
140    }
141
142    /**
143     * Method to create item attribute l11n from request.
144     *
145     * @param RequestAbstract $request Request
146     *
147     * @return BaseStringL11n
148     *
149     * @since 1.0.0
150     */
151    private function createBillTypeL11nFromRequest(RequestAbstract $request) : BaseStringL11n
152    {
153        $billTypeL11n      = new BaseStringL11n();
154        $billTypeL11n->ref = $request->getDataInt('type') ?? 0;
155        $billTypeL11n->setLanguage(
156            $request->getDataString('language') ?? $request->header->l11n->language
157        );
158        $billTypeL11n->content = $request->getDataString('title') ?? '';
159
160        return $billTypeL11n;
161    }
162
163    /**
164     * Validate item attribute l11n create request
165     *
166     * @param RequestAbstract $request Request
167     *
168     * @return array<string, bool>
169     *
170     * @since 1.0.0
171     */
172    private function validateBillTypeL11nCreate(RequestAbstract $request) : array
173    {
174        $val = [];
175        if (($val['title'] = !$request->hasData('title'))
176            || ($val['type'] = !$request->hasData('type'))
177        ) {
178            return $val;
179        }
180
181        return [];
182    }
183
184    /**
185     * Api method to update BillType
186     *
187     * @param RequestAbstract  $request  Request
188     * @param ResponseAbstract $response Response
189     * @param array            $data     Generic data
190     *
191     * @return void
192     *
193     * @api
194     *
195     * @since 1.0.0
196     */
197    public function apiBillTypeUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
198    {
199        if (!empty($val = $this->validateBillTypeUpdate($request))) {
200            $response->header->status = RequestStatusCode::R_400;
201            $this->createInvalidUpdateResponse($request, $response, $val);
202
203            return;
204        }
205
206        /** @var BillType $old */
207        $old = BillTypeMapper::get()->where('id', (int) $request->getData('id'));
208        $new = $this->updateBillTypeFromRequest($request, clone $old);
209
210        $this->updateModel($request->header->account, $old, $new, BillTypeMapper::class, 'bill_type', $request->getOrigin());
211        $this->createStandardUpdateResponse($request, $response, $new);
212    }
213
214    /**
215     * Method to update BillType from request.
216     *
217     * @param RequestAbstract $request Request
218     * @param BillType        $new     Model to modify
219     *
220     * @return BillType
221     *
222     * @todo: implement
223     *
224     * @since 1.0.0
225     */
226    public function updateBillTypeFromRequest(RequestAbstract $request, BillType $new) : BillType
227    {
228        $new->numberFormat    = $request->getDataString('number_format') ?? $new->numberFormat;
229        $new->transferStock   = $request->getDataBool('transfer_stock') ?? $new->transferStock;
230        $new->isTemplate      = $request->getDataBool('is_template') ?? $new->isTemplate;
231        $new->transferType    = $request->getDataInt('transfer_type') ?? $new->transferType;
232        $new->defaultTemplate = $request->hasData('template')
233            ? new NullCollection((int) $request->getData('template'))
234            : $new->defaultTemplate;
235
236        return $new;
237    }
238
239    /**
240     * Validate BillType update request
241     *
242     * @param RequestAbstract $request Request
243     *
244     * @return array<string, bool>
245     *
246     * @todo: implement
247     *
248     * @since 1.0.0
249     */
250    private function validateBillTypeUpdate(RequestAbstract $request) : array
251    {
252        $val = [];
253        if (($val['id'] = !$request->hasData('id'))) {
254            return $val;
255        }
256
257        return [];
258    }
259
260    /**
261     * Api method to delete BillType
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 apiBillTypeDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
274    {
275        if (!empty($val = $this->validateBillTypeDelete($request))) {
276            $response->header->status = RequestStatusCode::R_400;
277            $this->createInvalidDeleteResponse($request, $response, $val);
278
279            return;
280        }
281
282        /** @var \Modules\Billing\Models\BillType $billType */
283        $billType = BillTypeMapper::get()->where('id', (int) $request->getData('id'))->execute();
284        $this->deleteModel($request->header->account, $billType, BillTypeMapper::class, 'bill_type', $request->getOrigin());
285        $this->createStandardDeleteResponse($request, $response, $billType);
286    }
287
288    /**
289     * Validate BillType delete request
290     *
291     * @param RequestAbstract $request Request
292     *
293     * @return array<string, bool>
294     *
295     * @since 1.0.0
296     */
297    private function validateBillTypeDelete(RequestAbstract $request) : array
298    {
299        $val = [];
300        if (($val['id'] = !$request->hasData('id'))) {
301            return $val;
302        }
303
304        return [];
305    }
306
307    /**
308     * Api method to update BillTypeL11n
309     *
310     * @param RequestAbstract  $request  Request
311     * @param ResponseAbstract $response Response
312     * @param array            $data     Generic data
313     *
314     * @return void
315     *
316     * @api
317     *
318     * @since 1.0.0
319     */
320    public function apiBillTypeL11nUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
321    {
322        if (!empty($val = $this->validateBillTypeL11nUpdate($request))) {
323            $response->header->status = RequestStatusCode::R_400;
324            $this->createInvalidUpdateResponse($request, $response, $val);
325
326            return;
327        }
328
329        /** @var BaseStringL11n $old */
330        $old = BillTypeL11nMapper::get()->where('id', (int) $request->getData('id'));
331        $new = $this->updateBillTypeL11nFromRequest($request, clone $old);
332
333        $this->updateModel($request->header->account, $old, $new, BillTypeL11nMapper::class, 'bill_type_l11n', $request->getOrigin());
334        $this->createStandardUpdateResponse($request, $response, $new);
335    }
336
337    /**
338     * Method to update BillTypeL11n from request.
339     *
340     * @param RequestAbstract $request Request
341     * @param BaseStringL11n  $new     Model to modify
342     *
343     * @return BaseStringL11n
344     *
345     * @since 1.0.0
346     */
347    public function updateBillTypeL11nFromRequest(RequestAbstract $request, BaseStringL11n $new) : BaseStringL11n
348    {
349        $new->ref = $request->getDataInt('type') ?? $new->ref;
350        $new->setLanguage(
351            $request->getDataString('language') ?? $new->language
352        );
353        $new->content = $request->getDataString('title') ?? $new->content;
354
355        return $new;
356    }
357
358    /**
359     * Validate BillTypeL11n update request
360     *
361     * @param RequestAbstract $request Request
362     *
363     * @return array<string, bool>
364     *
365     * @since 1.0.0
366     */
367    private function validateBillTypeL11nUpdate(RequestAbstract $request) : array
368    {
369        $val = [];
370        if (($val['id'] = !$request->hasData('id'))) {
371            return $val;
372        }
373
374        return [];
375    }
376
377    /**
378     * Api method to delete BillTypeL11n
379     *
380     * @param RequestAbstract  $request  Request
381     * @param ResponseAbstract $response Response
382     * @param array            $data     Generic data
383     *
384     * @return void
385     *
386     * @api
387     *
388     * @since 1.0.0
389     */
390    public function apiBillTypeL11nDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
391    {
392        if (!empty($val = $this->validateBillTypeL11nDelete($request))) {
393            $response->header->status = RequestStatusCode::R_400;
394            $this->createInvalidDeleteResponse($request, $response, $val);
395
396            return;
397        }
398
399        /** @var BaseStringL11n $billTypeL11n */
400        $billTypeL11n = BillTypeL11nMapper::get()->where('id', (int) $request->getData('id'))->execute();
401        $this->deleteModel($request->header->account, $billTypeL11n, BillTypeL11nMapper::class, 'bill_type_l11n', $request->getOrigin());
402        $this->createStandardDeleteResponse($request, $response, $billTypeL11n);
403    }
404
405    /**
406     * Validate BillTypeL11n delete request
407     *
408     * @param RequestAbstract $request Request
409     *
410     * @return array<string, bool>
411     *
412     * @since 1.0.0
413     */
414    private function validateBillTypeL11nDelete(RequestAbstract $request) : array
415    {
416        $val = [];
417        if (($val['id'] = !$request->hasData('id'))) {
418            return $val;
419        }
420
421        return [];
422    }
423}