Ligne.php 4.09 KB
Newer Older
1
2
3
4
5
6
<?php

namespace UnicaenImport\Entity\Differentiel;

use Doctrine\ORM\EntityManager;
use UnicaenImport\Entity\Db\Source;
Laurent Lécluse's avatar
Laurent Lécluse committed
7
use Laminas\Filter\Word\UnderscoreToCamelCase;
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

/**
 * Classe permettant de récupérer une ligne de différentiel
 *
 * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
 */
class Ligne
{

    /**
     * Entity Manager
     *
     * @var EntityManager
     */
    protected $entityManager;

    /**
     * Nom de la table
     *
     * @var string
     */
    protected $tableName;

    /**
     * ID
     *
     * @var integer
     */
    protected $id;

    /**
     * Action
     *
     * @var string
     */
    protected $action;

    /**
     * ID de la source
     *
     * @var Source
     */
    protected $source;

    /**
     * Code source
     *
     * @var string
     */
    protected $sourceCode;

    /**
     * Données des colonnes
     *
     * @var array
     */
    protected $values;

    /**
     * Liste des colonnes ayant changé
     *
     * @var boolean[]
     */
    protected $changed;



    /**
     *
     * @param Statement $stmt
     */
    public function __construct(EntityManager $entityManager, $tableName, array $data)
    {
Laurent Lécluse's avatar
Laurent Lécluse committed
81
        $this->tableName     = $tableName;
82
83
84
85
86
87
88
89
        $this->entityManager = $entityManager;

        $this->id = (integer)$data['ID'];
        unset($data['ID']);

        $this->action = $data['IMPORT_ACTION'];
        unset($data['IMPORT_ACTION']);

Laurent Lécluse's avatar
Laurent Lécluse committed
90
        $this->source = $entityManager->find(Source::class, (integer)$data['SOURCE_ID']);
91
        //unset($data['SOURCE_ID']);
92
93
94
95

        $this->sourceCode = $data['SOURCE_CODE'];
        unset($data['SOURCE_CODE']);

Laurent Lécluse's avatar
Laurent Lécluse committed
96
97
98
99
100
        $keys = array_keys($data);
        foreach ($keys as $key) {
            if (in_array('U_' . $key, $keys)) {
                $this->values[$key]  = $data[$key];
                $this->changed[$key] = $data['U_' . $key] === '1';
101
102
103
104
            }
        }
    }

Laurent Lécluse's avatar
Laurent Lécluse committed
105
106


107
108
109
110
111
112
113
114
115
116
    /**
     * Retourne le nom de la table correspondante
     *
     * @return string
     */
    public function getTableName()
    {
        return $this->tableName;
    }

Laurent Lécluse's avatar
Laurent Lécluse committed
117
118


119
    /**
120
     * Retourne l'ID de l'enregistrement
121
122
123
124
125
126
127
128
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

Laurent Lécluse's avatar
Laurent Lécluse committed
129
130


131
132
133
134
135
136
137
138
139
140
    /**
     * Retourne le type d'action prévue pour l'import
     *
     * @return string
     */
    public function getAction()
    {
        return $this->action;
    }

Laurent Lécluse's avatar
Laurent Lécluse committed
141
142


143
144
145
146
147
148
149
150
151
152
    /**
     * Retourne lasource de données
     *
     * @return Source
     */
    public function getSource()
    {
        return $this->source;
    }

Laurent Lécluse's avatar
Laurent Lécluse committed
153
154


155
156
157
158
159
160
161
162
163
164
    /**
     * Retourne le code de la donnée source
     *
     * @return string
     */
    public function getSourceCode()
    {
        return $this->sourceCode;
    }

Laurent Lécluse's avatar
Laurent Lécluse committed
165
166


167
168
169
170
    /**
     * Retourne, sous forme de chaîne de caractères, la valeur de la colonne donnée
     *
     * @param string $colName
Laurent Lécluse's avatar
Laurent Lécluse committed
171
     *
172
173
     * @return string
     */
Laurent Lécluse's avatar
Laurent Lécluse committed
174
    public function get($colName)
175
176
177
178
    {
        return $this->values[$colName];
    }

Laurent Lécluse's avatar
Laurent Lécluse committed
179
180


181
182
183
184
185
186
187
    /**
     * Retourne l'entité Doctrine correspondante
     *
     * @return StdClass
     */
    public function getEntity()
    {
Laurent Lécluse's avatar
Laurent Lécluse committed
188
189
190
        $filter      = new UnderscoreToCamelCase();
        $entityClass = 'Application\\Entity\Db\\' . $filter->filter(strtolower($this->getTableName()));

191
192
193
        return $this->entityManager->find($entityClass, $this->getId());
    }

Laurent Lécluse's avatar
Laurent Lécluse committed
194
195


196
197
198
199
    /**
     * Retourne true si la colonne $colName a changé, false sinon
     *
     * @param string $colName
Laurent Lécluse's avatar
Laurent Lécluse committed
200
     *
201
202
     * @return boolean
     */
Laurent Lécluse's avatar
Laurent Lécluse committed
203
    public function hasChanged($colName)
204
205
206
207
    {
        return $this->changed[$colName];
    }

Laurent Lécluse's avatar
Laurent Lécluse committed
208
209


210
211
212
213
214
215
216
217
    /**
     * Retourne un tableau des colonnes ayant changé
     *
     * @return array
     */
    public function getChanges()
    {
        $changes = [];
Laurent Lécluse's avatar
Laurent Lécluse committed
218
        foreach ($this->changed as $colName => $changed) {
219
220
            if ($changed) $changes[$colName] = $this->values[$colName];
        }
Laurent Lécluse's avatar
Laurent Lécluse committed
221

222
223
224
        return $changes;
    }

Laurent Lécluse's avatar
Laurent Lécluse committed
225
226


227
228
229
230
231
232
233
234
235
236
    /**
     * Retourne le gestionnaire d'entités correspondant
     *
     * @return EntityManager
     */
    public function getEntityManager()
    {
        return $this->entityManager;
    }
}