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

Revision 6244, 46.6 KB checked in by asaikawa, 12 years ago (diff)

Ticket #2743 - Corrigida a instanciacao da classe CachedLDAP no metodo construtor do organograma

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