source: branches/1.2/workflow/inc/local/classes/class.wf_orgchart.php @ 1349

Revision 1349, 36.9 KB checked in by niltonneto, 15 years ago (diff)

Ticket #561 - Inclusão do módulo Workflow faltante nessa versão.

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