Proyectos de Subversion LeadersLinked - Services

Rev

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

Rev Autor Línea Nro. Línea
1 efrain 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\Hydrator\ObjectPropertyHydrator;
9
use Laminas\Paginator\Paginator;
10
use Laminas\Db\ResultSet\HydratingResultSet;
11
use Laminas\Paginator\Adapter\DbSelect;
12
use LeadersLinked\Model\SurveyCampaign;
152 efrain 13
use Laminas\Db\Sql\Expression;
1 efrain 14
 
15
 
16
class SurveyCampaignMapper extends MapperCommon
17
{
18
    const _TABLE = 'tbl_survey_campaigns';
19
 
20
    /**
21
     *
22
     * @var SurveyCampaignMapper
23
     */
24
    private static $_instance;
25
 
26
    /**
27
     *
28
     * @param AdapterInterface $adapter
29
     */
30
    private function __construct($adapter)
31
    {
32
        parent::__construct($adapter);
33
    }
34
 
35
    /**
36
     *
37
     * @param AdapterInterface $adapter
38
     * @return SurveyCampaignMapper
39
     */
40
    public static function getInstance($adapter)
41
    {
42
        if(self::$_instance == null) {
43
            self::$_instance = new SurveyCampaignMapper($adapter);
44
        }
45
        return self::$_instance;
46
    }
47
 
48
    /**
49
     *
50
     * @param int $id
51
     * @return SurveyCampaign
52
     */
53
    public function fetchOne($id)
54
    {
55
        $prototype = new SurveyCampaign();
56
 
57
        $select = $this->sql->select(self::_TABLE);
58
        $select->where->equalTo('id', $id);
59
 
60
        return $this->executeFetchOneObject($select, $prototype);
61
    }
62
 
63
 
64
    /**
65
     *
66
     * @param int $uuid
67
     * @return SurveyCampaign
68
     */
69
    public function fetchOneByUuid($uuid)
70
    {
71
        $prototype = new SurveyCampaign();
72
        $select = $this->sql->select(self::_TABLE);
73
        $select->where->equalTo('uuid', $uuid);
74
       // echo $select->getSqlString($this->adapter->platform); exit;
75
        return $this->executeFetchOneObject($select, $prototype);
76
    }
77
 
78
 
79
    /**
80
     *
81
     * @param int $company_id
82
     * @return SurveyCampaign
83
     */
84
    public function fetchAllByCompanyId($company_id)
85
    {
86
        $prototype = new SurveyCampaign();
87
 
88
        $select = $this->sql->select(self::_TABLE);
89
        $select->where->equalTo('company_id', $company_id);
90
        $select->where->equalTo('status', SurveyCampaign::STATUS_ACTIVE);
91
        $select->order('id');
92
 
93
        return $this->executeFetchAllObject($select, $prototype);
94
    }
95
 
96
 
97
 
98
    /**
99
     *
100
     * @param SurveyCampaign $record
101
     * @return boolean
102
     */
103
    public function insert($record)
104
    {
105
        $hydrator = new ObjectPropertyHydrator();
106
        $values = $hydrator->extract($record);
107
        $values = $this->removeEmpty($values);
108
 
109
        $insert = $this->sql->insert(self::_TABLE);
110
        $insert->values($values);
111
 
112
        //echo $insert->getSqlString($this->adapter->platform); exit;
113
 
114
        $result = $this->executeInsert($insert);
115
        if($result) {
116
            $record->id = $this->lastInsertId;
117
        }
118
        return $result;
119
    }
120
 
121
    /**
122
     *
123
     * @param SurveyCampaign $record
124
     * @return boolean
125
     */
126
    public function update($record)
127
    {
128
        $hydrator = new ObjectPropertyHydrator();
129
        $values = $hydrator->extract($record);
130
        $values = $this->removeEmpty($values);
131
 
132
        $update = $this->sql->update(self::_TABLE);
133
        $update->set($values);
134
        $update->where->equalTo('id', $record->id);
135
 
136
        return $this->executeUpdate($update);
137
    }
138
 
139
    /**
140
     *
141
     * @param int $id
142
     * @return boolean
143
     */
144
    public function delete($id)
145
    {
146
        $delete = $this->sql->delete(self::_TABLE);
147
        $delete->where->equalTo('id', $id);
148
 
149
        return $this->executeDelete($delete);
150
    }
151
 
152
 
153
 
154
    /**
155
     *
156
     * @param int $companyId
157
     * @param string $search
158
     * @param int $page
159
     * @param int $records_per_page
160
     * @param string $order_field
161
     * @param string $order_direction
162
     * @return Paginator
163
     */
164
    public function fetchAllDataTableNormalByCompanyId($companyId, $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
165
    {
166
        $prototype = new SurveyCampaign();
167
        $select = $this->sql->select(self::_TABLE);
168
        $select->where->equalTo('company_id', $companyId);
169
        $select->where->equalTo('type', SurveyCampaign::TYPE_NORMAL);
170
 
171
        if($search) {
172
            $select->where->like('name', '%' . $search . '%');
173
        }
174
        $select->order($order_field . ' ' . $order_direction);
175
 
176
        //echo $select->getSqlString($this->adapter->platform); exit;
177
 
178
        $hydrator   = new ObjectPropertyHydrator();
179
        $resultset  = new HydratingResultSet($hydrator, $prototype);
180
 
181
        $adapter = new DbSelect($select, $this->sql, $resultset);
182
        $paginator = new Paginator($adapter);
183
        $paginator->setItemCountPerPage($records_per_page);
184
        $paginator->setCurrentPageNumber($page);
185
 
186
 
187
        return $paginator;
188
    }
189
 
190
    /**
191
     *
192
     * @param int $companyId
193
     * @param string $search
194
     * @param int $page
195
     * @param int $records_per_page
196
     * @param string $order_field
197
     * @param string $order_direction
198
     * @return Paginator
199
     */
200
    public function  fetchAllDataTableOrganizationClimateByCompanyId($companyId, $search, $page = 1, $records_per_page = 10, $order_field= 'name', $order_direction = 'ASC')
201
    {
202
        $prototype = new SurveyCampaign();
203
        $select = $this->sql->select(self::_TABLE);
204
        $select->where->equalTo('company_id', $companyId);
205
        $select->where->equalTo('type', SurveyCampaign::TYPE_ORGANIZATIONAL_CLIMATE);
206
 
207
        if($search) {
208
            $select->where->like('name', '%' . $search . '%');
209
        }
210
        $select->order($order_field . ' ' . $order_direction);
211
 
212
        //echo $select->getSqlString($this->adapter->platform); exit;
213
 
214
        $hydrator   = new ObjectPropertyHydrator();
215
        $resultset  = new HydratingResultSet($hydrator, $prototype);
216
 
217
        $adapter = new DbSelect($select, $this->sql, $resultset);
218
        $paginator = new Paginator($adapter);
219
        $paginator->setItemCountPerPage($records_per_page);
220
        $paginator->setCurrentPageNumber($page);
221
 
222
 
223
        return $paginator;
224
    }
152 efrain 225
 
226
 
227
    /**
228
     *
229
     * @param int $company_id
230
     * @return int
231
     */
232
    public function fetchCountByCompanyId($company_id)
233
    {
234
 
235
 
236
        $select = $this->sql->select(self::_TABLE);
237
        $select->columns(['total' => new Expression('COUNT(*)')]);
238
        $select->where->equalTo('company_id', $company_id);
239
        $select->where->equalTo('status', SurveyCampaign::STATUS_ACTIVE);
240
        $select->where->lessThanOrEqualTo('start_date', new Expression('date(now())'));
241
        $select->where->greaterThanOrEqualTo('end_date', new Expression('date(now())'));
1 efrain 242
 
152 efrain 243
 
244
        $record = $this->executeFetchOneArray($select);
245
 
246
        return $record['total'];
247
    }
248
 
1 efrain 249
 
250
}