Proyectos de Subversion LeadersLinked - Services

Rev

Rev 359 | Rev 364 | 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;
17
 
18
 
19
class HabitReportMapper extends MapperCommon
20
{
21
    const _TABLE_A = 'tbl_habits_skills';
363 ariadna 22
    const _TABLE_B = 'tbl_habits_skills_registers';
352 ariadna 23
 
24
 
25
    /**
26
     *
27
     * @var HabitReportMapper
28
     */
29
    private static $_instance;
30
 
31
    /**
32
     *
33
     * @param AdapterInterface $adapter
34
     */
35
    private function __construct($adapter)
36
    {
37
        parent::__construct($adapter);
38
    }
39
 
40
    /**
41
     *
42
     * @param AdapterInterface $adapter
43
     * @return HabitReportMapper
44
     */
45
    public static function getInstance($adapter)
46
    {
47
        if (self::$_instance == null) {
48
            self::$_instance = new HabitReportMapper($adapter);
49
        }
50
        return self::$_instance;
51
    }
52
 
53
    /**
54
     *
55
     * @param int $id
358 ariadna 56
     * @return array
352 ariadna 57
     */
363 ariadna 58
    public function fetchDaysIntervalsRegisterList($id, $dateInitial, $dateFinal)
352 ariadna 59
    {
358 ariadna 60
        // Crear el objeto de selección
363 ariadna 61
        $select = $this->sql->select(self::_TABLE_B);
62
 
63
        // Agregar las condiciones de filtrado
64
        $select->where
65
            ->equalTo('user_id', $id)
66
            ->greaterThanOrEqualTo('added_on', $dateInitial)
67
            ->lessThanOrEqualTo('added_on', $dateFinal);
68
 
69
        // Ordenar por fecha de forma descendente
359 ariadna 70
        $select->order('added_on DESC');
352 ariadna 71
 
358 ariadna 72
        // Ejecutar la consulta
73
        $statement = $this->sql->prepareStatementForSqlObject($select);
74
        $results = $statement->execute();
75
 
76
        // Convertir los resultados en un array
77
        $records = [];
78
        foreach ($results as $row) {
79
            $records[] = $row;
80
        }
81
 
82
        return $records;
352 ariadna 83
    }
84
 
85
    /**
86
     *
87
     * @param string $uuid
88
     */
89
    public function fetchFiveteenByUuid($uuid)
90
    {
91
        $select = $this->sql->select(self::_TABLE_C);
92
        $select->where->equalTo('uuid', $uuid);
93
        $select->order('created_at DESC');
358 ariadna 94
        $select->limit(15);
352 ariadna 95
 
96
        return $select;
97
    }
98
 
99
    /**
100
     *
101
     * @param string $uuid
102
     * @param string $network_id
103
     * @return HabitSkill
104
     */
105
    public function fetchOneByUuidAndNetworkId($uuid, $network_id)
106
    {
107
        $select = $this->sql->select(self::_TABLE);
108
        $select->where->equalTo('uuid', $uuid);
109
        $select->where->equalTo('network_id', $network_id);
110
        $select->limit(1);
111
 
112
 
113
 
114
        $prototype = new HabitSkill();
115
        return $this->executeFetchOneObject($select, $prototype);
116
    }
117
 
118
    /**
119
     *
120
     * @param int $user_id
121
     * @return HabitSkill[]
122
     */
123
    public function fetchAllByUserId($user_id)
124
    {
125
 
126
        $prototype = new HabitSkill();
127
 
128
 
129
        $select = $this->sql->select(self::_TABLE);
130
        $select->where->equalTo('user_id', $user_id);
131
        $select->order('name');
132
 
133
        return $this->executeFetchAllObject($select, $prototype);
134
    }
135
 
136
    /**
137
     *
138
     * @param int[] $company_ids
139
     * @param string $search
140
     * @return HabitSkill[]
141
     */
142
    public function searchAllTemplateByCompayIds($company_ids, $search)
143
    {
144
        $prototype = new HabitSkill();
145
 
146
 
147
        $select = $this->sql->select(self::_TABLE);
148
        $select->where->in('company_id', $company_ids);
149
        $select->where->like('name', '%' . $search . '%');
150
        $select->where->equalTo('template', HabitSkill::TEMPLATE_YES);
151
 
152
        return $this->executeFetchAllObject($select, $prototype);
153
    }
154
 
155
 
156
 
157
    /**
158
     *
159
     * @param int[] $company_ids
160
     * @return HabitSkill[]
161
     */
162
    public function fetchAllTemplateByCompayIds($company_ids)
163
    {
164
        $prototype = new HabitSkill();
165
 
166
 
167
        $select = $this->sql->select(self::_TABLE);
168
        $select->where->in('company_id', $company_ids);
169
        $select->where->equalTo('template', HabitSkill::TEMPLATE_YES);
170
 
171
        return $this->executeFetchAllObject($select, $prototype);
172
    }
173
 
174
    /**
175
     *
176
     * @param int $company_id
177
     * @param string $search
178
     * @param int $page
179
     * @param int $records_per_page
180
     * @param string $order_field
181
     * @param string $order_direction
182
     * @return Paginator
183
     */
184
    public function fetchAllDataTableTemplates($company_id, $search, $page = 1, $records_per_page = 10, $order_field = 'name', $order_direction = 'ASC')
185
    {
186
        $prototype = new HabitSkill();
187
        $select = $this->sql->select(self::_TABLE);
188
 
189
        if ($search) {
190
            $select->where->like('name', '%' . $search . '%');
191
        }
192
        $select->where->equalTo('company_id', $company_id);
193
        $select->order($order_field . ' ' . $order_direction);
194
 
195
 
196
 
197
        // echo $select->getSqlString($this->adapter->platform); exit;
198
 
199
        $hydrator   = new ObjectPropertyHydrator();
200
        $resultset  = new HydratingResultSet($hydrator, $prototype);
201
 
202
        $adapter = new DbSelect($select, $this->sql, $resultset);
203
        $paginator = new Paginator($adapter);
204
        $paginator->setItemCountPerPage($records_per_page);
205
        $paginator->setCurrentPageNumber($page);
206
 
207
 
208
        return $paginator;
209
    }
210
 
211
 
212
 
213
    /**
214
     *
215
     * @param int $user_id
216
     * @param string $search
217
     * @param int $page
218
     * @param int $records_per_page
219
     * @param string $order_field
220
     * @param string $order_direction
221
     * @return Paginator
222
     */
223
    public function fetchAllDataTable($user_id, $search, $page = 1, $records_per_page = 10, $order_field = 'name', $order_direction = 'ASC')
224
    {
225
        $prototype = new HabitSkill();
226
        $select = $this->sql->select(self::_TABLE);
227
 
228
        if ($search) {
229
            $select->where->like('name', '%' . $search . '%');
230
        }
231
        $select->where->equalTo('user_id', $user_id);
232
        $select->order($order_field . ' ' . $order_direction);
233
 
234
        // echo $select->getSqlString($this->adapter->platform); exit;
235
 
236
        $hydrator   = new ObjectPropertyHydrator();
237
        $resultset  = new HydratingResultSet($hydrator, $prototype);
238
 
239
        $adapter = new DbSelect($select, $this->sql, $resultset);
240
        $paginator = new Paginator($adapter);
241
        $paginator->setItemCountPerPage($records_per_page);
242
        $paginator->setCurrentPageNumber($page);
243
 
244
 
245
        return $paginator;
246
    }
247
}