Completed
Push — master ( b32f2f...b78bd2 )
by Vítězslav
01:59
created

src/FlexiPeeHP/Stitek.php (1 issue)

Severity
1
<?php
2
/**
3
 * FlexiPeeHP - Objekt štítku.
4
 *
5
 * @author     Vítězslav Dvořák <[email protected]>
6
 * @copyright  (C) 2015-2017 Spoje.Net
7
 */
8
9
namespace FlexiPeeHP;
10
11
/**
12
 * Štítek
13
 *
14
 * @link https://demo.flexibee.eu/c/demo/stitek/properties Vlastnosti evidence
15
 */
16
class Stitek extends FlexiBeeRW
17
{
18
    /**
19
     * Evidence Path for vsb supported by label
20
     *
21
     * @var array
22
     */
23
    public static $vsbToEvidencePath = [
24
        'vsbAdr' => 'adresar', // Adresář
25
        'vsbBan' => 'banka', // Banka
26
//      'vsbCis' => 'ciselnik', // Číselníky
27
        'vsbFap' => 'faktura-prijata', // Přijaté faktury
28
        'vsbFav' => 'faktura-vydana', // Vydané faktury
29
//      'vsbInt' => '' // Interní doklady
30
        'vsbKatalog' => 'cenik', // Adresář
31
//      'vsbMaj' => '', // Majetek
32
//      'vsbMzd' => 'mzda', // Mzdy
33
        'vsbNap' => 'nabidka-prijata', // Nabídky přijaté
34
        'vsbNav' => 'nabidka-vydana', // Nabídky vydané
35
        'vsbObp' => 'objednavka-prijata', // Objednávky přijaté
36
        'vsbObv' => 'objednavka-vydana', // Objednávky vydané
37
        'vsbPhl' => 'pohledavka', // Pohledávky
38
        'vsbPok' => 'pokladna', // Pokladna
39
        'vsbPpp' => 'poptavka-prijata', // Poptávky přijaté
40
        'vsbPpv' => 'poptavka-vydana', // Poptávky vydané
41
        'vsbSkl' => 'sklad', // Sklad
42
        'vsbZav' => 'zavazek', // Závazky
43
    ];
44
45
    /**
46
     * Evidence užitá objektem.
47
     *
48
     * @var string
49
     */
50
    public $evidence = 'stitek';
51
52
    /**
53
     * Obtain labels for current record
54
     *
55
     * @deprecated since version 1.21
56
     * 
57
     * @param FlexiBeeRO $object data source
58
     * @return array labels
59
     */
60
    public static function getLabels($object)
61
    {
62
        $labels    = null;
63
        $labelsRaw = $object->getDataValue('stitky');
64
65
        if (strlen($labelsRaw)) {
66
            $labels = is_array($labelsRaw) ? $labelsRaw : self::listToArray($labelsRaw);
67
        }
68
        return $labels;
69
    }
70
71
    /**
72
     * Convert coma-separated list to array
73
     *
74
     * @param string $listRaw
75
     * 
76
     * @return array
77
     */
78
    public static function listToArray($listRaw)
79
    {
80
        if (is_array($listRaw)) {
0 ignored issues
show
The condition is_array($listRaw) is always false.
Loading history...
81
            $list = array_combine(array_values($listRaw), array_values($listRaw));
82
        } else {
83
            if (strstr($listRaw, ',')) {
84
                $list = array_map('trim', explode(',', $listRaw));
85
            } else {
86
                $list = [$listRaw];
87
            }
88
            $list = array_combine($list, $list);
89
        }
90
        return empty($listRaw) ? [] : $list;
91
    }
92 1
93
    /**
94 1
     * Obtain list of availble labels for given object
95 1
     *
96 1
     * @param FlexiBeeRO $object
97 1
     * 
98
     * @return array
99 1
     */
100 1
    public static function getAvailbleLabels($object)
101 1
    {
102 1
        $labels         = [];
103 1
        $evidenceBackup = $object->getEvidence();
104 1
        $object->setEvidence('stitek');
105 1
        $pathToVsb      = array_flip(self::$vsbToEvidencePath);
106 1
107 1
        if (array_key_exists($evidenceBackup, $pathToVsb)) {
108
            $labelsRaw = $object->getColumnsFromFlexiBee(['kod', 'nazev'],
109 1
                [$pathToVsb[$evidenceBackup] => true], 'nazev');
110 1
            if (count($labelsRaw)) {
111
                foreach ($labelsRaw as $labelInfo) {
112
                    $labels[$labelInfo['kod']] = $labelInfo['nazev'];
113
                }
114
            }
115
        }
116
117
        $object->setEvidence($evidenceBackup);
118
        return $labels;
119
    }
120
121
    /**
122
     * Set Label for Current Object record
123
     *
124
     * @deprecated since version 1.21
125
     * 
126
     * @param string     $label
127
     * @param FlexiBeeRW $object
128
     *
129
     * @return boolean   success result ?
130
     */
131
    public static function setLabel($label, $object)
132
    {
133
        return $object->insertToFlexiBee(['id' => $object->getMyKey(), 'stitky' => $label]);
134
    }
135
136
    /**
137
     * UnSet Label for Current Object record
138
     *
139
     * @deprecated since version 1.21
140
     * 
141
     * @param string     $label
142
     * @param FlexiBeeRW $object
143
     *
144
     * @return boolean   success result ?
145
     */
146
    public static function unsetLabel($label, $object)
147
    {
148
        $result = true;
149
        $labels = self::getLabels($object);
150
        if (array_key_exists($label, $labels)) {
151
            unset($labels[$label]);
152
            $object->insertToFlexiBee(['id' => $object->getMyKey(), 'stitky@removeAll' => 'true',
153
                'stitky' => $labels]);
154
            $result = ($object->lastResponseCode == 201);
155
        }
156
        return $result;
157
    }
158
159
    /**
160
     * Create New Label for given evidencies
161
     * 
162
     * @param string $name       Label Name
163
     * @param array  $evidences  Evidence code list ex: ['faktura-vydana','faktura-prijata']
164
     * @param array  $options    Additional Label properties ex: ['kod'=>'EXAMPLE','skupVybKlic'=>'SKUPINA_STITKU'] 
165
     * 
166
     * @return boolean success
167
     */
168
    public function createNew($name, $evidences, $options = [])
169
    {
170
        $this->setData($options, true);
171
        $evidence2code = array_flip(self::$vsbToEvidencePath);
172
        foreach ($evidences as $evidence) {
173
            if (array_key_exists($evidence, $evidence2code)) {
174
                $this->setDataValue($evidence2code[$evidence], true);
175
            }
176
        }
177
178
        if (!array_key_exists('kod', $options)) {
179
            $this->setDataValue('kod', self::code($name));
180
        }
181
        $this->setDataValue('nazev', $name);
182
        return $this->sync();
183
    }
184
}
185