Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
47.62% covered (danger)
47.62%
10 / 21
14.29% covered (danger)
14.29%
1 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 1
BillType
47.62% covered (danger)
47.62%
10 / 21
14.29% covered (danger)
14.29%
1 / 7
32.70
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setL11n
77.78% covered (warning)
77.78%
7 / 9
0.00% covered (danger)
0.00%
0 / 1
4.18
 getL11n
66.67% covered (warning)
66.67%
2 / 3
0.00% covered (danger)
0.00%
0 / 1
3.33
 addTemplate
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getTemplates
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 toArray
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 jsonSerialize
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2/**
3 * Jingga
4 *
5 * PHP Version 8.1
6 *
7 * @package   Modules\Billing\Models
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\Billing\Models;
16
17use Modules\Media\Models\Collection;
18use phpOMS\Localization\BaseStringL11n;
19use phpOMS\Localization\ISO639x1Enum;
20
21/**
22 * Bill type enum.
23 *
24 * @package Modules\Billing\Models
25 * @license OMS License 2.0
26 * @link    https://jingga.app
27 * @since   1.0.0
28 */
29class BillType implements \JsonSerializable
30{
31    /**
32     * Id
33     *
34     * @var int
35     * @since 1.0.0
36     */
37    public int $id = 0;
38
39    public string $name = '';
40
41    public array $templates = [];
42
43    public ?Collection $defaultTemplate = null;
44
45    public string $numberFormat = '';
46
47    public string $accountFormat = '';
48
49    public int $transferType = BillTransferType::SALES;
50
51    public bool $transferStock = true;
52
53    public int $sign = 1;
54
55    /**
56     * Localization
57     *
58     * @var string|BaseStringL11n
59     */
60    protected string | BaseStringL11n $l11n;
61
62    public bool $isTemplate = false;
63
64    /**
65     * Constructor.
66     *
67     * @param string $name Name
68     *
69     * @since 1.0.0
70     */
71    public function __construct(string $name = '')
72    {
73        $this->name = $name;
74    }
75
76    /**
77     * Set l11n
78     *
79     * @param string|BaseStringL11n $l11n Tag article l11n
80     * @param string                $lang Language
81     *
82     * @return void
83     *
84     * @since 1.0.0
85     */
86    public function setL11n(string | BaseStringL11n $l11n, string $lang = ISO639x1Enum::_EN) : void
87    {
88        if ($l11n instanceof BaseStringL11n) {
89            $this->l11n = $l11n;
90        } elseif (isset($this->l11n) && $this->l11n instanceof BaseStringL11n) {
91            $this->l11n->content = $l11n;
92            $this->l11n->setLanguage($lang);
93        } else {
94            $this->l11n          = new BaseStringL11n();
95            $this->l11n->content = $l11n;
96            $this->l11n->ref     = $this->id;
97            $this->l11n->setLanguage($lang);
98        }
99    }
100
101    /**
102     * @return string
103     *
104     * @since 1.0.0
105     */
106    public function getL11n() : string
107    {
108        if (!isset($this->l11n)) {
109            return '';
110        }
111
112        return $this->l11n instanceof BaseStringL11n ? $this->l11n->content : $this->l11n;
113    }
114
115    /**
116     * Add rendering template
117     *
118     * @param Collection $template Template
119     *
120     * @return void
121     *
122     * @since 1.0.0
123     */
124    public function addTemplate(Collection $template) : void
125    {
126        $this->templates[] = $template;
127    }
128
129    /**
130     * Get templates
131     *
132     * @return Collection[]
133     *
134     * @since 1.0.0
135     */
136    public function getTemplates() : array
137    {
138        return $this->templates;
139    }
140
141    /**
142     * {@inheritdoc}
143     */
144    public function toArray() : array
145    {
146        return [
147            'id'             => $this->id,
148            'numberFormat'   => $this->numberFormat,
149            'transferType'   => $this->transferType,
150        ];
151    }
152
153    /**
154     * {@inheritdoc}
155     */
156    public function jsonSerialize() : mixed
157    {
158        return $this->toArray();
159    }
160}