PluginProbe ʕ •ᴥ•ʔ
VikAppointments Services Booking Calendar / trunk
VikAppointments Services Booking Calendar vtrunk
trunk 1.2.17 1.2.18 1.2.19
vikappointments / admin / views / serworkdays / view.html.php
vikappointments / admin / views / serworkdays Last commit date
tmpl 1 month ago index.html 4 years ago view.html.php 2 years ago
view.html.php
230 lines
1 <?php
2 /**
3 * @package VikAppointments
4 * @subpackage core
5 * @author E4J s.r.l.
6 * @copyright Copyright (C) 2021 E4J s.r.l. All Rights Reserved.
7 * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
8 * @link https://vikwp.com
9 */
10
11 // No direct access
12 defined('ABSPATH') or die('No script kiddies please!');
13
14 /**
15 * VikAppointments services working days view.
16 *
17 * @since 1.0
18 */
19 class VikAppointmentsViewserworkdays extends JViewVAP
20 {
21 /**
22 * VikAppointments view display method.
23 *
24 * @return void
25 */
26 function display($tpl = null)
27 {
28 $app = JFactory::getApplication();
29 $input = $app->input;
30 $dbo = JFactory::getDbo();
31
32 $filters = array();
33 $filters['id_service'] = $input->getUint('id_service', 0);
34 $filters['id_employee'] = $input->getUint('id_employee', 0);
35 $filters['status'] = $app->getUserStateFromRequest('vapserwd.status', 'status', -1, 'int');
36 $filters['type'] = $app->getUserStateFromRequest('vapserwd.type', 'type', -1, 'int');
37 $filters['date'] = $app->getUserStateFromRequest('vapserwd.date', 'date', '', 'string');
38
39 // get service name
40 $q = $dbo->getQuery(true)
41 ->select($dbo->qn('name'))
42 ->from($dbo->qn('#__vikappointments_service'))
43 ->where($dbo->qn('id') . ' = ' . $filters['id_service']);
44
45 $dbo->setQuery($q, 0, 1);
46 $serviceName = $dbo->loadResult();
47
48 if (!$serviceName)
49 {
50 // service not found
51 $app->redirect('index.php?option=com_vikappointments&view=services');
52 }
53
54 // Set the toolbar
55 $this->addToolBar($serviceName);
56
57 // get employees list
58 $q = $dbo->getQuery(true)
59 ->select($dbo->qn(array('e.id', 'e.nickname')))
60 ->from($dbo->qn('#__vikappointments_employee', 'e'))
61 ->leftjoin($dbo->qn('#__vikappointments_ser_emp_assoc', 'a') . ' ON ' . $dbo->qn('e.id') . ' = ' . $dbo->qn('a.id_employee'))
62 ->where($dbo->qn('a.id_service') . ' = ' . $filters['id_service'])
63 ->order($dbo->qn('a.ordering') . ' ASC');
64
65 $dbo->setQuery($q);
66 $employees = $dbo->loadObjectList();
67
68 if (!$employees)
69 {
70 // no employees for this service
71 $app->enqueueMessage(JText::translate('VAPNOSERWORKDAYSERR'), 'error');
72 $app->redirect('index.php?option=com_vikappointments&task=service.edit&cid[]=' . $filters['id_service'] . '#service_assoc');
73 }
74
75 if (empty($filters['id_employee']))
76 {
77 $filters['id_employee'] = $employees[0]->id;
78 }
79
80 // get working days
81
82 $rows = array();
83
84 $lim = $app->getUserStateFromRequest('com_vikappointments.limit', 'limit', $app->get('list_limit'), 'uint');
85 $lim0 = $this->getListLimitStart($filters);
86 $navbut = "";
87
88 $today = strtotime('00:00:00', VikAppointments::now());
89
90 $q = $dbo->getQuery(true)
91 ->select('SQL_CALC_FOUND_ROWS *')
92 ->from($dbo->qn('#__vikappointments_emp_worktime'))
93 ->where(array(
94 $dbo->qn('id_employee') . ' = ' . $filters['id_employee'],
95 $dbo->qn('id_service') . ' = ' . $filters['id_service'],
96 ))
97 ->order(array(
98 $dbo->qn('ts') . ' ASC',
99 $dbo->qn('day') . ' ASC',
100 $dbo->qn('fromts') . ' ASC',
101 $dbo->qn('closed') . ' ASC',
102 ));
103
104 if ($filters['status'] != -1)
105 {
106 $q->where($dbo->qn('closed') . ' <> ' . $filters['status']);
107 }
108
109 if ($filters['type'] != -1)
110 {
111 $cmp = ($filters['type'] != 1 ? '<>' : '=');
112
113 $q->where($dbo->qn('ts') . " $cmp -1");
114 }
115
116 if ($filters['date'])
117 {
118 // get date filter
119 $date = VAPDateHelper::getDate($filters['date']);
120
121 $q->andWhere(array(
122 $dbo->qn('day') . ' = ' . (int) $date->format('w') . ' AND ' . $dbo->qn('ts') . ' = -1',
123 $dbo->qn('tsdate') . ' = ' . $dbo->q($date->toSql()),
124 ), 'OR');
125
126 // unset limits
127 $lim0 = 0;
128 $lim = null;
129 }
130 else
131 {
132 // do not show dates in the past
133 $q->andWhere(array(
134 $dbo->qn('ts') . ' = -1',
135 $dbo->qn('ts') . ' >= ' . $today,
136 ), 'OR');
137 }
138
139 $dbo->setQuery($q, $lim0, $lim);
140 $dbo->execute();
141
142 // assert limit used for list query
143 $this->assertListQuery($lim0, $lim);
144
145 if ($dbo->getNumRows())
146 {
147 $rows = $dbo->loadAssocList();
148
149 if ($lim)
150 {
151 $dbo->setQuery('SELECT FOUND_ROWS();');
152 jimport('joomla.html.pagination');
153 $pageNav = new JPagination($dbo->loadResult(), $lim0, $lim);
154 $navbut = JLayoutHelper::render('blocks.pagination', ['pageNav' => $pageNav]);
155 }
156 }
157
158 if ($filters['date'])
159 {
160 $flag = false;
161
162 foreach ($rows as $r)
163 {
164 // look for a special working day
165 $flag = $flag || $r['ts'] != -1;
166 }
167
168 if ($flag)
169 {
170 // exclude recurring working days
171 $rows = array_values(array_filter($rows, function($r)
172 {
173 return $r['ts'] != -1;
174 }));
175 }
176 }
177
178 $this->rows = $rows;
179 $this->navbut = $navbut;
180 $this->employees = $employees;
181 $this->filters = $filters;
182
183 // display the template (default.php)
184 parent::display($tpl);
185 }
186
187 /**
188 * Setting the toolbar.
189 *
190 * @return void
191 */
192 protected function addToolBar($name)
193 {
194 // add menu title and some buttons to the page
195 JToolBarHelper::title(JText::sprintf('VAPSERWORKDAYSTITLE', $name), 'vikappointments');
196
197 $user = JFactory::getUser();
198
199 JToolBarHelper::back('JTOOLBAR_BACK', 'index.php?option=com_vikappointments&view=services');
200
201 if ($user->authorise('core.create', 'com_vikappointments'))
202 {
203 JToolBarHelper::addNew('serworkday.add', JText::translate('VAPNEW'));
204 }
205
206 if ($user->authorise('core.edit', 'com_vikappointments'))
207 {
208 JToolBarHelper::editList('serworkday.edit', JText::translate('VAPEDIT'));
209 }
210
211 if ($user->authorise('core.delete', 'com_vikappointments'))
212 {
213 JToolBarHelper::deleteList(VikAppointments::getConfirmSystemMessage(), 'serworkday.delete', JText::translate('VAPDELETE'));
214 JToolBarHelper::custom('serworkday.restore', 'refresh', 'refresh', JText::translate('VAPRESTORE'), false);
215 }
216 }
217
218 /**
219 * Checks for advanced filters set in the request.
220 *
221 * @return boolean True if active, otherwise false.
222 */
223 protected function hasFilters()
224 {
225 return $this->filters['type'] != -1
226 || $this->filters['status'] != -1
227 || $this->filters['date'];
228 }
229 }
230