Proyectos de Subversion LeadersLinked - Services

Rev

Rev 363 | Rev 366 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
352 ariadna 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Mapper;
6
 
7
 
8
use Laminas\Db\Adapter\AdapterInterface;
9
use Laminas\Db\ResultSet\HydratingResultSet;
10
use Laminas\Paginator\Adapter\DbSelect;
11
use Laminas\Paginator\Paginator;
12
 
13
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
14
 
15
use LeadersLinked\Model\HabitSkill;
16
use LeadersLinked\Mapper\Common\MapperCommon;
364 ariadna 17
use DateTime;
352 ariadna 18
 
19
 
20
class HabitReportMapper extends MapperCommon
21
{
22
    const _TABLE_A = 'tbl_habits_skills';
363 ariadna 23
    const _TABLE_B = 'tbl_habits_skills_registers';
352 ariadna 24
 
25
 
26
    /**
27
     *
28
     * @var HabitReportMapper
29
     */
30
    private static $_instance;
31
 
32
    /**
33
     *
34
     * @param AdapterInterface $adapter
35
     */
36
    private function __construct($adapter)
37
    {
38
        parent::__construct($adapter);
39
    }
40
 
41
    /**
364 ariadna 42
     * Valida y ajusta las fechas de un rango de búsqueda.
352 ariadna 43
     *
364 ariadna 44
     * - Si alguna fecha es `null`, se asigna la fecha actual en formato `YYYY-MM-DD`.
45
     * - Si la fecha inicial es mayor que la final, se intercambian.
46
     *
47
     * @param string|null $initialDate Fecha inicial en formato `YYYY-MM-DD` o `null`.
48
     * @param string|null $finalDate Fecha final en formato `YYYY-MM-DD` o `null`.
49
     * @return array Arreglo con las fechas validadas [initialDate, finalDate].
50
     */
51
    function validateAndAdjustDates($initialDate, $finalDate)
52
    {
53
        $currentDate = date('Y-m-d'); // Fecha actual en formato YYYY-MM-DD
54
 
55
        // Asignar la fecha actual si alguna de las fechas es nula
56
        if (empty($initialDate)) {
57
            $initialDate = $currentDate;
58
        }
59
        if (empty($finalDate)) {
60
            $finalDate = $currentDate;
61
        }
62
 
63
        // Convertir las fechas a objetos DateTime para compararlas
64
        $initialDateObj = new DateTime($initialDate);
65
        $finalDateObj = new DateTime($finalDate);
66
 
67
        // Si la fecha inicial es mayor a la final, intercambiarlas
68
        if ($initialDateObj > $finalDateObj) {
69
            list($initialDate, $finalDate) = [$finalDate, $initialDate];
70
        }
71
 
72
        return [$initialDate, $finalDate];
73
    }
74
 
75
 
76
    /**
77
     *
352 ariadna 78
     * @param AdapterInterface $adapter
79
     * @return HabitReportMapper
80
     */
81
    public static function getInstance($adapter)
82
    {
83
        if (self::$_instance == null) {
84
            self::$_instance = new HabitReportMapper($adapter);
85
        }
86
        return self::$_instance;
87
    }
88
 
89
    /**
90
     *
91
     * @param int $id
358 ariadna 92
     * @return array
352 ariadna 93
     */
363 ariadna 94
    public function fetchDaysIntervalsRegisterList($id, $dateInitial, $dateFinal)
352 ariadna 95
    {
358 ariadna 96
        // Crear el objeto de selección
363 ariadna 97
        $select = $this->sql->select(self::_TABLE_B);
98
 
99
        // Agregar las condiciones de filtrado
100
        $select->where
101
            ->equalTo('user_id', $id)
102
            ->greaterThanOrEqualTo('added_on', $dateInitial)
103
            ->lessThanOrEqualTo('added_on', $dateFinal);
104
 
105
        // Ordenar por fecha de forma descendente
359 ariadna 106
        $select->order('added_on DESC');
352 ariadna 107
 
358 ariadna 108
        // Ejecutar la consulta
109
        $statement = $this->sql->prepareStatementForSqlObject($select);
110
        $results = $statement->execute();
111
 
112
        // Convertir los resultados en un array
113
        $records = [];
114
        foreach ($results as $row) {
115
            $records[] = $row;
116
        }
117
 
118
        return $records;
352 ariadna 119
    }
120
 
121
    /**
122
     *
123
     * @param string $uuid
124
     */
125
    public function fetchFiveteenByUuid($uuid)
126
    {
127
        $select = $this->sql->select(self::_TABLE_C);
128
        $select->where->equalTo('uuid', $uuid);
129
        $select->order('created_at DESC');
358 ariadna 130
        $select->limit(15);
352 ariadna 131
 
132
        return $select;
133
    }
134
 
135
    /**
136
     *
137
     * @param string $uuid
138
     * @param string $network_id
139
     * @return HabitSkill
140
     */
141
    public function fetchOneByUuidAndNetworkId($uuid, $network_id)
142
    {
143
        $select = $this->sql->select(self::_TABLE);
144
        $select->where->equalTo('uuid', $uuid);
145
        $select->where->equalTo('network_id', $network_id);
146
        $select->limit(1);
147
 
148
 
149
 
150
        $prototype = new HabitSkill();
151
        return $this->executeFetchOneObject($select, $prototype);
152
    }
153
 
154
    /**
155
     *
156
     * @param int $user_id
157
     * @return HabitSkill[]
158
     */
159
    public function fetchAllByUserId($user_id)
160
    {
161
 
162
        $prototype = new HabitSkill();
163
 
164
 
165
        $select = $this->sql->select(self::_TABLE);
166
        $select->where->equalTo('user_id', $user_id);
167
        $select->order('name');
168
 
169
        return $this->executeFetchAllObject($select, $prototype);
170
    }
171
 
172
    /**
173
     *
174
     * @param int[] $company_ids
175
     * @param string $search
176
     * @return HabitSkill[]
177
     */
178
    public function searchAllTemplateByCompayIds($company_ids, $search)
179
    {
180
        $prototype = new HabitSkill();
181
 
182
 
183
        $select = $this->sql->select(self::_TABLE);
184
        $select->where->in('company_id', $company_ids);
185
        $select->where->like('name', '%' . $search . '%');
186
        $select->where->equalTo('template', HabitSkill::TEMPLATE_YES);
187
 
188
        return $this->executeFetchAllObject($select, $prototype);
189
    }
190
 
191
 
192
 
193
    /**
194
     *
195
     * @param int[] $company_ids
196
     * @return HabitSkill[]
197
     */
198
    public function fetchAllTemplateByCompayIds($company_ids)
199
    {
200
        $prototype = new HabitSkill();
201
 
202
 
203
        $select = $this->sql->select(self::_TABLE);
204
        $select->where->in('company_id', $company_ids);
205
        $select->where->equalTo('template', HabitSkill::TEMPLATE_YES);
206
 
207
        return $this->executeFetchAllObject($select, $prototype);
208
    }
209
 
210
    /**
211
     *
212
     * @param int $company_id
213
     * @param string $search
214
     * @param int $page
215
     * @param int $records_per_page
216
     * @param string $order_field
217
     * @param string $order_direction
218
     * @return Paginator
219
     */
220
    public function fetchAllDataTableTemplates($company_id, $search, $page = 1, $records_per_page = 10, $order_field = 'name', $order_direction = 'ASC')
221
    {
222
        $prototype = new HabitSkill();
223
        $select = $this->sql->select(self::_TABLE);
224
 
225
        if ($search) {
226
            $select->where->like('name', '%' . $search . '%');
227
        }
228
        $select->where->equalTo('company_id', $company_id);
229
        $select->order($order_field . ' ' . $order_direction);
230
 
231
 
232
 
233
        // echo $select->getSqlString($this->adapter->platform); exit;
234
 
235
        $hydrator   = new ObjectPropertyHydrator();
236
        $resultset  = new HydratingResultSet($hydrator, $prototype);
237
 
238
        $adapter = new DbSelect($select, $this->sql, $resultset);
239
        $paginator = new Paginator($adapter);
240
        $paginator->setItemCountPerPage($records_per_page);
241
        $paginator->setCurrentPageNumber($page);
242
 
243
 
244
        return $paginator;
245
    }
246
 
247
 
248
 
249
    /**
250
     *
251
     * @param int $user_id
252
     * @param string $search
253
     * @param int $page
254
     * @param int $records_per_page
255
     * @param string $order_field
256
     * @param string $order_direction
257
     * @return Paginator
258
     */
259
    public function fetchAllDataTable($user_id, $search, $page = 1, $records_per_page = 10, $order_field = 'name', $order_direction = 'ASC')
260
    {
261
        $prototype = new HabitSkill();
262
        $select = $this->sql->select(self::_TABLE);
263
 
264
        if ($search) {
265
            $select->where->like('name', '%' . $search . '%');
266
        }
267
        $select->where->equalTo('user_id', $user_id);
268
        $select->order($order_field . ' ' . $order_direction);
269
 
270
        // echo $select->getSqlString($this->adapter->platform); exit;
271
 
272
        $hydrator   = new ObjectPropertyHydrator();
273
        $resultset  = new HydratingResultSet($hydrator, $prototype);
274
 
275
        $adapter = new DbSelect($select, $this->sql, $resultset);
276
        $paginator = new Paginator($adapter);
277
        $paginator->setItemCountPerPage($records_per_page);
278
        $paginator->setCurrentPageNumber($page);
279
 
280
 
281
        return $paginator;
282
    }
283
}