Proyectos de Subversion LeadersLinked - Services

Rev

Rev 310 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
302 www 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Mapper;
5
 
6
use LeadersLinked\Mapper\Common\MapperCommon;
7
use Laminas\Db\Adapter\AdapterInterface;
8
use LeadersLinked\Model\HabitUser;
9
use Laminas\Db\Sql\Expression;
10
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
11
 
12
 
13
 
14
class HabitUserMapper extends MapperCommon
15
{
16
    const _TABLE = 'tbl_habits_users';
17
 
18
    /**
19
     *
20
     * @var HabitUserMapper
21
     */
22
    private static $_instance;
23
 
24
    /**
25
     *
26
     * @param AdapterInterface $adapter
27
     */
28
    private function __construct($adapter)
29
    {
30
        parent::__construct($adapter);
31
    }
32
 
33
    /**
34
     *
35
     * @param AdapterInterface $adapter
36
     * @return HabitUserMapper
37
     */
38
    public static function getInstance($adapter)
39
    {
40
        if(self::$_instance == null) {
41
            self::$_instance = new HabitUserMapper($adapter);
42
        }
43
        return self::$_instance;
44
    }
45
 
46
    /**
47
     *
48
     * @param int $company_id
49
     * return int
50
     */
51
    public function fetchCountByCompanyId($company_id)
52
    {
53
 
54
        $select = $this->sql->select();
55
        $select->columns(['total' => new Expression('COUNT(*)')]);
56
        $select->from(self::_TABLE);
57
        $select->where->equalTo('company_id', $company_id);
58
 
59
        $record = $this->executeFetchOneArray($select);
60
        return $record['total'];
61
    }
62
 
63
    /**
64
     *
65
     * @param int $user_id
66
     * return int
67
     */
68
    public function fetchCountByUserId($user_id)
69
    {
70
 
71
        $select = $this->sql->select();
72
        $select->columns(['total' => new Expression('COUNT(*)')]);
73
        $select->from(self::_TABLE);
74
        $select->where->equalTo('user_id', $user_id);
75
 
76
        $record = $this->executeFetchOneArray($select);
77
        return $record['total'];
78
    }
79
 
80
 
81
 
82
    /**
83
     *
84
     * @param int $company_id
85
     * return int
86
     */
87
    public function fetchCountActiveByCompanyId($company_id)
88
    {
89
        $now = date('Y-m-d H:i:s');
90
 
91
        $select = $this->sql->select();
92
        $select->columns(['total' => new Expression('COUNT(*)')]);
93
        $select->from(self::_TABLE);
94
        $select->where->equalTo('company_id', $company_id);
95
        $select->where->nest->equalTo('access', HabitUser::ACCESS_UNLIMITED)->or->nest()
96
        ->equalTo('access', HabitUser::ACCESS_PAY_PERIOD)
97
        ->and->lessThanOrEqualTo('paid_from', $now)->and->greaterThanOrEqualTo('paid_to', $now )->unnest()->unnest();
98
 
99
        //echo $select->getSqlString($this->adapter->platform); exit;
100
 
101
        $record = $this->executeFetchOneArray($select);
102
        return $record['total'];
103
    }
104
 
105
 
106
 
107
 
108
    /**
109
     *
110
     * @param int $company_id
111
     * @param string $date;
112
     * return []
113
     */
114
    public function fetchAllDistinctUserIdActiveByCompanyIdAndDate($company_id, $date)
115
    {
116
 
117
 
118
        $select = $this->sql->select();
119
        $select->from(self::_TABLE);
120
        $select->columns(['user_id' => new Expression('DISTINCT(user_id)') ]);
121
        $select->where->equalTo('company_id', $company_id);
122
        $select->where->nest->equalTo('access', HabitUser::ACCESS_UNLIMITED)->or->nest()
123
        ->equalTo('access', HabitUser::ACCESS_PAY_PERIOD)
124
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
125
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
126
 
127
 
128
        $user_ids = [];
129
        $records = $this->executeFetchAllArray($select);
130
 
131
        foreach($records as $record)
132
        {
133
            array_push($user_ids, $record[ 'user_id' ]);
134
        }
135
 
136
 
137
        return $user_ids;
138
    }
139
 
140
 
141
    /**
142
     *
143
     * @param int $user_id
144
     * return HabitUser[]
145
     */
146
    public function fetchAllActiveByUserId($user_id)
147
    {
148
        $now = date('Y-m-d H:i:s');
149
 
150
        $prototype = new HabitUser();
151
        $select = $this->sql->select();
152
        $select->from(self::_TABLE);
153
        $select->where->equalTo('user_id', $user_id);
154
        $select->where->nest->equalTo('access', HabitUser::ACCESS_UNLIMITED)->or->nest()
155
            ->equalTo('access', HabitUser::ACCESS_PAY_PERIOD)
156
            ->and->lessThanOrEqualTo('paid_from', $now)->and->greaterThanOrEqualTo('paid_to', $now )->unnest()->unnest();
157
 
158
        //echo $select->getSqlString($this->adapter->platform);
159
 
160
        return $this->executeFetchAllObject($select, $prototype);
161
    }
162
 
163
 
164
    /**
165
     *
166
     * @param int $user_id
167
     * return HabitUser[]
168
     */
169
    public function fetchAllByUserId($user_id)
170
    {
171
 
172
        $prototype = new HabitUser();
173
        $select = $this->sql->select();
174
        $select->from(self::_TABLE);
175
        $select->where->equalTo('user_id', $user_id);
176
 
177
        //echo $select->getSqlString($this->adapter->platform); exit;
178
 
179
        return $this->executeFetchAllObject($select, $prototype);
180
    }
181
 
182
 
183
    /**
184
     *
185
     * @param int $company_id
186
     * @param string $date;
187
     * return HabitUser[]
188
     */
189
    public function fetchAllActiveByCompanyAndDate($company_id, $date)
190
    {
191
 
192
        $prototype = new HabitUser();
193
        $select = $this->sql->select();
194
        $select->from(self::_TABLE);
195
        $select->where->equalTo('company_id', $company_id);
196
        $select->where->nest->equalTo('access', HabitUser::ACCESS_UNLIMITED)->or->nest()
197
        ->equalTo('access', HabitUser::ACCESS_PAY_PERIOD)
198
        ->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)
199
        ->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();
200
 
201
        //echo $select->getSqlString($this->adapter->platform); exit;
202
 
203
        return $this->executeFetchAllObject($select, $prototype);
204
    }
