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

Revision 7285, 50.0 KB checked in by asaikawa, 12 years ago (diff)

Ticket #3119 - Adicionado o retorno da descricao da area na busca dos dados dos funcionarios de uma organizacao

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