source: branches/2.2/workflow/inc/local/classes/class.wf_orgchart.php @ 1320

Revision 1320, 40.9 KB checked in by viani, 15 years ago (diff)

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