205
 
206
 
207
    /**
208
     *
209
     * @param int $company_id
210
     * return int[]
211
     */
212
    public function fetchAllUserIdsForActiveByCompanyId($company_id)
213
    {
214
        $now = date('Y-m-d H:i:s');
215
 
216
 
217
        $select = $this->sql->select();
218
        $select->columns(['user_id' => new Expression('DISTINCT(user_id)')]);
219
        $select->from(self::_TABLE);
220
        $select->where->equalTo('company_id', $company_id);
221
        $select->where->nest->equalTo('access', HabitUser::ACCESS_UNLIMITED)->or->nest()
222
        ->equalTo('access', HabitUser::ACCESS_PAY_PERIOD)
223
        ->and->lessThanOrEqualTo('paid_from', $now)->and->greaterThanOrEqualTo('paid_to', $now )->unnest()->unnest();
224
 
225
        //echo $select->getSqlString($this->adapter->platform); exit;
226
 
227
        $user_ids = [];
228
        $records = $this->executeFetchAllArray($select);
229
        foreach($records as $record)
230
        {
231
            array_push($user_ids, $record['user_id']);
232
        }
233
        return $user_ids;
234
    }
235
 
236
    /**
237
     *
238
     * @param string $uuid
239
     * return HabitUser
240
     */
241
    public function fetchOneByUuid($uuid)
242
    {
243
        $prototype = new HabitUser();
244
        $select = $this->sql->select();
245
        $select->from(self::_TABLE);
246
        $select->where->equalTo('uuid', $uuid);
247
 
248
        return $this->executeFetchOneObject($select, $prototype);
249
    }
250
 
251
 
252
    /**
253
     *
254
     * @param int $id
255
     * return HabitUser
256
     */
257
    public function fetchOne($id)
258
    {
259
        $prototype = new HabitUser();
260
        $select = $this->sql->select();
261
        $select->from(self::_TABLE);
262
        $select->where->equalTo('id', $id);
263
 
264
        return $this->executeFetchOneObject($select, $prototype);
265
    }
266
 
310 www 267
    /**
268
     *
269
     * @param int $company_id
270
     * @param int $user_is
271
     * return HabitUser
272
     */
273
    public function fetchOneByCompanyIdAndUserId($company_id, $user_id)
274
    {
275
        $prototype = new HabitUser();
276
        $select = $this->sql->select();
277
        $select->from(self::_TABLE);
278
        $select->where->equalTo('company_id', $company_id);
279
        $select->where->equalTo('useR_id', $user_id);
280
 
281
        return $this->executeFetchOneObject($select, $prototype);
282
    }
302 www 283
 
284
 
285
 
286
 
287
    /**
288
     *
289
     * @param HabitUser $record
290
     * @return boolean
291
     */
292
    public function insert($record)
293
    {
294
        $hydrator = new ObjectPropertyHydrator();
295
        $values = $hydrator->extract($record);
296
        $values = $this->removeEmpty($values);
297
 
298
        $insert = $this->sql->insert(self::_TABLE);
299
        $insert->values($values);
300
 
301
        $response = $this->executeInsert($insert);
302
        if($response) {
303
            $record->id = $this->lastInsertId;
304
        }
305
 
306
        return $response;
307
    }
308
 
309
    /**
310
     *
311
     * @param HabitUser $record
312
     * @return boolean
313
     */
314
    public function update($record)
315
    {
316
        $hydrator = new ObjectPropertyHydrator();
317
        $values = $hydrator->extract($record);
318
        $values = $this->removeEmpty($values);
319
 
320
        $update = $this->sql->update(self::_TABLE);
321
        $update->set($values);
322
        $update->where->equalTo('id', $record->id);
323
 
324
        return $this->executeUpdate($update);
325
    }
326
 
327
    /**
328
     *
329
     * @param HabitUser $record
330
     * return true
331
     */
332
    public function delete($record)
333
    {
334
        $delete = $this->sql->delete(self::_TABLE);
338 www 335
        $delete->where->equalTo('id', $record->id);
302 www 336
 
337
        return $this->executeDelete($delete);
338
    }
339
 
340
}