source: trunk/workflow/inc/local/classes/class.wf_orgchart.php @ 1131

Revision 1131, 38.6 KB checked in by asaikawa, 15 years ago (diff)

Ticket #578 - Inserida clausula ORDER BY na consulta do metodo getOrganizationCostCenter do organograma.

  • Property svn:executable set to *
Line 
1<?php
2/**
3 * Classe que permite aos processos workflow fazer consultas ao Organograma
4 *
5 * @author Sidnei Augusto Drovetto Junior - drovetto@gmail.com
6 * @version 1.2
7 * @license http://www.gnu.org/copyleft/gpl.html GPL
8 * @package Workflow
9 * @subpackage local
10 */
11class wf_orgchart
12{
13        /**
14         * @var object $db Link para o Banco de Dados do Workflow.
15         * @access private
16         */
17        var $db;
18
19        /**
20         * Construtor da classe wf_orgchart
21         * @return object
22         * @access public
23         */
24        function wf_orgchart()
25        {
26                $this->db = &$GLOBALS['workflow']['workflowObjects']->getDBWorkflow()->Link_ID;
27                $this->db->setFetchMode(ADODB_FETCH_ASSOC);
28        }
29
30        /**
31         * Busca uma organização pelo seu ID.
32         *
33         * Este método irá procurar uma organização na tabela de organizações, pelo seu ID, e retornará seu dados básicos.
34         * @param int $organizationID O ID da organização.
35         * @return array Uma array associativa contendo os atributos de uma organização:
36         * - organizacao_id
37         * - nome: o nome abreviado da organização
38         * - descrição: o nome completo da organização
39         * - ativa: se a organização está ativa ou não
40         * @access public
41         */
42        function getOrganization($organizationID)
43        {
44                $query = "SELECT organizacao_id, nome, descricao, ativa" .
45                                 "  FROM organizacao" .
46                                 " WHERE (organizacao_id = ?)";
47
48                $result = $this->db->query($query, array($organizationID));
49                if (!$result)
50                        return false;
51
52                $output = $result->fetchRow();
53
54                return $output;
55        }
56
57        /**
58         * Busca uma organização pelo seu nome.
59         *
60         * Este método irá buscar os dados básicos de uma organização, procurando pela sua sigla.
61         * @param string $name A sigla da organização.
62         * @return array Uma array associativa contendo os atributos de uma organização:
63         * - organizacao_id
64         * - nome: a sigla da organização
65         * - descricao: o nome completo
66         * - ativa: se a organização está ativa ou não
67         * @access public
68         */
69        function getOrganizationByName($name)
70        {
71                $query = "SELECT organizacao_id, nome, descricao, ativa" .
72                                 "  FROM organizacao" .
73                                 " WHERE (UPPER(nome) = UPPER(?))";
74
75                $result = $this->db->query($query, array($name));
76                if (!$result)
77                        return false;
78
79                $output = $result->fetchRow();
80
81                return $output;
82        }
83
84        /**
85         * Busca as áreas de uma organização
86         *
87         * Este método irá buscar na tabela de áreas, todas as áreas que pertencem à organização solicitada.
88         * @param int $organizationID O ID da organização.
89         * @return array Uma array seqüencial contendo as áreas de uma organização. Cada linha do array conterá:
90         * - organizacao_id
91         * - area_id
92         * - area_status_id: corresponde ao nível hierárquico da area
93         * - superior_area_id: o id da área acima da atual
94         * - centro_custo_id: o id do centro de custo da area
95         * - titular_funcionario_id: o id do funcionario titular da área. Corresponde ao uidNumber do funcionário no catálogo Ldap.
96         * - substituto_funcionario_id: o id do funcionario que está substituindo o titular temporariamente
97         * - sigla: sigla da area
98         * - descrição: nome completo da area
99         * - ativa: indicativo de situação da area, sendo 's' ativa, e 'n' inativa
100         * - auxiliar_funcionario_id: id da secretária da área
101         * @access public
102         */
103        function getOrganizationAreas($organizationID)
104        {
105                $query = "SELECT organizacao_id, area_id, area_status_id, " .
106                                 "       superior_area_id, centro_custo_id, titular_funcionario_id," .
107                                 "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" .
108                                 "  FROM area" .
109                                 " WHERE (organizacao_id = ?)" .
110                                 " ORDER BY sigla, descricao";
111
112                $result = $this->db->query($query, array($organizationID));
113                if (!$result)
114                        return false;
115
116                $output = $result->GetArray(-1);
117
118                return $output;
119        }
120
121        /**
122         * Busca os status de área de uma organização.
123         *
124         * O status de área deve ser compreendido como um nível hirárquico das áreas da organização.
125         * Por exemplo: presidência, assessoria, diretoria, gerência, divisão, etc.
126         * @param int $organizationID O ID da organização.
127         * @return array Uma array de arrays associativas contendo os atributos dos status de área. Cada linha do array conterá:
128         * - area_status_id
129         * - organização_id
130         * - descrição
131         * - nível: a posição hierárquica do nível no organograma. Por exemplo: 1 - presidencia, 2 - assessoria, etc
132         * @access public
133         */
134        function getOrganizationAreaStatus($organizationID)
135        {
136                $query = "SELECT area_status_id, organizacao_id, descricao, nivel" .
137                                 "  FROM area_status" .
138                                 " WHERE (organizacao_id = ?)";
139
140                $result = $this->db->query($query, array($organizationID));
141                if (!$result)
142                        return false;
143
144                $output = $result->GetArray(-1);
145
146                return $output;
147        }
148
149        /**
150         * Busca as localidades de uma organização.
151         *
152         * As localidades de uma organização representam o local físico de trabalho dos funcionários.
153         * @param int $organizationID O ID da organização.
154         * @return array Uma array de arrays associativas contendo os atributos das localidades. Cada linha do array conterá:
155         * - organizacao_id
156         * - localidade_id
157         * - centro_custo_id
158         * - descricao: o nome da localidade
159         * @access public
160         */
161        function getOrganizationLocals($organizationID)
162        {
163                $query = "SELECT organizacao_id, localidade_id, centro_custo_id, descricao" .
164                                 "  FROM localidade" .
165                                 " WHERE (organizacao_id = ?)";
166
167                $result = $this->db->query($query, array($organizationID));
168                if (!$result)
169                        return false;
170
171                $output = $result->GetArray(-1);
172
173                return $output;
174        }
175
176        /**
177         * Busca os centros de custo de uma organização.
178         *
179         * Este método retornará todos os centros de custo de uma organização.
180         * Centros de custo são como códigos contábeis para faturamento de serviços.
181         * @param int $organizationID O ID da organização.
182         * @return array Uma array de arrays associativas contendo os atributos dos centros de custo. Cada linha do array conterá:
183         * - organizacao_id
184         * - centro_custo_id
185         * - nm_centro_custo: número do centro de custo
186         * - grupo: estrutura numerica a qual o centro de custo pertence
187         * - descrição: nome do centro de custo
188         * @access public
189         */
190        function getOrganizationCostCenters($organizationID)
191        {
192                $query = "SELECT organizacao_id, centro_custo_id, nm_centro_custo, grupo, descricao" .
193                                 "  FROM centro_custo" .
194                                 " WHERE (organizacao_id = ?)" .
195                                 " ORDER BY descricao";
196
197                $result = $this->db->query($query, array($organizationID));
198                if (!$result)
199                        return false;
200
201                $output = $result->GetArray(-1);
202
203                return $output;
204        }
205
206        /**
207         * Lista todas as categorias possíveis para um funcionário em uma organização.
208         *
209         * Este método listará a tabela de categorias.
210         * Por exemplo: funcionário, estagiário, terceirizado, etc.
211         * @param int $organizationID O ID da organização.
212         * @return array Uma array de arrays associativas contendo os atributos das categorias. Cada linha do array conterá:
213         * - funcionario_categoria_id: o id da categoria
214         * - descricao
215         * - organizacao_id
216         * @access public
217         */
218        function getOrganizationEmployeeCategories($organizationID)
219        {
220                $query = "SELECT funcionario_categoria_id, descricao, organizacao_id" .
221                                 "  FROM funcionario_categoria" .
222                                 "      WHERE organizacao_id = ?" .
223                                 "  ORDER BY funcionario_categoria_id";
224
225                $result = $this->db->query($query, array((int) $organizationID));
226                if (!$result)
227                        return false;
228
229                $output = $result->GetArray(-1);
230
231                return $output;
232        }
233
234        /**
235         * Lista todas as organizações do Organograma.
236         *
237         * Este método irá listar a tabela de organizações
238         * O modelo de dados do organograma foi construído para abrigar mais de uma organização
239         * @return um array de arrays associativas contendo a lista de organizações. Cada linha do array conterá:
240         * - organizacao_id
241         * - nome: sigla da organizacao
242         * - descricao
243         * - ativa: se a organização está ativa ou não
244         * @access public
245         */
246        function getOrganizations()
247        {
248                $query = "SELECT organizacao_id, nome, descricao, ativa" .
249                                 "  FROM organizacao";
250
251                $result = $this->db->query($query);
252                if (!$result)
253                        return false;
254
255                $output = $result->GetArray(-1);
256
257                return $output;
258        }
259
260
261        /**
262         * Busca uma área pelo seu ID.
263         *
264         * Este método irá retornar os dados de uma área buscando pelo seu ID.
265         * @param int $areaID O ID da área.
266         * @return array Uma array associativa contendo os atributos de uma área:
267         * - organizacao_id
268         * - area_id
269         * - area_status: o nível hierárquico da área
270         * - superior_area_id: o id da área acima da atual
271         * - centro_custo_id: o centro de custo da área
272         * - titular_funcionario_id: o id do chefe da área
273         * - substituto_funcionario_id: o id do funcionario que esta substituindo o titular temporariamente
274         * - sigla
275         * - descicao
276         * - ativa: indicativo de situação da área: 's' ativa, 'n' inativa
277         * - auxiliar_funcionario_id: o id da secretária da área
278         * @access public
279         */
280        function getArea($areaID)
281        {
282                $query = "SELECT organizacao_id, area_id, area_status_id, " .
283                                 "       superior_area_id, centro_custo_id, titular_funcionario_id," .
284                                 "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" .
285                                 "  FROM area" .
286                                 " WHERE (area_id = ?)";
287
288                $result = $this->db->query($query, array($areaID));
289                if (!$result)
290                        return false;
291
292                $output = $result->fetchRow();
293
294                return $output;
295        }
296
297        /**
298         * Busca uma área pela sua sigla.
299         *
300         * Este método retornará os atributos de uma área buscando pela sua sigla.
301         * @param string $acronym A sigla da área.
302         * @param int $organizationID O id da organização
303         * @return array Uma array associativa contendo os atributos de uma área:
304         * - organizacao_id
305         * - area_id
306         * - area_status: o nível hierárquico da área
307         * - superior_area_id: o id da área acima da atual
308         * - centro_custo_id: o centro de custo da área
309         * - titular_funcionario_id: o id do chefe da área
310         * - substituto_funcionario_id: o id do funcionario que esta substituindo o titular temporariamente
311         * - sigla
312         * - descicao
313         * - ativa: indicativo de situação da área: 's' ativa, 'n' inativa
314         * - auxiliar_funcionario_id: o id da secretária da área
315         * @access public
316         */
317        function getAreaByName($acronym, $organizationID = 1)
318        {
319                $query = "SELECT organizacao_id, area_id, area_status_id, " .
320                                 "       superior_area_id, centro_custo_id, titular_funcionario_id," .
321                                 "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" .
322                                 "  FROM area" .
323                                 " WHERE (UPPER(sigla) = UPPER(?) and (organizacao_id = ?))";
324
325                $result = $this->db->query($query, array($acronym, (int) $organizationID));
326                if (!$result)
327                        return false;
328
329                $output = $result->fetchRow();
330
331                return $output;
332        }
333
334        /**
335         * Busca as áreas que possuem um determinado status de área.
336         *
337         * Este método irá retornar todas as áreas cujo status (nível hierárquico) seja o solicitado.
338         * @param int $areaStatusID O ID do status de área.
339         * @return array Uma array de arrays associativas contendo os atributos de uma área. Cada linha do array conterá:
340         * - organizacao_id
341         * - area_id
342         * - area_status: o nível hierárquico da área
343         * - superior_area_id: o id da área acima da atual
344         * - centro_custo_id: o centro de custo da área
345         * - titular_funcionario_id: o id do chefe da área
346         * - substituto_funcionario_id: o id do funcionario que esta substituindo o titular temporariamente
347         * - sigla
348         * - descicao
349         * - ativa: indicativo de situação da área: 's' ativa, 'n' inativa
350         * - auxiliar_funcionario_id: o id da secretária da área
351         * @access public
352         */
353        function getAreaByStatus($areaStatusID)
354        {
355                $result = array();
356
357                $query = "SELECT organizacao_id, area_id, area_status_id, " .
358                                 "       superior_area_id, centro_custo_id, titular_funcionario_id," .
359                                 "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" .
360                                 "  FROM area" .
361                                 " WHERE (area_status_id = ?)";
362
363                $result = $this->db->query($query, array($areaStatusID));
364                if (!$result)
365                        return false;
366
367                $output = $result->GetArray(-1);
368
369                return $output;
370        }
371
372        /**
373         * Busca várias áreas através de uma array de IDs
374         *
375         * Este método irá buscar de uma vez só os dados de mais de uma área.
376         * @param array $areaIDs Array com os IDs das áreas
377         * @return array Um array de arrays associativos contendo os atributos de várias áreas. Cada linha do array conterá:
378         * - organizacao_id
379         * - area_id
380         * - area_status: o nível hierárquico da área
381         * - superior_area_id: o id da área acima da atual
382         * - centro_custo_id: o centro de custo da área
383         * - titular_funcionario_id: o id do chefe da área
384         * - substituto_funcionario_id: o id do funcionario que esta substituindo o titular temporariamente
385         * - sigla
386         * - descicao
387         * - ativa: indicativo de situação da área: 's' ativa, 'n' inativa
388         * - auxiliar_funcionario_id: o id da secretária da área
389         * @access public
390         */
391        function getAreas($areaIDs)
392        {
393                if (!is_array($areaIDs))
394                        return false;
395
396                $areas = implode(', ', $areaIDs);
397
398                $query = "SELECT organizacao_id, area_id, area_status_id, " .
399                                 "       superior_area_id, centro_custo_id, titular_funcionario_id," .
400                                 "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" .
401                                 "  FROM area" .
402                                 " WHERE area_id IN ($areas)" .
403                                 " ORDER BY sigla, descricao";
404
405                // A execução é realizada sem o segundo parâmetro pois este não pode estar entre aspas
406                $result = $this->db->query($query);
407                if (!$result)
408                        return false;
409
410                $output = $result->GetArray(-1);
411                return $output;
412        }
413
414        /**
415         * Busca o ID da área superior a uma dada área.
416         *
417         * Este método irá buscar a área imediatamente superior à solicitada, ou então subirá na hierarquia até chegar no nível solicitado.
418         * @param int $areaID O ID da área da qual se quer saber a área superior.
419         * @param int $areaStatusID O ID do status de área (nível) da área pai. Utilizar -1 caso se queira a área imediatamente superior.
420         * - Por exemplo: área atual está no nível 5 (Divisão) e se quer buscar a área de nivel 3 (Diretoria).
421         * @return int O ID da área que é superior à área informada.
422         * @access public
423         */
424        function getParentAreaID($areaID, $areaStatusID = -1)
425        {
426                $query  = "SELECT area_id, area_status_id" .
427                                  "  FROM area" .
428                                  " WHERE area_id = (SELECT superior_area_id" .
429                                  "                    FROM area" .
430                                  "                   WHERE (area_id = ?))";
431
432                $result = $this->db->query($query, array($areaID));
433                if (!$result)
434                        return false;
435
436                $output = $result->fetchRow();
437                if (!$output)
438                        return false;
439
440                if (($areaStatusID == -1) || ($output['area_status_id'] == $areaStatusID))
441                        return $output['area_id'];
442                else
443                        return $this->getParentAreaID($output['area_id'], $areaStatusID);
444        }
445
446        /**
447         * Busca as áreas abaixo de uma determinada área.
448         *
449         * Este método irá buscar as áreas imediatamente inferiores à solicitada, não descendo nos próximos níveis da hierarquia.
450         * @param int $parentAreaID O ID da área da qual se quer saber as áreas imediatamente inferiores.
451         * @param boolean $onlyActiveAreas Valor lógico que, caso verdadeiro, faz com que o método retorne somente as áreas ativas
452         * @return array Um array de arrays associativos contendo os atributos de várias áreas. Cada linha do array conterá:
453         * - organizacao_id
454         * - area_id
455         * - area_status: o nível hierárquico da área
456         * - superior_area_id: o id da área acima da atual
457         * - centro_custo_id: o centro de custo da área
458         * - titular_funcionario_id: o id do chefe da área
459         * - substituto_funcionario_id: o id do funcionario que esta substituindo o titular temporariamente
460         * - sigla
461         * - descicao
462         * - ativa: indicativo de situação da área: 's' ativa, 'n' inativa
463         * - auxiliar_funcionario_id: o id da secretária da área
464         * @access public
465         */
466        function getSubAreasByParentAreaID($parentAreaID, $onlyActiveAreas = false)
467        {
468                $query = "SELECT organizacao_id, area_id, area_status_id, " .
469                                 "       superior_area_id, centro_custo_id, titular_funcionario_id," .
470                                 "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" .
471                                 "  FROM area" .
472                                 " WHERE superior_area_id = ?";
473
474                if ($onlyActiveAreas){
475                        $query .= " AND ativa = 'S'";
476                }
477                $query .= " ORDER BY sigla, descricao";
478
479                $result = $this->db->query($query, array($parentAreaID));
480                if (!$result)
481                        return false;
482
483                $output = $result->GetArray(-1);
484                return $output;
485        }
486
487        /**
488         * Busca um status de área pelo seu ID.
489         *
490         * Procura na tabela de status de área (nível hierárquico de áreas) o registro que corresponde ao ID solicitado.
491         * @param int $areaStatusID O ID do status de área.
492         * @return array Uma array associativa contendo os atributos de um status de área:
493         * - area_status_id
494         * - organizacao_id
495         * - descricao: nome do nível hierárquivo. Por exemplo: presidência, assessoria, diretoria, gerência, etc.
496         * - nivel: valor numérico que identifica o nível: 1, 2, 3, ...
497         * @access public
498         */
499        function getAreaStatus($areaStatusID)
500        {
501                $query = "SELECT area_status_id, organizacao_id, descricao, nivel" .
502                                 "  FROM area_status" .
503                                 " WHERE (area_status_id = ?)";
504
505                $result = $this->db->query($query, array($areaStatusID));
506                if (!$result)
507                        return false;
508
509                $output = $result->fetchRow();
510
511                return $output;
512        }
513
514        /**
515         * Busca um status de área pelo seu nome.
516         *
517         * Este método irá retornar os dados de um status, procurando o registro na tabela através do seu nome.
518         * @param string $description O nome do status de área.
519         * @param int $organizationID O id da organização.
520         * @return array Uma array associativa contendo os atributos de um status de área:
521         * - area_status_id
522         * - organizacao_id
523         * - descricao: nome do nível hierárquivo. Por exemplo: presidência, assessoria, diretoria, gerência, etc.
524         * - nivel: valor numérico que identifica o nível: 1, 2, 3, ...
525         * @access public
526         */
527        function getAreaStatusByName($description, $organizationID = 1)
528        {
529                $query = "SELECT area_status_id, organizacao_id, descricao, nivel" .
530                                 "  FROM area_status" .
531                                 " WHERE (UPPER(descricao) = UPPER(?) and (organizacao_id = ?))";
532
533                $result = $this->db->query($query, array($description, (int) $organizationID));
534                if (!$result)
535                        return false;
536
537                $output = $result->fetchRow();
538
539                return $output;
540        }
541
542        /**
543         * Busca um status de área pelo seu nível.
544         *
545         * Este método irá retornar os dados de um status, procurando o registro na tabela através do seu nível.
546         * @param int $level O nível do status de área.
547         * @param int $organizationID O id da organização.
548         * @return array Uma array associativa contendo os atributos de um status de área:
549         * - area_status_id
550         * - organizacao_id
551         * - descricao: nome do nível hierárquivo. Por exemplo: presidência, assessoria, diretoria, gerência, etc.
552         * - nivel: valor numérico que identifica o nível: 1, 2, 3, ...
553         * @access public
554         */
555        function getAreaStatusByLevel($level, $organizationID = 1)
556        {
557                $query = "SELECT area_status_id, organizacao_id, descricao, nivel" .
558                                 " FROM area_status" .
559                                 " WHERE (nivel = ?) AND (organizacao_id = ?)";
560
561                $result = $this->db->query($query, array((int) $level, (int) $organizationID));
562                if (!$result)
563                        return false;
564
565                $output = $result->fetchRow();
566
567                return $output;
568        }
569
570        /**
571         * Busca o ID do titular de uma área.
572         *
573         * Este método busca uma área e retorna o atributo titular_funcionario_id
574         * @param int $areaID O ID da área.
575         * @return int O ID do titular da área.
576         * @access public
577         */
578        function getAreaSupervisorID($areaID)
579        {
580                $area = $this->getArea($areaID);
581                if (!$area)
582                        return false;
583
584                return $area['titular_funcionario_id'];
585        }
586
587        /**
588         * Busca o ID do substituto de uma área.
589         *
590         * Este método irá buscar uma área e retornar o atributo substituto_funcionario_id.
591         * Note que o substituro é um campo opcional na área e poderá retornar vazio.
592         * @param int $areaID O ID da área.
593         * @return int O ID do substituto da área.
594         * @access public
595         */
596        function getAreaBackupSupervisorID($areaID)
597        {
598                $area = $this->getArea($areaID);
599                if (!$area)
600                        return false;
601
602                return $area['substituto_funcionario_id'];
603        }
604
605        /**
606         * Busca o ID do auxiliar administrativo de uma área.
607         *
608         * Este método busca uma área e retorna o atributo auxiliar_funcionario_id
609         * Nem todas as áreas possuem funcionários auxiliares (secretárias)
610         * @param int $areaID O ID da área.
611         * @return int O ID do auxiliar administrativo da área.
612         * @access public
613         */
614        function getAreaAssistantID($areaID)
615        {
616                $area = $this->getArea($areaID);
617                if (!$area)
618                        return false;
619
620                return $area['auxiliar_funcionario_id'];
621        }
622
623        /**
624         * Busca o ID do titular atual de uma área.
625         *
626         * Este método irá buscar uma área e caso haja um substituto, este será o titular atual; caso contrário, o titular atual é o próprio titular da área.
627         * @param int $areaID O ID da área.
628         * @return int O ID do titular atual da área, podendo ser um dos campos abaixo:
629         * - substituto_funcionario_id
630         * - titular_funcionario_id
631         * @access public
632         */
633        function getAreaCurrentSupervisorID($areaID)
634        {
635                $area = $this->getArea($areaID);
636                if (!$area)
637                        return false;
638
639                return is_null($area['substituto_funcionario_id']) ? $area['titular_funcionario_id'] : $area['substituto_funcionario_id'];
640        }
641
642        /**
643         * Busca o ID do responsável administrativo atual de uma área.
644         *
645         * A precedência para definir quem é o responsável administrativo é: auxiliar administrativo, substituto e titular.
646         * @param int $areaID O ID da área.
647         * @return int O ID do responsável administrativo da área, podendo ser um dos atributos abaixo:
648         * - auxiliar_funcionario_id
649         * - substituto_funcionario_id
650         * - titular_funcionario_id
651         * @access public
652         */
653        function getAreaCurrentAdministrativeResponsibleID($areaID)
654        {
655                $area = $this->getArea($areaID);
656                if (!$area)
657                        return false;
658
659                return !is_null($area['auxiliar_funcionario_id']) ? $area['auxiliar_funcionario_id'] : (!is_null($area['substituto_funcionario_id']) ? $area['substituto_funcionario_id'] : $area['titular_funcionario_id']);
660        }
661
662        /**
663         * Busca uma localidade pelo seu ID.
664         *
665         * Este método listará os atributos e uma localidade. Lembrando que localidade também pode ser entendida como o local físico de trabalho.
666         * @param int $localID O ID da localidade.
667         * @return array Uma array associativa contendo os atributos de uma localidade:
668         * - organizacao_id
669         * - localidade_id
670         * - centro_custo_id
671         * - descricao
672         * @access public
673         */
674        function getLocal($localID)
675        {
676                $query = "SELECT organizacao_id, localidade_id, centro_custo_id, descricao" .
677                                 "  FROM localidade" .
678                                 " WHERE (localidade_id = ?)";
679
680                $result = $this->db->query($query, array($localID));
681                if (!$result)
682                        return false;
683
684                $output = $result->fetchRow();
685
686                return $output;
687        }
688
689        /**
690         * Busca uma localidade pelo seu nome.
691         *
692         *
693         * @param string $description O nome da localidade.
694         * @param int $organizationID O id da organização.
695         * @return array Uma array associativa contendo os atributos de uma localidade.
696         * @access public
697         */
698        function getLocalByName($description, $organizationID = 1)
699        {
700                $query = "SELECT organizacao_id, localidade_id, centro_custo_id, descricao" .
701                                 "  FROM localidade" .
702                                 " WHERE (UPPER(descricao) = UPPER(?) and (organizacao_id = ?))";
703
704                $result = $this->db->query($query, array($description, (int) $organizationID));
705                if (!$result)
706                        return false;
707
708                $output = $result->fetchRow();
709
710                return $output;
711        }
712
713        /**
714         * Busca um centro de custo pelo seu ID.
715         *
716         * Este método irá mostrar os atributos de um centro de custo, buscando na tabela pelo seu id.
717         * @param int $costCenterID O ID do centro de custo.
718         * @return array Uma array associativa contendo os atributos de um centro de custo:
719         * - organizacao_id
720         * - centro_custo_id
721         * - nm_centro_custo: número do centro de custo
722         * - grupo: estrutura numerica a qual o centro de custo pertence
723         * - descrição: nome do centro de custo
724         * @access public
725         */
726        function getCostCenter($costCenterID)
727        {
728                $query = "SELECT organizacao_id, centro_custo_id, nm_centro_custo, grupo, descricao" .
729                                 "  FROM centro_custo" .
730                                 " WHERE (centro_custo_id  = ?)";
731
732                $result = $this->db->query($query, array($costCenterID));
733                if (!$result)
734                        return false;
735
736                $output = $result->fetchRow();
737
738                return $output;
739        }
740
741        /**
742         * Busca um centro de custo pelo seu número.
743         *
744         * Este método retornará os atributos de um centro de custo buscando pelo seu ID.
745         * @param int $number O número do centro de custo.
746         * @param ind $organizationID O id da organização
747         * @return array Uma array associativa contendo os atributos de um centro de custo:
748         * - organizacao_id
749         * - centro_custo_id
750         * - nm_centro_custo: número do centro de custo
751         * - grupo: estrutura numerica a qual o centro de custo pertence
752         * - descrição: nome do centro de custo
753         * @access public
754         */
755        function getCostCenterByNumber($number, $organizationID = 1)
756        {
757                $query = "SELECT organizacao_id, centro_custo_id, nm_centro_custo, grupo, descricao" .
758                                 "  FROM centro_custo" .
759                                 " WHERE ((nm_centro_custo = ?) and (organizacao_id = ?))";
760
761                $result = $this->db->query($query, array($number, (int) $organizationID));
762                if (!$result)
763                        return false;
764
765                $output = $result->fetchRow();
766
767                return $output;
768        }
769
770        /**
771         * Busca um centro de custo pelo seu nome.
772         *
773         * Este método irá retornar os atributos de um centro de custo buscando pelo seu nome.
774         * @param string $description O nome do centro de custo.
775         * @param int $organizationID O id da organização
776         * @return array Uma array associativa contendo os atributos de um centro de custo.
777         * - organizacao_id
778         * - centro_custo_id
779         * - nm_centro_custo: número do centro de custo
780         * - grupo: estrutura numerica a qual o centro de custo pertence
781         * - descrição: nome do centro de custo
782         *       * @access public
783         */
784        function getCostCenterByName($description, $organizationID = 1)
785        {
786                $query = "SELECT organizacao_id, centro_custo_id, nm_centro_custo, grupo, descricao" .
787                                 "  FROM centro_custo" .
788                                 " WHERE (UPPER(descricao) = UPPER(?) and (organizacao_id = ?))";
789
790                $result = $this->db->query($query, array($description, (int) $organizationID));
791                if (!$result)
792                        return false;
793
794                $output = $result->fetchRow();
795
796                return $output;
797        }
798
799        /**
800         * Busca as informações de categoria a partir do ID.
801         *
802         * Este método irá retornar os atributos de uma linha da tabela de categorias de funcionários.
803         * @param int $categoryID O ID da categoria.
804         * @return array Uma array associativa contendo os atributos da categoria:
805         * - funcionario_categoria_id
806         * - descricao
807         * - organizacao_id
808         * @access public
809         */
810        function getEmployeeCategory($categoryID)
811        {
812                $query  = "SELECT funcionario_categoria_id, descricao, organizacao_id" .
813                                  "  FROM funcionario_categoria" .
814                                  " WHERE (funcionario_categoria_id = ?)";
815
816                $result = $this->db->query($query, array($categoryID));
817                if (!$result)
818                        return false;
819
820                $output = $result->fetchRow();
821
822                return $output;
823        }
824
825        /**
826         * Busca uma categoria a partir da sua descrição.
827         *
828         * Este método irá mostrar os atributos de uma categoria, buscando pela sua descrição.
829         * @param string $description O nome da categoria.
830         * @param int $organizationID O id da organização
831         * @return array Uma array associativa contendo os atributos de uma categoria:
832         * - funcionario_categoria_id
833         * - descricao
834         * - organizacao_id
835         * @access public
836         */
837        function getEmployeeCategoryByName($description, $organizationID = 1)
838        {
839                $query = "SELECT funcionario_categoria_id, descricao, organizacao_id" .
840                                 "  FROM funcionario_categoria" .
841                                 " WHERE (UPPER(descricao) = UPPER(?) and (organizacao_id = ?))";
842
843                $result = $this->db->query($query, array($description, (int) $organizationID));
844                if (!$result)
845                        return false;
846
847                $output = $result->fetchRow();
848
849                return $output;
850        }
851
852        /**
853         * Lista todos os cargos de uma organização.
854         *
855         * Este método irá listar a tabela localidade.
856         * @param int $organizationID O ID da organização.
857         * @return array Uma array de arrays associativas contendo a lista dos cargos de uma organização:
858         * - cargo_id
859         * - descricao
860         * - organizacao_id
861         * @access public
862         */
863        function getJobTitles($organizationID)
864        {
865                $query = "SELECT cargo_id, descricao, organizacao_id" .
866                                 "  FROM cargo" .
867                                 "      WHERE organizacao_id = ?" .
868                                 "  ORDER BY cargo_id";
869
870                $result = $this->db->query($query, array((int) $organizationID));
871                if (!$result)
872                        return false;
873
874                $output = $result->GetArray(-1);
875
876                return $output;
877        }
878
879        /**
880         * Busca as informações de cargo a partir do ID.
881         *
882         * Este método irá listar os atributos de um cargo, buscando na tabela a partir do seu ID.
883         * @param int $jobTitleID O ID do cargo.
884         * @return array Uma array associativa contendo os atributos do cargo.
885         * - cargo_id
886         * - descricao
887         * - organizacao_id
888         * @access public
889         */
890        function getJobTitle($jobTitleID)
891        {
892                $query  = "SELECT cargo_id, descricao, organizacao_id" .
893                                  "  FROM cargo" .
894                                  " WHERE (cargo_id = ?)";
895
896                $result = $this->db->query($query, array($jobTitleID));
897                if (!$result)
898                        return false;
899
900                $output = $result->fetchRow();
901
902                return $output;
903        }
904
905        /**
906         * Busca um cargo a partir da sua descrição.
907         *
908         * Este método irá mostrar os atributos de um cargo, buscando pela sua descrição.
909         * @param string $description O nome do cargo.
910         * @param int $organizationID O id da organização.
911         * @return array Uma array associativa contendo os atributos de um cargo:
912         * - cargo_id
913         * - descricao
914         * - organizacao_id
915         * @access public
916         */
917        function getJobTitleByName($description, $organizationID = 1)
918        {
919                $query = "SELECT cargo_id, descricao, organizacao_id" .
920                                 "  FROM cargo" .
921                                 " WHERE (UPPER(descricao) = UPPER(?) and (organizacao_id = ?))";
922
923                $result = $this->db->query($query, array($description, (int) $organizationID));
924                if (!$result)
925                        return false;
926
927                $output = $result->fetchRow();
928
929                return $output;
930        }
931
932        /**
933         * Busca um funcionário pelo seu ID.
934         *
935         * Este método retorna os atributos de um funcionário buscando pelo se id.
936         * O ID corresponde ao uidNumber do funcionário no catálogo LDAP.
937         * Se necessitar de outros atributos como o nome, cpf, email, matrícula, é necessário fazer uma consulta ao Ldap.
938         * @param int $employeeID O ID do funcionário.
939         * @return array Uma array associativa contendo os atributos de um funcionário:
940         * - funcionario_id
941         * - area_id
942         * - localidade_id
943         * - centro_custo_id
944         * - organizacao_id
945         * - funcionario_status_id
946         * - cargo_id
947         * - nivel: o nível numérico dentro do cargo
948         * - funcionario_categoria_id
949         * @access public
950         */
951        function getEmployee($employeeID)
952        {
953                if (!is_numeric($employeeID))
954                        return false;
955
956                $query  = "SELECT funcionario_id, area_id, localidade_id, centro_custo_id, organizacao_id, funcionario_status_id, cargo_id, nivel, funcionario_categoria_id" .
957                                  "  FROM funcionario" .
958                                  " WHERE (funcionario_id = ?)";
959
960                $result = $this->db->query($query, array($employeeID));
961                if (!$result)
962                        return false;
963
964                $output = $result->fetchRow();
965
966                return $output;
967        }
968
969        /**
970         * Busca lista de funcionários de uma área pelo ID da área.
971         *
972         * Este método retornará todos os funcionários de uma área.
973         * @param int $areaID O ID da área.
974         * @param boolean $onlyActiveUsers true para retornar somente usuários ativos e false caso contrário
975         * @return array Uma array sequencial de arrays associativos contendo contendo o ID dos funcionários de uma área:
976         * - funcionario_id
977         * @access public
978         */
979        function getEmployeesAreaID($areaID, $onlyActiveUsers = false)
980        {
981                if($onlyActiveUsers){
982                        $query = "SELECT funcionario_id " .
983                                         "FROM funcionario " .
984                                         "INNER JOIN funcionario_status " .
985                                         "ON (funcionario.funcionario_status_id = funcionario_status.funcionario_status_id) " .
986                                         "WHERE (area_id = ?) AND (funcionario_status.exibir = 'S')";
987                } else {
988                        $query = "SELECT funcionario_id " .
989                                     "FROM funcionario " .
990                                         "WHERE (area_id = ?)";
991                }
992
993                $result = $this->db->query($query, array($areaID));
994                if (!$result)
995                        return false;
996
997                $output = $result->GetArray(-1);
998
999                return $output;
1000        }
1001
1002        /**
1003         * Busca um status de funcionário pelo seu ID.
1004         *
1005         * Este método irá retornar os dados de um status de funcionário, buscando pelo ID solicitado.
1006         * @param int $employeeStatusID O ID do status.
1007         * @return array Uma array associativa contendo os atributos de um status de funcionário:
1008         * - funcionario_status_id
1009         * - descricao
1010         * - exibir: indicativo booleado 'S' funcionário será listado no organograma, 'N' funcionário ficará oculto na aba organograma.
1011         * @access public
1012         */
1013        function getEmployeeStatus($employeeStatusID)
1014        {
1015                $query = "SELECT funcionario_status_id, descricao, exibir " .
1016                                 "  FROM funcionario_status" .
1017                                 " WHERE (funcionario_status_id = ?)";
1018
1019                $result = $this->db->query($query, array($employeeStatusID));
1020                if (!$result)
1021                        return false;
1022
1023                $output = $result->fetchRow();
1024
1025                return $output;
1026        }
1027
1028        /**
1029         * Busca o ID da área (podendo ser de outros níveis) de um funcionário.
1030         *
1031         * Este método irá retornar o ID da área do funcionário. Fará uma busca para cima na hierarquia se for solicitado.
1032         * @param int $employeeID O ID do funcionário do qual se quer saber a área.
1033         * @param int $areaStatusID O ID do status de área (nível) da área do funcionário que se quer. Utilizar -1 caso se queira a área imediata do funcionário.
1034         * - Por exemplo: o funcionário está em uma área de status 5 (Divisão) e se quer a área superior de nível 3 (Diretoria).
1035         * @return int O ID da área do funcionário.
1036         * @access public
1037         */
1038        function getEmployeeAreaID($employeeID, $areaStatusID = -1)
1039        {
1040                $employee = $this->getEmployee($employeeID);
1041                if (!$employee)
1042                        return false;
1043
1044                /* requer a área do funcionário */
1045                if ($areaStatusID == -1)
1046                        return $employee['area_id'];
1047                else
1048                {
1049                        /* verifica se a área do funcionário já está no nível solicitado */
1050                        $currentArea = $this->getArea($employee['area_id']);
1051                        if ($currentArea['area_status_id'] == $areaStatusID)
1052                                return $currentArea['area_id'];
1053                        else
1054                                return $this->getParentAreaID($currentArea['area_id'], $areaStatusID);
1055                }
1056        }
1057
1058        /**
1059         * Busca o ID da localidade de um funcionário.
1060         *
1061         * Este método buscará o funcionário pelo seu ID e retornará o ID da sua localidade.
1062         * @param int $employeeID O ID do funcionário.
1063         * @return int O ID da localidade do funcionário.
1064         * @access public
1065         */
1066        function getEmployeeLocalID($employeeID)
1067        {
1068                $employee = $this->getEmployee($employeeID);
1069                if (!$employee)
1070                        return false;
1071
1072                return $employee['localidade_id'];
1073        }
1074
1075        /**
1076         * Busca o ID do status de um funcionário.
1077         *
1078         * Este método buscará um funcionário pelo seu ID e retornará o ID de status do funcionário.
1079         * Status de funcionário corresponde à sua situação: ativo, desligado, etc.
1080         * @param int $employeeID O ID do funcionário.
1081         * @return int O ID do status do funcionário.
1082         * @access public
1083         */
1084        function getEmployeeStatusID($employeeID)
1085        {
1086                $employee = $this->getEmployee($employeeID);
1087                if (!$employee)
1088                        return false;
1089
1090                return $employee['funcionario_status_id'];
1091        }
1092
1093        /**
1094         * Busca o ID do centro de custo de um funcionário.
1095         *
1096         * Este método irá buscar um funcionário pelo seu ID e retornará o ID do centro de custo do funcionário.
1097         * O centro de custo não é obrigatório por funcionário. Neste caso, se necessário, busque o centro de custo da área ou da localidade.
1098         * @param int $employeeID O ID do funcionário.
1099         * @return int O ID do centro de custo do funcionário.
1100         * @access public
1101         */
1102        function getEmployeeCostCenterID($employeeID)
1103        {
1104                $employee = $this->getEmployee($employeeID);
1105                if (!$employee)
1106                        return false;
1107
1108                return $employee['centro_custo_id'];
1109        }
1110
1111        /**
1112         * Busca o ID do cargo de um funcionário.
1113         *
1114         * Este método buscará um funcionário pelo seu ID e retornará o ID do cargo do funcionário.
1115         * @param int $employeeID O ID do funcionário.
1116         * @return int O ID do cargo do funcionário.
1117         * @access public
1118         */
1119        function getEmployeeJobTitleID($employeeID)
1120        {
1121                $employee = $this->getEmployee($employeeID);
1122                if (!$employee)
1123                        return false;
1124
1125                return $employee['cargo_id'];
1126        }
1127
1128        /**
1129         * Busca o ID da categoria de um funcionário.
1130         *
1131         * Este método buscará um funcionário pelo seu ID e retornará o ID da categoria do funcionário.
1132         * A categoria corresponde ao tipo de vínculo do funcionário com a organizacao. Por exemplo:
1133         * - funcionário
1134         * - estagiário
1135         * - terceirizado, etc
1136         * @param int $employeeID O ID do funcionário.
1137         * @return int O ID do categoria do funcionário.
1138         * @access public
1139         */
1140        function getEmployeeCategoryID($employeeID)
1141        {
1142                $employee = $this->getEmployee($employeeID);
1143                if (!$employee)
1144                        return false;
1145
1146                return $employee['funcionario_categoria_id'];
1147        }
1148
1149        /**
1150         * Busca o nível de um funcionário.
1151         *
1152         * Este método buscará o funcionário pelo seu ID e retornará o nível do funcionário dentro do cargo.
1153         * Geralmente um cargo (por exemplo: auxiliar tecnico) é composto por níveis de evolução na carreira: 1,2,3,...
1154         * @param int $employeeID O ID do funcionário.
1155         * @return int A quantidade de níveis do funcionário.
1156         * @access public
1157         */
1158        function getEmployeeLevel($employeeID)
1159        {
1160                $employee = $this->getEmployee($employeeID);
1161                if (!$employee)
1162                        return false;
1163
1164                if ($employee['nivel'] === null)
1165                        return false;
1166
1167                return $employee['nivel'];
1168        }
1169
1170        /**
1171         * Busca o ID do titular da área de um funcionário.
1172         *
1173         * Este método buscará o titular da área do funcionário, e poderá subir na hierarquia, buscando o titular de áreas superiores à área do funcionário.
1174         * @param int $employeeID O ID do funcionário.
1175         * @param int $areaStatusID O ID do status de área (nível) da área do funcionário que se quer o titular. Utilizar -1 caso se queira o titular da área imediata do funcionário.
1176         * @return int O ID do titular da área do funcionário:
1177         * - titular_funcionario_id
1178         * @access public
1179         */
1180        function getEmployeeSupervisorID($employeeID, $areaStatusID = -1)
1181        {
1182                return $this->getAreaSupervisorID($this->getEmployeeAreaID($employeeID, $areaStatusID));
1183        }
1184
1185        /**
1186         * Busca o ID do titular atual da área do funcionário.
1187         *
1188         * Caso haja um substituto, este será o titular atual; caso contrário, o titular atual é o próprio titular da área.
1189         * @param int $employeeID O ID do funcionário.
1190         * @param int $areaStatusID O ID do status de área (nível) da área do funcionário que se quer o titular atual. Utilizar -1 caso se queira o titular atual da área imediata do funcionário.
1191         * @return int O ID do titular atual da área do funcionário:
1192         * - titular_funcionário_id ou
1193         * - substituto_funcionario_id
1194         * @access public
1195         */
1196        function getEmployeeCurrentSupervisorID($employeeID, $areaStatusID = -1)
1197        {
1198                return $this->getAreaCurrentSupervisorID($this->getEmployeeAreaID($employeeID, $areaStatusID));
1199        }
1200
1201        /**
1202         * Busca o ID do responsável administrativo atual de uma área.
1203         *
1204         * A precedência para definir quem é o responsável administrativo é: auxiliar administrativo, substituto e titular.
1205         * @param int $employeeID O ID do funcionário.
1206         * @param int $areaStatusID O ID do status de área (nível) da área do funcionário que se quer o responsável administrativo. Utilizar -1 caso se queira o responsável administrativo da área imediata do funcionário.
1207         * @return int O ID do responsável administrativo atual da área do funcionário:
1208         * - titular_funcionário_id ou
1209         * - substituto_funcionario_id ou
1210         * - auxiliar_funcionario_id
1211         * @access public
1212         */
1213        function getEmployeeCurrentAdministrativeResponsibleID($employeeID, $areaStatusID = -1)
1214        {
1215                return $this->getAreaCurrentAdministrativeResponsibleID($this->getEmployeeAreaID($employeeID, $areaStatusID));
1216        }
1217}
1218?>
Note: See TracBrowser for help on using the repository browser.