Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
7016 efrain 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Mapper;
6
 
7
use LeadersLinked\Model\PlanningPeriod;
8
use LeadersLinked\Mapper\Common\MapperCommon;
9
use Laminas\Db\Adapter\AdapterInterface;
10
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
11
use Laminas\Db\ResultSet\HydratingResultSet;
12
use Laminas\Paginator\Adapter\DbSelect;
13
use Laminas\Paginator\Paginator;
14
 
15
 
16
class PlanningPeriodMapper extends MapperCommon
17
{
18
    const _TABLE = 'tbl_planning_periods';
19
 
20
    /**
21
     *
22
     * @var PlanningPeriodMapper
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 \LeadersLinked\Mapper\PlanningPeriodMapper
39
     */
40
    public static function getInstance($adapter)
41
    {
42
        if(self::$_instance == null) {
43
            self::$_instance = new PlanningPeriodMapper($adapter);
44
        }
45
        return self::$_instance;
46
    }
47
 
48
 
49
    /**
50
     *
51
     * @param int $company_id
52
     * @param string $search
53
     * @param int $page
54
     * @param int $records_per_page
55
     * @param string $order_field
56
     * @param string $order_direction
57
     * @return \Laminas\Paginator\Paginator
58
     */
59
    public function fetchAllDataTableByCompanyId($company_id, $search, $page = 1, $records_per_page = 10, $order_field= 'title', $order_direction = 'ASC')
60
    {
61
        $prototype = new PlanningPeriod();
62
        $select = $this->sql->select(self::_TABLE);
63
        $select->where->equalTo('company_id', $company_id);
64
 
65
 
66
 
67
        if($search) {
68
            $select->where->like('title', '%' . $search . '%');
69
        }
70
        $select->order($order_field . ' ' . $order_direction);
71
 
72
 
73
 
74
        $hydrator   = new ObjectPropertyHydrator();
75
        $resultset  = new HydratingResultSet($hydrator, $prototype);
76
 
77
        $adapter = new DbSelect($select, $this->sql, $resultset);
78
        $paginator = new Paginator($adapter);
79
        $paginator->setItemCountPerPage($records_per_page);
80
        $paginator->setCurrentPageNumber($page);
81
 
82
 
83
        return $paginator;
84
    }
85
 
86
    /**
87
     *
88
     * @param int $company_id
89
     * @return PlanningPeriod[]
90
     */
91
    public function fetchAllByCompany($company_id)
92
    {
93
        $prototype = new PlanningPeriod();
94
        $select = $this->sql->select(self::_TABLE);
95
        $select->where->equalTo('company_id', $company_id);
96
        $select->order('title');
97
 
98
 
99
        return $this->executeFetchAllObject($select, $prototype);
100
    }
101
 
102
    /**
103
     *
104
     * @param int $company_id
105
     * @return PlanningPeriod[]
106
     */
107
    public function fetchAllActiveByCompany($company_id)
108
    {
109
        $prototype = new PlanningPeriod();
110
        $select = $this->sql->select(self::_TABLE);
111
        $select->where->equalTo('company_id', $company_id);
112
        $select->where->equalTo('status', PlanningPeriod::STATUS_ACTIVE);
113
        $select->order('title');
114
 
115
 
116
        return $this->executeFetchAllObject($select, $prototype);
117
    }
118
 
119
    /**
120
     *
121
     * @param PlanningPeriod $record
122
     * @return boolean
123
     */
124
    public function insert($record)
125
    {
126
        $hydrator = new ObjectPropertyHydrator();
127
        $values = $hydrator->extract($record);
128
        $values = $this->removeEmpty($values);
129
 
130
        $values['budget'] = empty($values['budget']) ? 0 : $values['budget'];
131
        $values['progress'] = empty($values['progress']) ? 0 : $values['progress'];
132
 
133
        $insert = $this->sql->insert(self::_TABLE);
134
        $insert->values($values);
135
 
136
 
137
 
138
 
139
        //echo $insert->getSqlString($this->adapter->platform); exit;
140
 
141
        $result = $this->executeInsert($insert);
142
        if($result) {
143
            $record->id = $this->lastInsertId;
144
        }
145
 
146
        return $result;
147
 
148
    }
149
 
150
    /**
151
     *
152
     * @param PlanningPeriod $record
153
     * @return boolean
154
     */
155
    public function update($record)
156
    {
157
        $hydrator = new ObjectPropertyHydrator();
158
        $values = $hydrator->extract($record);
159
        $values = $this->removeEmpty($values);
160
 
161
        $values['budget'] = empty($values['budget']) ? 0 : $values['budget'];
162
        $values['progress'] = empty($values['progress']) ? 0 : $values['progress'];
163
 
164
        $update = $this->sql->update(self::_TABLE);
165
        $update->set($values);
166
        $update->where->equalTo('id', $record->id);
167
        return $this->executeUpdate($update);
168
    }
169
 
170
    /**
171
     *
172
     * @param PlanningPeriod $record
173
     * @return boolean
174
     */
175
    public function delete($record)
176
    {
177
        $delete = $this->sql->delete(self::_TABLE);
178
        $delete->where->equalTo('id', $record->id);
179
 
180
        return $this->executeDelete($delete);
181
    }
182
 
183
    /**
184
     *
185
     * @param string $uuid
186
     * @return PlanningPeriod
187
     */
188
    public function fetchOneByUuid($uuid)
189
    {
190
        $prototype = new PlanningPeriod();
191
        $select = $this->sql->select(self::_TABLE);
192
        $select->where->equalTo('uuid', $uuid);
193
 
194
        return $this->executeFetchOneObject($select, $prototype);
195
    }
196
 
197
 
198
}