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

Revision 795, 38.5 KB checked in by viani, 15 years ago (diff)

Ticket #488 - Inclusão do módulo workflow no ramo trunk do repositório Expresso.

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