├── .gitignore ├── LICENSE ├── README.md ├── fotos ├── 1.jpg ├── 2.jpg ├── 3.jpg └── 4.jpg ├── ponto.sql ├── ponto ├── .htaccess ├── css │ ├── acompanhamento.css │ ├── calendario.css │ ├── estilos.css │ ├── estrutura.css │ ├── font-awesome │ │ ├── css │ │ │ ├── font-awesome.css │ │ │ └── font-awesome.min.css │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── less │ │ │ ├── animated.less │ │ │ ├── bordered-pulled.less │ │ │ ├── core.less │ │ │ ├── fixed-width.less │ │ │ ├── font-awesome.less │ │ │ ├── icons.less │ │ │ ├── larger.less │ │ │ ├── list.less │ │ │ ├── mixins.less │ │ │ ├── path.less │ │ │ ├── rotated-flipped.less │ │ │ ├── screen-reader.less │ │ │ ├── stacked.less │ │ │ └── variables.less │ │ └── scss │ │ │ ├── _animated.scss │ │ │ ├── _bordered-pulled.scss │ │ │ ├── _core.scss │ │ │ ├── _fixed-width.scss │ │ │ ├── _icons.scss │ │ │ ├── _larger.scss │ │ │ ├── _list.scss │ │ │ ├── _mixins.scss │ │ │ ├── _path.scss │ │ │ ├── _rotated-flipped.scss │ │ │ ├── _screen-reader.scss │ │ │ ├── _stacked.scss │ │ │ ├── _variables.scss │ │ │ └── font-awesome.scss │ ├── formulario.css │ ├── imgs │ │ ├── bigLoader.gif │ │ ├── contrair.gif │ │ ├── expandir.gif │ │ ├── fundo_bt.gif │ │ ├── fundo_bt_amarelo.gif │ │ ├── fundo_bt_desabilitado.gif │ │ ├── fundo_bt_verde.gif │ │ ├── fundo_bt_vermelho.gif │ │ ├── fundo_tab.jpg │ │ ├── icone_aviso.png │ │ ├── icone_erro.png │ │ ├── icone_informacao.png │ │ ├── icone_proibido.png │ │ ├── icone_sucesso.png │ │ ├── icone_zoom_in.png │ │ └── smallLoader.gif │ ├── jquery │ │ ├── images │ │ │ ├── Thumbs.db │ │ │ ├── animated-overlay.gif │ │ │ ├── ui-bg_flat_15_cd0a0a_40x100.png │ │ │ ├── ui-bg_flat_90_7b7b7b_40x100.png │ │ │ ├── ui-bg_glass_100_e4f1fb_1x400.png │ │ │ ├── ui-bg_glass_50_3baae3_1x400.png │ │ │ ├── ui-bg_glass_80_d7ebf9_1x400.png │ │ │ ├── ui-bg_highlight-hard_100_f2f5f7_1x100.png │ │ │ ├── ui-bg_highlight-hard_70_000000_1x100.png │ │ │ ├── ui-bg_highlight-soft_100_deedf7_1x100.png │ │ │ ├── ui-bg_highlight-soft_25_ffef8f_1x100.png │ │ │ ├── ui-icons_2694e8_256x240.png │ │ │ ├── ui-icons_2e83ff_256x240.png │ │ │ ├── ui-icons_3d80b3_256x240.png │ │ │ ├── ui-icons_72a7cf_256x240.png │ │ │ └── ui-icons_ffffff_256x240.png │ │ └── jquery-ui-1.10.3.custom.min.css │ ├── materialize │ │ ├── LICENSE │ │ ├── README.md │ │ ├── css │ │ │ ├── materialize.css │ │ │ └── materialize.min.css │ │ ├── font │ │ │ ├── material-design-icons │ │ │ │ ├── LICENSE.txt │ │ │ │ ├── Material-Design-Icons.eot │ │ │ │ ├── Material-Design-Icons.svg │ │ │ │ ├── Material-Design-Icons.ttf │ │ │ │ ├── Material-Design-Icons.woff │ │ │ │ └── Material-Design-Icons.woff2 │ │ │ └── roboto │ │ │ │ ├── Roboto-Bold.ttf │ │ │ │ ├── Roboto-Bold.woff │ │ │ │ ├── Roboto-Bold.woff2 │ │ │ │ ├── Roboto-Light.ttf │ │ │ │ ├── Roboto-Light.woff │ │ │ │ ├── Roboto-Light.woff2 │ │ │ │ ├── Roboto-Medium.ttf │ │ │ │ ├── Roboto-Medium.woff │ │ │ │ ├── Roboto-Medium.woff2 │ │ │ │ ├── Roboto-Regular.ttf │ │ │ │ ├── Roboto-Regular.woff │ │ │ │ ├── Roboto-Regular.woff2 │ │ │ │ ├── Roboto-Thin.ttf │ │ │ │ ├── Roboto-Thin.woff │ │ │ │ └── Roboto-Thin.woff2 │ │ └── js │ │ │ ├── materialize.js │ │ │ └── materialize.min.js │ ├── registro.css │ ├── simples.css │ ├── tabela.css │ ├── texto.css │ └── yii.css ├── imgs │ ├── banner.png │ ├── fundo-listrado-diagonal.gif │ ├── logo.png │ ├── logoPonto.png │ ├── logo_branco.png │ ├── mouse_normal_g.png │ └── mouse_normal_xg.png ├── index.php ├── js │ ├── acompanhamento.js │ ├── acompanhamentoChefia.js │ ├── calendario.js │ ├── circle-progress.js │ ├── compensacao.js │ ├── consolida.js │ ├── gerencia.js │ ├── horarioOrgao.js │ ├── jquery │ │ └── jquery.maskedinput-1.2.2.js │ ├── pedidoAjuste.js │ ├── pedidosAvaliacao.js │ ├── pedidosCertificados.js │ ├── registro.js │ ├── relatorio.js │ └── restricao.js └── protected │ ├── .htaccess │ ├── components │ ├── ComponenteSeguranca.php │ ├── ConversorDataBehavior.php │ ├── Helper.php │ ├── Identidade.php │ ├── IdentidadeInterface.php │ ├── Repositorio.php │ ├── Sessao.php │ └── UsuarioWeb.php │ ├── config │ └── config.php │ ├── controllers │ ├── AcompanhamentoController.php │ ├── AjusteController.php │ ├── BaseController.php │ ├── CalendarioController.php │ ├── CompensacaoController.php │ ├── ConsolidaController.php │ ├── GerenciaController.php │ ├── HorariosController.php │ ├── RegistroController.php │ ├── RelatorioController.php │ ├── RestricaoController.php │ └── TempLoginController.php │ ├── models │ ├── Abono.php │ ├── Ajuste.php │ ├── ArquivoAjuste.php │ ├── CargaHorariaMesServidor.php │ ├── CategoriaFuncional.php │ ├── Compensacao.php │ ├── DadoFuncional.php │ ├── DefinicoesOrgao.php │ ├── Frequencia.php │ ├── GrupoEmprego.php │ ├── JustificativaAjuste.php │ ├── LogErroAcessoRegistro.php │ ├── Orgao.php │ ├── Permissao.php │ ├── Pessoa.php │ ├── Ponto.php │ ├── PontoEAjuste.php │ └── RestricaoRelogio.php │ └── views │ ├── acompanhamento │ ├── acompanhamentoChefia.php │ └── index.php │ ├── ajuste │ ├── dadosPedido.php │ ├── dadosPedidoCertificado.php │ ├── pedido.php │ ├── pedidosAvaliacao.php │ └── pedidosCertificados.php │ ├── calendario │ └── index.php │ ├── compensacao │ ├── dadosPedido.php │ ├── dadosPedidoCertificado.php │ ├── pedido.php │ └── pedidosAvaliacao.php │ ├── consolida │ └── index.php │ ├── gerencia │ └── index.php │ ├── horarios │ ├── exibirHorariosOrgao.php │ └── horariosOrgaos.php │ ├── layouts │ ├── main.php │ └── registroPonto.php │ ├── registro │ ├── index.php │ ├── login.php │ ├── mensagem.php │ └── selecionaVinculo.php │ ├── relatorio │ ├── _periodos.php │ ├── exibicao.php │ └── index.php │ ├── restricao │ └── index.php │ └── tempLogin │ └── login.php └── repositorio ├── abreArquivo.php └── docs ├── F727BC55D5AA └── F727BC55D5AA.txt /.gitignore: -------------------------------------------------------------------------------- 1 | ponto/assets/* 2 | !assets/.gitignore 3 | protected/runtime/* 4 | !protected/runtime/.gitignore 5 | protected/data/*.db 6 | themes/classic/views/ 7 | yii 8 | /.gitignore 9 | assets 10 | runtime 11 | nbproject 12 | /ponto/nbproject/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Sistema de Ponto ELetrônico Livre (SPELL) 2 | Esse sistema foi desenvolvido no [Centro de Processamento de Dados](http://www.ufrgs.br/cpd/)(CPD) da [Universidade Federal do Rio Grande do Sul](http://www.ufrgs.br/)(UFRGS) com base no sistema já utilizado na Universidade para ser disponibilizado a outras instituições que estejam necessitando de uma solução para registro e acompanhamento da carga horária dos seus servidores. 3 | O sistema foi portado em colaboração com a [Universidade Federal Fluminense](http://www.uff.br/)(UFF). 4 | 5 | ## Funcionalidades 6 | * Acompanhamento de horários (funcionário e chefia) 7 | * Registro de horários 8 | * Solicitação de ajustes e abonos de horas 9 | 10 | ## Guia de instalação 11 | 12 | #### **Pré-requisitos** 13 | Para testar o sistema o computador deve conter os seguintes softwares: 14 | * [PHP 5.3](https://secure.php.net/downloads.php) ou superior 15 | * [Yii Framework 1.1](https://github.com/yiisoft/yii/releases/download/1.1.17/yii-1.1.17.467ff50.zip) 16 | * Servidor Web (Recomenda-se o [USBWebserver](http://www.usbwebserver.net)) 17 | 18 | #### **Como configurar** 19 | 1. Baixe e mova o código fonte para a pasta de páginas do servidor. No caso do USBWebserver, coloque na pasta `root` 20 | 2. Baixe e extraia o Yii Framework para a pasta raiz do servidor 21 | 3. Execute o arquivo [ponto.sql](ponto.sql) no banco de dados 22 | 23 | Por pardrão, as credenciais de acesso do banco de dados são: 24 | ``` 25 | usuário: root 26 | senha: usbw 27 | ``` 28 | 29 | #### **Como testar** 30 | * Para visualizar a tela do ponto acesse `localhost:8080/ponto` 31 | * Para visualizar a tela de serviços acesse `localhost:8080/tempLogin/login` 32 | 33 | Lista de usuários cadastrados para teste: 34 | 35 | | Login | Senha | Tipo | Chefia | Cadastrado 36 | |:---|:---|:---|:---|:---| 37 | |1||Técnico|4|Departamento| 38 | |2||Técnico|1|Unidade acadêmica| 39 | |3||Docente|2|Órgão máximo| 40 | |4||Técnico|0|Departamento| 41 | 42 | *Observação: pode-se informar qualquer senha para realizar o login* 43 | 44 | ## Guia de configuração 45 | 46 | #### **Configurações PHP e Apache** 47 | 48 | Para que o sistema funcione, é necessário habilitar as tags curtas (short_open_tag) no php.ini e habilitar o mod_rewrite nas configurações do Apache. 49 | 50 | #### **Conexão com o banco de dados** 51 | Os dados de acesso ao banco de dados são especificados no arquivo `ponto/protected/config/config.php`. 52 | Basta alterar os valores contidos na chave `db` do array `components`. 53 | 54 | ``` 55 | 'db'=>array( 56 | 'connectionString' => 'mysql:host=localhost:3307;dbname=ponto', 57 | 'emulatePrepare' => true, 58 | 'username' => 'root', 59 | 'password' => 'usbw', 60 | 'charset' => 'utf8', 61 | ), 62 | ``` 63 | 64 | #### **Segurança do end-point de registros** 65 | Para garantir que somente os pontos oficiais possam realizar registros, 66 | recomenda-se adicionar o seguinte código no método `beforeAction` da classe 67 | `RegistroController` realizando as substituições necessárias: 68 | 69 | ``` 70 | if (($ipv4 != 'Número IPv4 da rede') && ($ipv6 != 'Número IPv6 da rede')) { 71 | $this->render('mensagem', array( 72 | 'mensagem' => "O registro de Ponto só funciona na rede da Universidade.", 73 | )); 74 | return false; 75 | } 76 | ``` 77 | 78 | ## Mais informações 79 | Para mais informações, guias e tutoriais sobre o projeto acesse a [Wiki](https://github.com/ufrgs/spell/wiki/) do repositório. 80 | -------------------------------------------------------------------------------- /fotos/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/fotos/1.jpg -------------------------------------------------------------------------------- /fotos/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/fotos/2.jpg -------------------------------------------------------------------------------- /fotos/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/fotos/3.jpg -------------------------------------------------------------------------------- /fotos/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/fotos/4.jpg -------------------------------------------------------------------------------- /ponto/.htaccess: -------------------------------------------------------------------------------- 1 | RewriteEngine on 2 | 3 | # if a directory or a file exists, use it directly 4 | RewriteCond %{REQUEST_FILENAME} !-f 5 | RewriteCond %{REQUEST_FILENAME} !-d 6 | 7 | # otherwise forward it to index.php 8 | RewriteRule . index.php -------------------------------------------------------------------------------- /ponto/css/acompanhamento.css: -------------------------------------------------------------------------------- 1 | /* 2 | Created on : 09/11/2015, 16:00:30 3 | */ 4 | .alinhaDireita { 5 | text-align: right; 6 | } 7 | 8 | h2 { 9 | padding-left: 0; 10 | } 11 | 12 | #divProgressos { 13 | float: right; 14 | width: calc(50% - 30px); 15 | margin-bottom: 10px; 16 | } 17 | 18 | .progresso { 19 | display: inline-block; 20 | margin: 0 5px; 21 | } 22 | 23 | .progresso label { 24 | display: block; 25 | } 26 | 27 | .progresso .circulo { 28 | margin: 5px 0; 29 | text-align: center; 30 | } 31 | 32 | .progresso .circulo span { 33 | float: right; 34 | display: block; 35 | width: 120px; 36 | margin-left: -120px; 37 | margin-top: 40px; 38 | } 39 | @media screen and (-webkit-min-device-pixel-ratio:0) { 40 | .progresso .circulo span { 41 | margin-top: -80px; 42 | } 43 | } 44 | 45 | #divRegistros { 46 | padding-top: 160px; 47 | } 48 | 49 | #tabelaRegistros a { 50 | text-decoration: none; 51 | cursor: pointer; 52 | } 53 | 54 | #tabelaRegistros a i { 55 | visibility: hidden; 56 | } 57 | 58 | #tabelaRegistros i.aviso { 59 | visibility: visible; 60 | padding: 0 15px; 61 | color: orange; 62 | } 63 | 64 | #tabelaRegistros a:hover i { 65 | visibility: visible; 66 | } 67 | 68 | .modelo1 tr td { 69 | padding: 5px 10px; 70 | } 71 | 72 | .jornadaTotal { 73 | display: inline-block; 74 | width: 46px; 75 | font-weight: bold; 76 | } 77 | 78 | #abasTipoAcompanhamento { 79 | margin: 5px 0; 80 | border-bottom: 1px solid #ccc; 81 | } 82 | 83 | #abasTipoAcompanhamento .aba { 84 | display: inline-block; 85 | margin: 0 10px -1px; 86 | padding: 5px 30px; 87 | border: 1px solid #ccc; 88 | border-bottom: none; 89 | border-radius: 10px 10px 0 0; 90 | background-color: #efefef; 91 | } 92 | 93 | #abasTipoAcompanhamento .aba.ativa { 94 | border-bottom: 1px solid #fff; 95 | background-color: #fff; 96 | } -------------------------------------------------------------------------------- /ponto/css/calendario.css: -------------------------------------------------------------------------------- 1 | .alinhaDireita { 2 | text-align: right; 3 | } 4 | 5 | h2 { 6 | padding-left: 0; 7 | } 8 | 9 | .calendario thead th { 10 | line-height: 3rem; 11 | } 12 | 13 | .calendario th.domingo { 14 | color: #c00; 15 | } 16 | 17 | .calendario tbody td { 18 | padding: 1em 5px 5px; 19 | border: 1px solid #ccc; 20 | min-width: 7rem; 21 | vertical-align: top; 22 | } 23 | 24 | .calendario tbody td.vazia { 25 | border: none; 26 | } 27 | 28 | .calendario tbody td .numeroDia { 29 | float: right; 30 | margin-top: -1em; 31 | color: #ccc; 32 | font-weight: bold; 33 | } 34 | 35 | .calendario tbody td.dia1 .numeroDia, .calendario tbody td.feriado .numeroDia { 36 | color: #e55; 37 | } 38 | 39 | .calendario tbody td label { 40 | display: block; 41 | font-size: 0.8rem; 42 | color: #888; 43 | } 44 | 45 | .calendario tbody td .dado { 46 | padding: 2px 0; 47 | font-size: 2rem; 48 | display: block; 49 | width: 7rem; 50 | text-align: right; 51 | } 52 | 53 | .calendario tbody td.afastado { 54 | background: url("../imgs/fundo-listrado-diagonal.gif") repeat; 55 | } 56 | 57 | .calendario tbody td .afastamentos { 58 | display: block; 59 | min-height: 4rem; 60 | font-size: 0.8rem; 61 | font-weight: bold; 62 | } 63 | 64 | .dadoRotulado { 65 | font-weight: bold; 66 | } -------------------------------------------------------------------------------- /ponto/css/estilos.css: -------------------------------------------------------------------------------- 1 | 2 | @import './estrutura.css'; 3 | @import './simples.css'; 4 | @import './texto.css'; 5 | @import './tabela.css'; 6 | @import './formulario.css'; 7 | @import './yii.css'; 8 | @import './jquery/jquery-ui-1.10.3.custom.min.css'; -------------------------------------------------------------------------------- /ponto/css/estrutura.css: -------------------------------------------------------------------------------- 1 | 2 | header { 3 | padding: 10px 20px; 4 | text-align: center; 5 | border-bottom: 1px solid #0091ea; 6 | } 7 | 8 | header .tituloGeral { 9 | font-size: 2em; 10 | color: #0091ea; 11 | } 12 | 13 | header a { 14 | float: right; 15 | } 16 | 17 | main { 18 | padding: 10px; 19 | } 20 | 21 | main nav { 22 | width: 200px; 23 | float: left; 24 | } 25 | 26 | main nav > span { 27 | display: inline-block; 28 | color: #555; 29 | margin: 5px 0; 30 | } 31 | 32 | main nav ul { 33 | list-style: none; 34 | margin-left: 0; 35 | } 36 | 37 | main nav li a { 38 | display: block; 39 | padding: 5px; 40 | margin: 5px 0; 41 | color: #fff; 42 | background-color: #0066CC; 43 | text-decoration: none; 44 | transition-duration: 0.3s; 45 | } 46 | main nav li a:hover { 47 | color: #fff; 48 | background-color: #0088DD; 49 | } 50 | main nav li.ativo a { 51 | color: #004182; 52 | background-color: #fff; 53 | border: 1px solid #004182; 54 | border-collapse: collapse; 55 | } 56 | 57 | main section { 58 | width: calc(100% - 240px); 59 | padding: 0 20px; 60 | margin-left: 200px; 61 | } 62 | 63 | @media print { 64 | .escondeNaImpressao, .escondeNaImpressao * { 65 | display: none !important; 66 | } 67 | main section { 68 | width: calc(100% - 40px); 69 | padding: 0 20px; 70 | margin-left: 0px; 71 | } 72 | } -------------------------------------------------------------------------------- /ponto/css/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /ponto/css/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /ponto/css/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /ponto/css/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /ponto/css/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /ponto/css/font-awesome/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.6.1 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | @import "screen-reader.less"; 19 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | .fa-icon-rotate(@degrees, @rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; 16 | -webkit-transform: rotate(@degrees); 17 | -ms-transform: rotate(@degrees); 18 | transform: rotate(@degrees); 19 | } 20 | 21 | .fa-icon-flip(@horiz, @vert, @rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; 23 | -webkit-transform: scale(@horiz, @vert); 24 | -ms-transform: scale(@horiz, @vert); 25 | transform: scale(@horiz, @vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | .sr-only() { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | .sr-only-focusable() { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/less/screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | @mixin fa-icon-rotate($degrees, $rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; 16 | -webkit-transform: rotate($degrees); 17 | -ms-transform: rotate($degrees); 18 | transform: rotate($degrees); 19 | } 20 | 21 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; 23 | -webkit-transform: scale($horiz, $vert); 24 | -ms-transform: scale($horiz, $vert); 25 | transform: scale($horiz, $vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | @mixin sr-only { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | @mixin sr-only-focusable { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /ponto/css/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.6.1 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /ponto/css/formulario.css: -------------------------------------------------------------------------------- 1 | /* CSS Document */ 2 | 3 | /* Labels */ 4 | 5 | label.esquerdaAlinhado { 6 | width: 230px; 7 | display: block; 8 | float: left; 9 | text-align: right; 10 | margin-right: 5px; 11 | padding-top: 3px; 12 | width: 100px; 13 | color: #25365A; 14 | } 15 | 16 | label.esquerdaAlinhado.maior { 17 | width: 150px; 18 | } 19 | 20 | label.esquerdaAlinhado.bemGrande { 21 | width: 200px; 22 | } 23 | 24 | label.esquerdaAlinhado.paraTexto { 25 | padding-top: 0px !important; 26 | } 27 | 28 | label.direita { 29 | margin: 0; 30 | padding: 3px 10px 0 0; 31 | color: #25365A; 32 | } 33 | 34 | .dadoRotulado { 35 | display: inline-block; 36 | padding: 3px 0; 37 | } 38 | 39 | input, textarea, select { 40 | margin: 2px 0; 41 | padding: 3px; 42 | border: 1px solid #ababab; 43 | } 44 | 45 | input.semRotuloEsquerda, select.semRotuloEsquerda, textarea.semRotuloEsquerda, button.semRotuloEsquerda { 46 | margin-left: 105px; 47 | } 48 | 49 | input.semRotuloEsquerda.maior, select.semRotuloEsquerda.maior, textarea.semRotuloEsquerda.maior, button.semRotuloEsquerda.maior { 50 | margin-left: 155px; 51 | } 52 | 53 | input.semRotuloEsquerda.bemGrande, select.semRotuloEsquerda.bemGrande, textarea.semRotuloEsquerda.bemGrande, button.semRotuloEsquerda.bemGrande { 54 | margin-left: 205px; 55 | } 56 | 57 | textarea { 58 | line-height: 1.5em; 59 | } 60 | 61 | /* Botao */ 62 | 63 | button, .button, input[type=button], input[type=submit] { 64 | height: 22px; 65 | color: #FFF; 66 | font-weight: bold; 67 | font-size: 11px; 68 | background-color: #9BCDFF; 69 | background: url(imgs/fundo_bt.gif) repeat-x; 70 | margin: 5px; 71 | border-radius: 4px; 72 | border: 1px solid #1F63A7; 73 | padding-bottom: 4px; 74 | padding-left: 8px; 75 | padding-right: 8px; 76 | cursor: pointer; 77 | } 78 | 79 | button:hover, .button:hover, input[type=button]:hover, input[type=submit]:hover { 80 | border: 1px solid #000066; 81 | color: #E9F1FD; 82 | } 83 | 84 | button.desabilitado, .button.desabilitado, .botaoDesabilitado, button:disabled, .button:disabled { 85 | background-color: #ccc; 86 | background: url(imgs/fundo_bt_desabilitado.gif) repeat-x top; 87 | border: 1px solid #A5C1DC; 88 | cursor: default; 89 | } 90 | 91 | button.btPerigo, .button.btPerigo, .btPerigo { 92 | background-color: #BD2C34; 93 | background: url(imgs/fundo_bt_vermelho.gif) repeat-x top; 94 | border: 1px solid #A0252C; 95 | } 96 | 97 | button.btPerigo:hover, .button.btPerigo:hover { 98 | border: 1px solid #660000; 99 | color: #FFE8E8; 100 | } 101 | 102 | button.btSucesso, .button.btSucesso, .btSucesso { 103 | background-color: #259C32; 104 | background: url(imgs/fundo_bt_verde.gif) repeat-x top; 105 | border: 1px solid #29963F; 106 | } 107 | 108 | button.btSucesso:hover, .button.btSucesso:hover { 109 | border: 1px solid #006600; 110 | color: #E8FFE8; 111 | } 112 | 113 | button.btAlerta, .button.btAlerta, .btAlerta { 114 | background-color: #C4A515; 115 | background: url(imgs/fundo_bt_amarelo.gif) repeat-x top; 116 | border: 1px solid #998118; 117 | color: #000; 118 | } 119 | 120 | button.btAlerta:hover, .button.btAlerta:hover { 121 | border: 1px solid #706012; 122 | color: #222; 123 | } -------------------------------------------------------------------------------- /ponto/css/imgs/bigLoader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/imgs/bigLoader.gif -------------------------------------------------------------------------------- /ponto/css/imgs/contrair.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/imgs/contrair.gif -------------------------------------------------------------------------------- /ponto/css/imgs/expandir.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/imgs/expandir.gif -------------------------------------------------------------------------------- /ponto/css/imgs/fundo_bt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/imgs/fundo_bt.gif -------------------------------------------------------------------------------- /ponto/css/imgs/fundo_bt_amarelo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/imgs/fundo_bt_amarelo.gif -------------------------------------------------------------------------------- /ponto/css/imgs/fundo_bt_desabilitado.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/imgs/fundo_bt_desabilitado.gif -------------------------------------------------------------------------------- /ponto/css/imgs/fundo_bt_verde.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/imgs/fundo_bt_verde.gif -------------------------------------------------------------------------------- /ponto/css/imgs/fundo_bt_vermelho.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/imgs/fundo_bt_vermelho.gif -------------------------------------------------------------------------------- /ponto/css/imgs/fundo_tab.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/imgs/fundo_tab.jpg -------------------------------------------------------------------------------- /ponto/css/imgs/icone_aviso.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/imgs/icone_aviso.png -------------------------------------------------------------------------------- /ponto/css/imgs/icone_erro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/imgs/icone_erro.png -------------------------------------------------------------------------------- /ponto/css/imgs/icone_informacao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/imgs/icone_informacao.png -------------------------------------------------------------------------------- /ponto/css/imgs/icone_proibido.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/imgs/icone_proibido.png -------------------------------------------------------------------------------- /ponto/css/imgs/icone_sucesso.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/imgs/icone_sucesso.png -------------------------------------------------------------------------------- /ponto/css/imgs/icone_zoom_in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/imgs/icone_zoom_in.png -------------------------------------------------------------------------------- /ponto/css/imgs/smallLoader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/imgs/smallLoader.gif -------------------------------------------------------------------------------- /ponto/css/jquery/images/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/jquery/images/Thumbs.db -------------------------------------------------------------------------------- /ponto/css/jquery/images/animated-overlay.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/jquery/images/animated-overlay.gif -------------------------------------------------------------------------------- /ponto/css/jquery/images/ui-bg_flat_15_cd0a0a_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/jquery/images/ui-bg_flat_15_cd0a0a_40x100.png -------------------------------------------------------------------------------- /ponto/css/jquery/images/ui-bg_flat_90_7b7b7b_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/jquery/images/ui-bg_flat_90_7b7b7b_40x100.png -------------------------------------------------------------------------------- /ponto/css/jquery/images/ui-bg_glass_100_e4f1fb_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/jquery/images/ui-bg_glass_100_e4f1fb_1x400.png -------------------------------------------------------------------------------- /ponto/css/jquery/images/ui-bg_glass_50_3baae3_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/jquery/images/ui-bg_glass_50_3baae3_1x400.png -------------------------------------------------------------------------------- /ponto/css/jquery/images/ui-bg_glass_80_d7ebf9_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/jquery/images/ui-bg_glass_80_d7ebf9_1x400.png -------------------------------------------------------------------------------- /ponto/css/jquery/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/jquery/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png -------------------------------------------------------------------------------- /ponto/css/jquery/images/ui-bg_highlight-hard_70_000000_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/jquery/images/ui-bg_highlight-hard_70_000000_1x100.png -------------------------------------------------------------------------------- /ponto/css/jquery/images/ui-bg_highlight-soft_100_deedf7_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/jquery/images/ui-bg_highlight-soft_100_deedf7_1x100.png -------------------------------------------------------------------------------- /ponto/css/jquery/images/ui-bg_highlight-soft_25_ffef8f_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/jquery/images/ui-bg_highlight-soft_25_ffef8f_1x100.png -------------------------------------------------------------------------------- /ponto/css/jquery/images/ui-icons_2694e8_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/jquery/images/ui-icons_2694e8_256x240.png -------------------------------------------------------------------------------- /ponto/css/jquery/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/jquery/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /ponto/css/jquery/images/ui-icons_3d80b3_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/jquery/images/ui-icons_3d80b3_256x240.png -------------------------------------------------------------------------------- /ponto/css/jquery/images/ui-icons_72a7cf_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/jquery/images/ui-icons_72a7cf_256x240.png -------------------------------------------------------------------------------- /ponto/css/jquery/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/jquery/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /ponto/css/materialize/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014-2015 Materialize 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /ponto/css/materialize/README.md: -------------------------------------------------------------------------------- 1 | ![alt tag](https://raw.github.com/dogfalo/materialize/master/images/materialize.gif) 2 | =========== 3 | 4 | [![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/Dogfalo/materialize?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 5 | Materialize, a CSS Framework based on material design 6 | 7 | ### Current Version : v0.97.2 8 | 9 | ## Sass Requirements: 10 | - Ruby Sass 3.3+, LibSass 0.6+ 11 | 12 | ## Supported Browsers: 13 | Chrome 35+, Firefox 31+, Safari 7+, IE 10+ 14 | 15 | ## Changelog 16 | - v0.97.2 (Nov 8, 2015) 17 | - Image support inside select 18 | - Optgroup supported in select 19 | - Multiple select added 20 | - Card styling fixes 21 | - Breadcrumbs added 22 | - Scrollable tabs 23 | - Tooltips and dropdowns position themselves more intelligently inside the window 24 | - FAB menu is click-toggleable 25 | - Horizontal FAB support added 26 | - v0.97.1 (Sep 13, 2015) 27 | - Added new range slider with uses noUiSlider to provide powerful options 28 | - Added CSS for Chips 29 | - Toasts support adding of html elements 30 | - Fixed select destroy/creation bug 31 | - Bugfixes for dropdown, badges, collections, scrollfire 32 | - Added default preloader color variable 33 | - File input now supports multiple files and dynamically loaded elements 34 | - v0.97.0 (June 21, 2015) 35 | - **Documentation changed to use Official Google Icon web font** 36 | - **Input errors added** 37 | - Flicker on Firefox on dropdowns fixed 38 | - Pagination made more responsive 39 | - Modal now prevents scrolling 40 | - Modal animation added 41 | - Support for multiple modals added 42 | - Programmatic control of FAB to open/close added 43 | - Programmatic control of slider to play/pause added 44 | - Plus many more bug fixes 45 | - v0.96.1 (April 6, 2015) 46 | - Dropdown Fixes 47 | - Materialize functions fixed for Meteor 48 | - v0.96.0 (April 1, 2015) 49 | - **Toasts, transitions, scrollfire added under Materialize namespace** 50 | - **Dropdown is now created as a child of its parent** 51 | - Collapsibles supports nesting 52 | - Modal Bottom Sheet added 53 | - Indeterminate Checkboxes added 54 | - New Checkbox Style Added 55 | - Text Inputs supports placeholder/readonly 56 | - Google Inbox-like Collapsible added 57 | - Text Character Counter added 58 | - Waves no longer breaks on SVG's 59 | 60 | - v0.95.3 (Feb 25, 2015) 61 | - Parallax image loading / responsiveness fixes 62 | - Date picker supports month/year as dropdown 63 | - Dismissable collection items 64 | - Avatar collection items 65 | - Pagination Added 66 | - ScrollFire fixes 67 | 68 | 69 | ## Contributing 70 | [Please read CONTRIBUTING.md for more information](CONTRIBUTING.md) 71 | -------------------------------------------------------------------------------- /ponto/css/materialize/font/material-design-icons/Material-Design-Icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/material-design-icons/Material-Design-Icons.eot -------------------------------------------------------------------------------- /ponto/css/materialize/font/material-design-icons/Material-Design-Icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/material-design-icons/Material-Design-Icons.ttf -------------------------------------------------------------------------------- /ponto/css/materialize/font/material-design-icons/Material-Design-Icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/material-design-icons/Material-Design-Icons.woff -------------------------------------------------------------------------------- /ponto/css/materialize/font/material-design-icons/Material-Design-Icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/material-design-icons/Material-Design-Icons.woff2 -------------------------------------------------------------------------------- /ponto/css/materialize/font/roboto/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/roboto/Roboto-Bold.ttf -------------------------------------------------------------------------------- /ponto/css/materialize/font/roboto/Roboto-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/roboto/Roboto-Bold.woff -------------------------------------------------------------------------------- /ponto/css/materialize/font/roboto/Roboto-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/roboto/Roboto-Bold.woff2 -------------------------------------------------------------------------------- /ponto/css/materialize/font/roboto/Roboto-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/roboto/Roboto-Light.ttf -------------------------------------------------------------------------------- /ponto/css/materialize/font/roboto/Roboto-Light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/roboto/Roboto-Light.woff -------------------------------------------------------------------------------- /ponto/css/materialize/font/roboto/Roboto-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/roboto/Roboto-Light.woff2 -------------------------------------------------------------------------------- /ponto/css/materialize/font/roboto/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/roboto/Roboto-Medium.ttf -------------------------------------------------------------------------------- /ponto/css/materialize/font/roboto/Roboto-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/roboto/Roboto-Medium.woff -------------------------------------------------------------------------------- /ponto/css/materialize/font/roboto/Roboto-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/roboto/Roboto-Medium.woff2 -------------------------------------------------------------------------------- /ponto/css/materialize/font/roboto/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/roboto/Roboto-Regular.ttf -------------------------------------------------------------------------------- /ponto/css/materialize/font/roboto/Roboto-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/roboto/Roboto-Regular.woff -------------------------------------------------------------------------------- /ponto/css/materialize/font/roboto/Roboto-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/roboto/Roboto-Regular.woff2 -------------------------------------------------------------------------------- /ponto/css/materialize/font/roboto/Roboto-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/roboto/Roboto-Thin.ttf -------------------------------------------------------------------------------- /ponto/css/materialize/font/roboto/Roboto-Thin.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/roboto/Roboto-Thin.woff -------------------------------------------------------------------------------- /ponto/css/materialize/font/roboto/Roboto-Thin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/css/materialize/font/roboto/Roboto-Thin.woff2 -------------------------------------------------------------------------------- /ponto/css/simples.css: -------------------------------------------------------------------------------- 1 | /* CSS Document */ 2 | 3 | * { 4 | font-family: Verdana, Arial, Helvetica, sans-serif; 5 | margin: 0px; 6 | padding: 0px; 7 | font-size: 1em; 8 | font-size: 12px; 9 | } 10 | 11 | /* Correcoes do jQuery UI*/ 12 | .ui-datepicker * { 13 | font-size: 0.95em; 14 | } 15 | 16 | .ui-tabs .ui-state-active, .ui-tabs .ui-widget-content .ui-state-active, .ui-tabs .ui-widget-header .ui-state-active { 17 | background: none !important; 18 | background-color: #f9fafb !important; 19 | } 20 | .ui-tabs .ui-state-active a, .ui-tabs .ui-widget-content .ui-state-active a, .ui-tabs .ui-widget-header .ui-state-active a, .ui-accordion-content a { 21 | color: #2779aa !important; 22 | } 23 | 24 | .ui-autocomplete-input { 25 | background: url('imgs/icone_zoom_in.png') no-repeat right center #fff; 26 | background-size: 20px 20px; 27 | } 28 | .ui-autocomplete-loading 29 | { 30 | background: url('imgs/smallLoader.gif') no-repeat right center; 31 | } 32 | 33 | body { 34 | font-family: Verdana, Arial, Helvetica, sans-serif; 35 | margin: 0; 36 | } 37 | 38 | a { 39 | color: #0066CC; 40 | text-decoration: underline; 41 | } 42 | a:hover { 43 | color: #006391; 44 | text-decoration: none; 45 | } 46 | 47 | .coluna50 { 48 | position: relative; 49 | float: left; 50 | display: block; 51 | width: 50%; 52 | } 53 | 54 | fieldset { 55 | background-color: #F7F7F7; 56 | border: 1px solid #CCCCCC; 57 | border-radius: 7px; 58 | padding: 10px; 59 | } 60 | 61 | fieldset legend { 62 | font-weight: bold; 63 | color: #006699; 64 | padding: 0 10px; 65 | } 66 | 67 | fieldset fieldset, 68 | fieldset fieldset fieldset fieldset, 69 | fieldset fieldset fieldset fieldset fieldset fieldset, 70 | fieldset fieldset fieldset fieldset fieldset fieldset fieldset fieldset 71 | { 72 | background-color: #fff; 73 | } 74 | 75 | fieldset fieldset fieldset, 76 | fieldset fieldset fieldset fieldset fieldset, 77 | fieldset fieldset fieldset fieldset fieldset fieldset fieldset 78 | { 79 | background-color: #F7F7F7; 80 | } 81 | 82 | .limpar { 83 | clear: both; 84 | } 85 | 86 | .clicavel { 87 | cursor: pointer; 88 | } 89 | 90 | .escondido { 91 | display: none; 92 | } -------------------------------------------------------------------------------- /ponto/css/tabela.css: -------------------------------------------------------------------------------- 1 | /* CSS Document */ 2 | 3 | /* Modelo 1 de tabela */ 4 | 5 | table.modelo1 { 6 | border-collapse:collapse; 7 | margin: 10px; 8 | background-color: #efefef; 9 | } 10 | 11 | table.cemPorCento { 12 | width: 98%; 13 | } 14 | 15 | table.modelo1 td { 16 | padding: 3px 5px; 17 | margin: 0; 18 | border: 1px solid #CDCDCD; 19 | } 20 | 21 | table.modelo1 th { 22 | padding: 3px 5px; 23 | height: 28px; 24 | color: #006699; 25 | background: url(imgs/fundo_tab.jpg) repeat-x; 26 | border: 1px solid #8DCEFF; 27 | text-align: center; 28 | } 29 | 30 | .esq, .esquerda { 31 | text-align:left; 32 | padding-left: 10px; 33 | } 34 | .dir, .direita { 35 | text-align:right; 36 | padding-left: 10px; 37 | } 38 | 39 | table.modelo1 tbody tr:nth-child(odd) { 40 | background-color: #FFFFFF; 41 | } 42 | table.modelo1 tbody tr:nth-child(even) { 43 | background-color: #efefef; 44 | } 45 | table.modelo1 tbody tr:nth-child(odd):hover { 46 | background-color: #E4EDF5; 47 | } 48 | table.modelo1 tbody tr:nth-child(even):hover { 49 | background-color: #CCDDED; 50 | } 51 | 52 | table.centralizada { 53 | margin: 10px auto; 54 | } -------------------------------------------------------------------------------- /ponto/css/texto.css: -------------------------------------------------------------------------------- 1 | 2 | h1 { 3 | font-size: 1.5em; 4 | color: #005B95; 5 | padding: 0 0px 10px; 6 | } 7 | 8 | h2 { 9 | font-size: 14px; 10 | padding: 5px 0px; 11 | color: #666; 12 | font-weight: normal; 13 | } 14 | 15 | h3 { 16 | font-size: 12px; 17 | padding: 5px 0px; 18 | } 19 | 20 | /*Fieldsets expansiveis*/ 21 | fieldset.expansivel { 22 | padding: 0; 23 | } 24 | 25 | fieldset.expansivel legend { 26 | padding: 0.5em 1em 0.5em 2em; 27 | margin-left: 0.5em; 28 | background: url("imgs/expandir.gif") no-repeat; 29 | background-position: 0.5em center; 30 | cursor: pointer; 31 | transition: all .3s ease-out; 32 | } 33 | 34 | fieldset.expansivel .conteudo { 35 | display: none; 36 | padding: 0.5em; 37 | } 38 | 39 | fieldset.expansivel.expandido > legend { 40 | background-image: url("imgs/contrair.gif"); 41 | } 42 | 43 | fieldset.expansivel.expandido > .conteudo { 44 | display: inherit; 45 | } 46 | 47 | /*Avisos*/ 48 | 49 | .fieldInfo.comIcone legend, .fieldSucesso.comIcone legend, 50 | .fieldErro.comIcone legend, .fieldErro.comIconeProibicao legend, .fieldAlerta.comIcone legend 51 | { 52 | margin-left: -40px; 53 | } 54 | 55 | .fieldAlerta { 56 | color: #B14400; 57 | background-color: #FEFEDD !important; 58 | border: 1px solid #B14400; 59 | } 60 | 61 | .fieldAlerta legend{ 62 | color: #B14400; 63 | font-weight: bold; 64 | } 65 | 66 | .fieldAlerta.comIcone { 67 | padding-left: 50px; 68 | background: url(imgs/icone_aviso.png) no-repeat #FEFEDD; 69 | background-position: 5px 50%; 70 | min-height: 30px; 71 | } 72 | 73 | .fieldSucesso{ 74 | color: #007700; 75 | background-color: #E1FFE1 !important; 76 | border: 1px solid #007700; 77 | } 78 | 79 | .fieldSucesso legend{ 80 | color: #007700; 81 | font-weight: bold; 82 | } 83 | 84 | .fieldSucesso.comIcone { 85 | padding-left: 50px; 86 | background: url(imgs/icone_sucesso.png) no-repeat #E1FFE1; 87 | background-position: 5px 50%; 88 | min-height: 30px; 89 | } 90 | 91 | .fieldErro { 92 | color: #AA0000; 93 | background-color: #FFE1E1 !important; 94 | border: 1px solid #a00; 95 | } 96 | 97 | .fieldErro legend{ 98 | color: #AA0000; 99 | font-weight: bold; 100 | } 101 | 102 | .fieldErro.comIcone { 103 | padding-left: 50px; 104 | background: url(imgs/icone_erro.png) no-repeat #FFE1E1; 105 | background-position: 5px 50%; 106 | min-height: 30px; 107 | } 108 | 109 | .fieldErro.comIconeProibicao { 110 | padding-left: 50px; 111 | background: url(imgs/icone_proibido.png) no-repeat #FFE1E1; 112 | background-position: 5px 50%; 113 | min-height: 30px; 114 | } 115 | 116 | .fieldInfo { 117 | color: #006699; 118 | background-color: #F2F9FF !important; 119 | border: 1px solid #006699; 120 | } 121 | .fieldInfo legend { 122 | color: #006699; 123 | font-weight: bold; 124 | } 125 | 126 | .fieldInfo.comIcone { 127 | padding-left: 50px; 128 | background: url(imgs/icone_informacao.png) no-repeat #F2F9FF; 129 | background-position: 5px 50%; 130 | min-height: 30px; 131 | } 132 | 133 | .fieldAlerta legend, .fieldErro legend, .fieldInfo legend, .fieldSucesso legend { 134 | padding: 0 10px; 135 | } 136 | 137 | /* listas */ 138 | 139 | ul.listaSimples { 140 | list-style: square; 141 | margin-left: 25px; 142 | } 143 | 144 | ul.listaComum, ol.listaComum, ul, ol { 145 | margin-left: 25px; 146 | } 147 | 148 | /* classes genericas */ 149 | 150 | .textoCentralizado, .centro { 151 | text-align: center !important; 152 | } 153 | 154 | .textoJustificado { 155 | text-align: justify; 156 | } 157 | 158 | .textoADireita, .alinhaDireita { 159 | text-align: right; 160 | } 161 | 162 | .textoGrande { 163 | font-size: 16px; 164 | font-weight: bold; 165 | } 166 | 167 | .textoAzul, .textoMensagem { 168 | color: #005B95; 169 | } 170 | 171 | .textoVerde, .textoSucesso { 172 | color: #009D00; 173 | } 174 | 175 | .textoVermelho, .textoErro { 176 | color: #CC0000; 177 | } 178 | 179 | .textoAmarelo, .textoAlerta { 180 | color: #c1ae00; 181 | } 182 | 183 | .negrito { 184 | font-weight: bold; 185 | } 186 | 187 | .italico { 188 | font-style: italic; 189 | } -------------------------------------------------------------------------------- /ponto/css/yii.css: -------------------------------------------------------------------------------- 1 | /* FLASH-ALERTS */ 2 | 3 | .error { 4 | background-color: #FFE1E1 !important; 5 | } 6 | 7 | ul.flashes { 8 | list-style-type:none; 9 | } 10 | 11 | div.errorSummary ul { 12 | margin-left: 30px; 13 | } 14 | 15 | /* Flash Messages CSS from Yii (\framework\cli\views\webapp\css\main.css) */ 16 | 17 | div.flash-error, div.flash-notice, div.flash-success, div.errorSummary { 18 | padding: .8em; 19 | margin-bottom: 1em; 20 | border: 2px solid #ddd; 21 | border-radius: 5px; 22 | margin: 10px; 23 | } 24 | 25 | div.flash-error, div.errorSummary { 26 | background: #FFE1E1 !important; 27 | color: #a00 !important; 28 | border-color: #a00 !important; 29 | } 30 | 31 | div.flash-notice { 32 | background: #FEFEDD !important; 33 | color: #B14400 !important; 34 | border-color: #B14400 !important; 35 | } 36 | 37 | div.flash-success { 38 | background: #E1FFE1 !important; 39 | color: #007700 !important; 40 | border-color: #007700 !important; 41 | } 42 | 43 | div.flash-error a , div.errorSummary a{ 44 | color: #a00 !important; 45 | } 46 | 47 | div.flash-notice a { 48 | color: #B14400 !important; 49 | } 50 | 51 | div.flash-success a { 52 | color: #007700 !important; 53 | } 54 | 55 | /* CGRIDVIEW */ 56 | 57 | .grid-view .summary { 58 | margin-top: -12px !important; 59 | } 60 | 61 | .grid-view table { 62 | background-color: #efefef !important; 63 | border-collapse: collapse; 64 | } 65 | 66 | .grid-view table.items th, .grid-view table.table th { 67 | height: 28px !important; 68 | padding: 3px 5px !important; 69 | background: url(imgs/fundo_tab.jpg) repeat-x !important; 70 | background-color: #DFF1FF !important; 71 | color: #006699 !important; 72 | font-size: 1em !important; 73 | border: 1px solid #8DCEFF !important; 74 | 75 | } 76 | 77 | .grid-view table.items th a, .grid-view table.table th a { 78 | color: #006699 !important; 79 | font-size: 1em !important; 80 | text-decoration: underline !important; 81 | } 82 | 83 | .grid-view table.items th a:hover, .grid-view table.table th a:hover { 84 | color: #006699 !important; 85 | text-decoration: none !important; 86 | } 87 | 88 | .grid-view table.item th 89 | { 90 | border: 1px solid white; 91 | } 92 | 93 | .grid-view table.items td, .grid-view table.table td 94 | { 95 | padding: 3px 5px !important; 96 | margin: 0 !important; 97 | border: 1px solid #CDCDCD !important; 98 | font-size: 12px !important; 99 | } 100 | .grid-view table.items tr.even, .grid-view table.table-striped tr:nth-child(even) 101 | { 102 | background-color: #efefef !important; 103 | } 104 | 105 | .grid-view table.items tr.odd, .grid-view table.table-striped tr:nth-child(odd) 106 | { 107 | background-color: #FFFFFF !important; 108 | } 109 | 110 | .grid-view table.items tr.even:hover, .grid-view table.table-striped tr:nth-child(even):hover { 111 | background-color: #CCDDED !important; 112 | } 113 | 114 | .grid-view table.items tr.odd:hover, .grid-view table.table-striped tr:nth-child(odd):hover { 115 | background-color: #E4EDF5 !important; 116 | } 117 | 118 | .grid-view .yiiPager li a { 119 | border-color: #CDCDCD !important; 120 | color: #000 !important; 121 | } 122 | .grid-view .yiiPager li a:hover { 123 | border-color: #666 !important; 124 | } 125 | 126 | .grid-view .yiiPager li.selected a { 127 | background-color: #eee !important; 128 | color: #666 !important; 129 | } 130 | 131 | .grid-view .filters input, 132 | .grid-view .filters select 133 | { 134 | width: 98% !important; 135 | } -------------------------------------------------------------------------------- /ponto/imgs/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/imgs/banner.png -------------------------------------------------------------------------------- /ponto/imgs/fundo-listrado-diagonal.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/imgs/fundo-listrado-diagonal.gif -------------------------------------------------------------------------------- /ponto/imgs/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/imgs/logo.png -------------------------------------------------------------------------------- /ponto/imgs/logoPonto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/imgs/logoPonto.png -------------------------------------------------------------------------------- /ponto/imgs/logo_branco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/imgs/logo_branco.png -------------------------------------------------------------------------------- /ponto/imgs/mouse_normal_g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/imgs/mouse_normal_g.png -------------------------------------------------------------------------------- /ponto/imgs/mouse_normal_xg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/ponto/imgs/mouse_normal_xg.png -------------------------------------------------------------------------------- /ponto/index.php: -------------------------------------------------------------------------------- 1 | run(); 17 | -------------------------------------------------------------------------------- /ponto/js/acompanhamento.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | 3 | /** 4 | * **acompanhamento.js** 5 | * 6 | * Exibe o gráfico circular com a jornada semanal. 7 | * 8 | * @ignore 9 | * @event Evento da biblioteca Circle Progress para exibição e animação do circulo da jornada. 10 | * @link https://github.com/kottenator/jquery-circle-progress 11 | */ 12 | $('#progressoDiario').circleProgress({ 13 | value: $('#progressoDiario').attr('value'), 14 | size: 120, 15 | thickness: 15, 16 | fill: { color: "#ada" } 17 | }); 18 | 19 | /** 20 | * **acompanhamento.js** 21 | * 22 | * Exibe o gráfico circular com a jornada semanal. 23 | * 24 | * @ignore 25 | * @event Evento da biblioteca Circle Progress para exibição e animação do circulo da jornada. 26 | * @link https://github.com/kottenator/jquery-circle-progress 27 | */ 28 | $('#progressoSemanal').circleProgress({ 29 | value: $('#progressoSemanal').attr('value'), 30 | size: 120, 31 | thickness: 15, 32 | fill: { color: "#6c6" } 33 | }); 34 | 35 | /** 36 | * **acompanhamento.js** 37 | * 38 | * Exibe o gráfico circular com a jornada mensal até o dia atual. 39 | * 40 | * @ignore 41 | * @event Evento da biblioteca Circle Progress para exibição e animação do circulo da jornada. 42 | * @link https://github.com/kottenator/jquery-circle-progress 43 | */ 44 | $('#progressoMensalAteHoje').circleProgress({ 45 | value: $('#progressoMensalAteHoje').attr('value'), 46 | size: 120, 47 | thickness: 15, 48 | fill: { color: "#3a3" } 49 | }); 50 | 51 | /** 52 | * **acompanhamento.js** 53 | * 54 | * Exibe o gráfico circular com a jornada mensal. 55 | * 56 | * @ignore 57 | * @event Evento da biblioteca Circle Progress para exibição e animação do circulo da jornada. 58 | * @link https://github.com/kottenator/jquery-circle-progress 59 | */ 60 | $('#progressoMensal').circleProgress({ 61 | value: $('#progressoMensal').attr('value'), 62 | size: 120, 63 | thickness: 15, 64 | fill: { color: "#181" } 65 | }); 66 | 67 | /** 68 | * **acompanhamento.js** 69 | * 70 | * Evento que permitir ao servidor acompanhar o horário de outro vínculo caso 71 | * o mesmo esteja relacionado a mais de um vínculo. 72 | * 73 | * @ignore 74 | * @event Evento onChange. Quando o valor do campo é alterado essa ação é executada 75 | */ 76 | $("#selVinculo").change(function() { 77 | if ($(this).val() != '') { 78 | window.location = HOME + 'acompanhamento/index/?v='+$(this).val(); 79 | } 80 | }); 81 | 82 | /** 83 | * **acompanhamento.js** 84 | * 85 | * Evento para filtragem de datas de acompanhamento. 86 | * 87 | * Esse filtro permite que o usuário selecione o tempo registrado de acordo 88 | * com um ano. 89 | * 90 | * @ignore 91 | * @event Evento onChange. Quando o valor do campo é alterado essa ação é executada 92 | */ 93 | $("#ano").change(function() { 94 | if ($(this).val() != '') { 95 | window.location = HOME + 'acompanhamento/index/?v='+$("#nrVinculo").val()+'&a='+$(this).val(); 96 | } 97 | }); 98 | 99 | /** 100 | * **acompanhamento.js** 101 | * 102 | * Evento para filtragem de datas de acompanhamento. 103 | * 104 | * Esse filtro permite que o usuário selecione o tempo registrado de acordo 105 | * com um mês. 106 | * 107 | * @ignore 108 | * @event Evento onChange. Quando o valor do campo é alterado essa ação é executada 109 | */ 110 | $("#mes").change(function() { 111 | if ($(this).val() != '') { 112 | window.location = HOME + 'acompanhamento/index/?v='+$("#nrVinculo").val()+'&a='+$("#ano").val()+'&m='+$(this).val(); 113 | } 114 | }); 115 | }); 116 | 117 | /** 118 | * **acompanhamento.js** 119 | * 120 | * Função para realizar um pedido de ajuste no horário do servidor. 121 | * 122 | * @param {int} nrPonto Identificador do ponto eletrônico. Chave primária da classe Ponto 123 | * @param {int} novoRegistro Indicador de novo registro 124 | * @returns {void} Redireciona o usuário para a tela com o pedido de ajuste 125 | */ 126 | function ajusta(nrPonto, novoRegistro) { 127 | if (novoRegistro == undefined) { 128 | novoRegistro = ''; 129 | } 130 | window.location = HOME + 'ajuste/pedido/?v='+$("#nrVinculo").val()+'&n='+nrPonto+'&td='+novoRegistro; 131 | } -------------------------------------------------------------------------------- /ponto/js/calendario.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | 3 | /** 4 | * **calendario.js** 5 | * 6 | * Evento que permitir ao servidor acompanhar o horário de outro vínculo caso 7 | * o mesmo esteja relacionado a mais de um vínculo. 8 | * 9 | * @ignore 10 | * @event Evento onChange. Quando o valor do campo é alterado essa ação é executada 11 | */ 12 | $("#selVinculo").change(function() { 13 | if ($(this).val() != '') { 14 | window.location = HOME + 'calendario/index/?v='+$(this).val(); 15 | } 16 | }); 17 | 18 | /** 19 | * **calendario.js** 20 | * 21 | * Evento para filtragem de datas de acompanhamento. 22 | * 23 | * Esse filtro permite que o usuário selecione o tempo registrado de acordo 24 | * com um ano. 25 | * 26 | * @ignore 27 | * @event Evento onChange. Quando o valor do campo é alterado essa ação é executada 28 | */ 29 | $("#ano").change(function() { 30 | if ($(this).val() != '') { 31 | window.location = HOME + 'calendario/index/?v='+$("#nrVinculo").val()+'&a='+$(this).val(); 32 | } 33 | }); 34 | 35 | /** 36 | * **calendario.js** 37 | * 38 | * Evento para filtragem de datas de acompanhamento. 39 | * 40 | * Esse filtro permite que o usuário selecione o tempo registrado de acordo 41 | * com um mês. 42 | * 43 | * @ignore 44 | * @event Evento onChange. Quando o valor do campo é alterado essa ação é executada 45 | */ 46 | $("#mes").change(function() { 47 | if ($(this).val() != '') { 48 | window.location = HOME + 'calendario/index/?v='+$("#nrVinculo").val()+'&a='+$("#ano").val()+'&m='+$(this).val(); 49 | } 50 | }); 51 | }); -------------------------------------------------------------------------------- /ponto/js/consolida.js: -------------------------------------------------------------------------------- 1 | /** 2 | * **consolida.js** 3 | * 4 | * Função utilizada para consolidar os registros do mês. Todos os servidores 5 | * com registro no mês selecionado terão seus horários consolidados. 6 | * 7 | * @returns {void} Mostra na tela uma mensagem de sucesso ou erro na operação 8 | */ 9 | function servidores() { 10 | $("#mensagem").html('Carregando...'); 11 | $.ajax({ 12 | url: HOME + "consolida/cargaHorariaServidores", 13 | type: "GET", 14 | data: { 15 | ano: $('#ano').val(), 16 | mes: $('#mes').val(), 17 | }, 18 | success: function(retorno) { 19 | $("#mensagem").html(retorno); 20 | }, 21 | error: function(retorno) { 22 | alert(retorno); 23 | $("#mensagem").html(''); 24 | } 25 | }); 26 | } 27 | 28 | /** 29 | * **consolida.js** 30 | * 31 | * Função utilizada para consolidar horários de um lote de servidores de um 32 | * determinado mês e ano. 33 | * 34 | * @returns {void} Mostra na tela uma mensagem de sucesso ou erro na operação 35 | */ 36 | function lote() { 37 | $("#mensagem").html('Carregando...'); 38 | $.ajax({ 39 | url: HOME + "consolida/cargaHorariaLote", 40 | type: "GET", 41 | data: { 42 | ano: $('#ano').val(), 43 | mes: $('#mes').val(), 44 | lote: $('#servidores').val(), 45 | }, 46 | success: function(retorno) { 47 | $("#mensagem").html(retorno); 48 | $('#servidores').val(''); 49 | }, 50 | error: function(retorno) { 51 | alert(retorno); 52 | $("#mensagem").html(''); 53 | } 54 | }); 55 | } 56 | -------------------------------------------------------------------------------- /ponto/js/gerencia.js: -------------------------------------------------------------------------------- 1 | 2 | $(document).ready(function() { 3 | iniciaScripts(); 4 | 5 | if ($("#pessoaAcompanhamento").val() != 0) { 6 | renderizaAcompanhamento({ p: $("#pessoaAcompanhamento").val()}); 7 | } 8 | 9 | $("#acServidor").autocomplete({ 10 | source: HOME + "gerencia/servidores", 11 | minLength: 3, 12 | delay: 500, 13 | select: function (event, ui) { 14 | $("#pessoaAcompanhamento").val(ui.item.id); 15 | renderizaAcompanhamento({ p: ui.item.id}); 16 | } 17 | }); 18 | }); 19 | 20 | /** 21 | * **gerencia.js** 22 | * 23 | * Função para mostrar a jornada de trabalho de um servidor pesquisado na tela 24 | * de gerência. 25 | * 26 | * O parâmetro "dados" é passado no seguinte formato: {p: 0} 27 | * 28 | * Para realizar a filtragem por data a função utiliza a seguinte representação: 29 | * ``` 30 | * { 31 | * p: 3, // Chave primária da pessoa 32 | * v: 1, // Número do vínculo da pessoa 33 | * a: 2016, // Ano a ser visualizado 34 | * m: 4 // Número do mês 35 | * } 36 | * ``` 37 | * 38 | * @param {int} JSON contendo a chave p com a chave primária da pessoa como valor 39 | * @returns {void} Mostra os registros de horário da pessoa pesquisada 40 | */ 41 | function renderizaAcompanhamento(dados) { 42 | $.ajax({ 43 | url: HOME + "acompanhamento/pessoa", 44 | type: "POST", 45 | data: dados, 46 | success: function(retorno) { 47 | $("#acompanhamento").html(retorno); 48 | iniciaScripts(); 49 | }, 50 | error: function(retorno) { 51 | alert(retorno); 52 | } 53 | }); 54 | } 55 | 56 | /** 57 | * **gerencia.js** 58 | * 59 | * Funçao criada para excluir registros de ajustes e abonos no menu da gerência. 60 | * 61 | * @param {int} nr Chave primária do pedido 62 | * @param {string} tipo Tipo de pedido (ajuste ou abono) 63 | * @returns {void} Atualiza a tela após a remoção do pedido ou mostra mensagem de erro 64 | */ 65 | function excluir(nr, tipo) { 66 | if (confirm("Tem certeza que deseja excluir esse pedido de ajuste?")) { 67 | $.ajax({ 68 | type: 'POST', 69 | url: HOME + 'gerencia/excluirPedido', 70 | data: { nr: nr, tipo: tipo }, 71 | success: function (result) { 72 | alert(result); 73 | if (result.indexOf("sucesso") != -1) 74 | document.location.reload(true); 75 | }, 76 | error: function (result) { 77 | alert(result); 78 | } 79 | }); 80 | } 81 | } 82 | 83 | /** 84 | * **gerencia.js** 85 | * 86 | * Script para definir os eventos da página de acompanhamento, como os circulos 87 | * que exibem a jornada de trabalho do servidor pesquisado e os elementos de 88 | * seleção de datas para filtragem de carga horária. 89 | * 90 | * @returns {void} Inicializa os eventos da página 91 | */ 92 | function iniciaScripts() { 93 | $('#progressoDiario').circleProgress({ 94 | value: $('#progressoDiario').attr('value'), 95 | size: 120, 96 | thickness: 15, 97 | fill: { color: "#ada" } 98 | }); 99 | $('#progressoSemanal').circleProgress({ 100 | value: $('#progressoSemanal').attr('value'), 101 | size: 120, 102 | thickness: 15, 103 | fill: { color: "#6c6" } 104 | }); 105 | $('#progressoMensalAteHoje').circleProgress({ 106 | value: $('#progressoMensalAteHoje').attr('value'), 107 | size: 120, 108 | thickness: 15, 109 | fill: { color: "#3a3" } 110 | }); 111 | $('#progressoMensal').circleProgress({ 112 | value: $('#progressoMensal').attr('value'), 113 | size: 120, 114 | thickness: 15, 115 | fill: { color: "#181" } 116 | }); 117 | $("#selVinculo").change(function() { 118 | if ($(this).val() != '') { 119 | renderizaAcompanhamento({p:$("#pessoaAcompanhamento").val(), v:$(this).val()}); 120 | } 121 | }); 122 | $("#ano").change(function() { 123 | if ($(this).val() != '') { 124 | renderizaAcompanhamento({p:$("#pessoaAcompanhamento").val(), v:$("#nrVinculo").val(), a:$(this).val()}); 125 | } 126 | }); 127 | $("#mes").change(function() { 128 | if ($(this).val() != '') { 129 | renderizaAcompanhamento({p:$("#pessoaAcompanhamento").val(), v:$("#nrVinculo").val(), a:$("#ano").val(), m:$(this).val()}); 130 | } 131 | }); 132 | } -------------------------------------------------------------------------------- /ponto/js/pedidosAvaliacao.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | $("#modal").dialog({title: "Informações do Pedido", autoOpen: false, width: 600, height: 450}); 3 | }); 4 | 5 | /** 6 | * **pedidosAvaliacao.js** 7 | * 8 | * Função utilizada para mostrar detalhes de um pedido de ajuste. Quando chamada 9 | * um modal é aberto com as informações do pedido. 10 | * 11 | * @param {int} nr Número do pedido a ser excluido 12 | * @param {string} tipo Tipo do pedido. Na tela de ajustes tem o valor "ajuste" 13 | * @returns {void} Mostra um modal com o pedido solicitado ou uma mensagem de erro 14 | */ 15 | function verPedido(nr, tipo) { 16 | $.ajax({ 17 | url: HOME+"ajuste/dadosPedido", 18 | type: 'POST', 19 | data: {'nr': nr, 'tipo': tipo}, 20 | success: function(retorno) { 21 | $("#modal").html(retorno); 22 | $("#modal").dialog('open'); 23 | $("#justificativa").focus(); 24 | }, 25 | error: function(retorno) { 26 | alert(retorno); 27 | } 28 | }); 29 | } 30 | 31 | /** 32 | * **pedidosAvaliacao.js** 33 | * 34 | * Método utilizada para certificar um pedido de ajuste. Ao ser chamada, o método 35 | * faz uma requisição ao servidor contendo o tipo de pedido e o estado dele. 36 | * 37 | * @param {char} certifica S ou N indicando a aprovação ou reprovação do pedido de ajuste 38 | * @param {String} tipo Tipo do ajuste solicitado. 39 | * @returns {void} Mostra uma mensagem de sucesso ou erro após a tentativa de certificação 40 | */ 41 | function certificarPedido(certifica, tipo) { 42 | if ($("#nrAjuste").val() != '') { 43 | if ((certifica == 'N') && ($("#justificativa").val().length < 3)) { 44 | $("#lblJustificativa").html("justificativa não pode ser vazia").addClass('textoVermelho'); 45 | $("#justificativa").css('border', '1px solid #c00'); 46 | } 47 | else { 48 | $.ajax({ 49 | url: HOME+"ajuste/certificaPedido", 50 | type: 'POST', 51 | dataType: 'JSON', 52 | data: { 53 | nrPedido: $("#nrPedido").val(), 54 | tipo: tipo, 55 | certifica: certifica, 56 | justificativa: $("#justificativa").val(), 57 | }, 58 | success: function(retorno) { 59 | $("#modal").html('
'+retorno.mensagem+'
'); 60 | if (retorno.mensagem.indexOf("sucesso") != -1) { 61 | setTimeout(function(){window.location=HOME+"ajuste/pedidosAvaliacao/"}, 2000); 62 | } 63 | }, 64 | error: function(retorno) { 65 | alert(retorno); 66 | } 67 | }); 68 | } 69 | } 70 | } 71 | 72 | /** 73 | * **pedidosAvaliacao.js** 74 | * 75 | * Função utilizada para certificar vários pedidos de uma vez só. Ao ser chamada, 76 | * o método faz uma requisição ao servidor contendo os tipos e estados de todos 77 | * os pedidos ainda não certificados que estejam visiveis na tela do usuário. 78 | * 79 | * @param {String} tipo Tipo do ajuste solicitado. 80 | * @returns {void} Mostra uma mensagem de sucesso ou erro após a tentativa de certificação 81 | */ 82 | function certificarSelecionados(tipo) { 83 | var pedidos = $("input[name=certificar"+tipo+"]:checked"); 84 | if (pedidos.length > 0) { 85 | var certificar = {}; 86 | $(pedidos).each(function(i, pedido) { 87 | certificar[i] = $(pedido).val(); 88 | }); 89 | $.ajax({ 90 | url: HOME+"ajuste/certificaVarios", 91 | type: 'POST', 92 | dataType: 'JSON', 93 | data: { 94 | pedidos: certificar, 95 | tipo: tipo, 96 | }, 97 | success: function(retorno) { 98 | $("#modal").html('
'+retorno.mensagem+'
'); 99 | $("#modal").dialog('open'); 100 | if (retorno.mensagem.indexOf("sucesso") != -1) { 101 | setTimeout(function(){window.location=HOME+"ajuste/pedidosAvaliacao/"}, 2000); 102 | } 103 | }, 104 | error: function(retorno) { 105 | alert(retorno); 106 | } 107 | }); 108 | } 109 | } -------------------------------------------------------------------------------- /ponto/js/pedidosCertificados.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | $("#modal").dialog({title: "Informações do Pedido", autoOpen: false, width: 600, height: 450}); 3 | }); 4 | 5 | /** 6 | * **pedidosCertificados.js** 7 | * 8 | * Função utilizada para mostrar detalhes de um pedido de ajuste já certificado. 9 | * Quando chamada um modal é aberto com as informações do pedido. 10 | * 11 | * @param {int} nr Número do pedido a ser excluido 12 | * @param {string} tipo Tipo do pedido. Na tela de ajustes tem o valor "ajuste" 13 | * @returns {void} Mostra um modal com o pedido solicitado ou uma mensagem de erro 14 | */ 15 | function verPedido(nr, tipo) { 16 | $.ajax({ 17 | url: HOME+"ajuste/dadosPedidoCertificado", 18 | type: 'POST', 19 | data: {'nr': nr, 'tipo': tipo}, 20 | success: function(retorno) { 21 | $("#modal").html(retorno); 22 | $("#modal").dialog('open'); 23 | }, 24 | error: function(retorno) { 25 | alert(retorno); 26 | } 27 | }); 28 | } -------------------------------------------------------------------------------- /ponto/js/relatorio.js: -------------------------------------------------------------------------------- 1 | /** 2 | * **relatorio.js** 3 | * 4 | * Função utilizada para verificar os pedidos em um órgão realizados nos últimos 5 | * 12 mêses. 6 | * 7 | * @returns {void} Mostra os pedidos na tela. 8 | */ 9 | function selecionaOrgao() { 10 | if ($('#orgao').val() != '') { 11 | $('#periodos').load(HOME + 'relatorio/buscaUltimos12Meses', 'orgao='+ $('#orgao').val()); 12 | } 13 | } -------------------------------------------------------------------------------- /ponto/js/restricao.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | 3 | /** 4 | * **restricao.js** 5 | * 6 | * Função que implementa o recurso de autocompletar no campo de pesquisa 7 | * de órgãos da tela de restrições. 8 | * 9 | * @ignore 10 | * @event Evento de autocompletar do jQuery. 11 | * @link https://jqueryui.com/autocomplete/ 12 | */ 13 | $("#acOrgaos").autocomplete({ 14 | source: HOME + "restricao/orgaos", 15 | minLength: 3, 16 | delay: 500, 17 | select: function (event, ui) { 18 | $("#id_orgao").val(ui.item.id); 19 | $("#nomeRestricao").html(ui.item.value); 20 | $("#modal").dialog("open"); 21 | } 22 | }); 23 | 24 | /** 25 | * **restricao.js** 26 | * 27 | * Função que implementa o recurso de autocompletar no campo de pesquisa 28 | * de servidores da tela de restrições. 29 | * 30 | * @ignore 31 | * @event Evento de autocompletar do jQuery. 32 | * @link https://jqueryui.com/autocomplete/ 33 | */ 34 | $("#acPessoas").autocomplete({ 35 | source: HOME + "restricao/pessoas", 36 | minLength: 3, 37 | delay: 500, 38 | select: function (event, ui) { 39 | $("#id_pessoa").val(ui.item.id); 40 | $("#nomeRestricao").html(ui.item.value); 41 | $("#modal").dialog("open"); 42 | } 43 | }); 44 | $("#modal").dialog({width: 500, height: 200, title: "Restrição de IPs", autoOpen: false}); 45 | }); 46 | 47 | /** 48 | * **restricao.js** 49 | * 50 | * Função utilizada para permitir a alteração nos endereços de IP de um restrição 51 | * existente. A função abre um modal mostrando os informações da restrição e os 52 | * campos para preenchimento dos novos endereços de IP no formato IPv4 e IPv6. 53 | * 54 | * @param {int} nr Número da restrição 55 | * @param {string} nome Nome do órgão ao qual essa restrição se aplica 56 | * @param {string} ipv4 Endereço IP a ter a restrição no formato IPv4 57 | * @param {string} ipv6 Endereço IP a ter a restrição no formato IPv6 58 | * @returns {void} Mostra um modal contendo os campos que podem ser alterados 59 | */ 60 | function alteraRestricao(nr, nome, ipv4, ipv6) { 61 | $("#CodRestricao").val(nr); 62 | $("#nomeRestricao").html(nome); 63 | $("#ipv4").val(ipv4); 64 | $("#ipv6").val(ipv6); 65 | $("#modal").dialog("open"); 66 | } 67 | 68 | /** 69 | * **restricao.js** 70 | * 71 | * Função utilizada para salvar os dados de uma restrição modificada. Após a 72 | * chamada da função alteraRestricao, que abre o modal com os campos para 73 | * alteração, os dados preenchidos são enviados para o servidor para que a alteração 74 | * seja aplicada. 75 | * 76 | * @returns {void} Mostra um modal contendo os campos que podem ser alterados 77 | */ 78 | function salvarRestricao() { 79 | if (($("#CodRestricao").val() != "") || ($("#id_orgao").val() != "") || ($("#id_pessoa").val() != "")) { 80 | $.ajax({ 81 | type: 'POST', 82 | url: HOME + 'restricao/salvar', 83 | data: $("#formRestricao").serialize(), 84 | success: function (result) { 85 | $("#modal").html(result); 86 | if (result.indexOf("sucesso") != -1) 87 | document.location.reload(true); 88 | }, 89 | error: function (result) { 90 | $("#modal").html(result); 91 | } 92 | }); 93 | } 94 | else { 95 | alert("?"); 96 | } 97 | } 98 | 99 | /** 100 | * **restricao.js** 101 | * 102 | * Função utilizada para remover uma restrição criada. É feita uma requisição 103 | * ao servidor informando o número único da restrição a ser apagada. 104 | * 105 | * @param {int} nr Número da restrição. 106 | * @returns {void} Atualiza a tela em caso de sucesso ou exibe mensagem de erro 107 | */ 108 | function excluiRestricao(nr) { 109 | if (confirm("Tem certeza que deseja exluir essa restrição?")) { 110 | $.ajax({ 111 | type: 'POST', 112 | url: HOME + 'restricao/excluir', 113 | data: { nr: nr }, 114 | success: function (result) { 115 | $("#modal").html(result).dialog('open'); 116 | if (result.indexOf("sucesso") != -1) 117 | document.location.reload(true); 118 | }, 119 | error: function (result) { 120 | $("#modal").html(result).dialog('open'); 121 | } 122 | }); 123 | } 124 | } -------------------------------------------------------------------------------- /ponto/protected/.htaccess: -------------------------------------------------------------------------------- 1 | deny from all -------------------------------------------------------------------------------- /ponto/protected/components/Identidade.php: -------------------------------------------------------------------------------- 1 | 19 | * @package cpd\spell 20 | * @subpackage components 21 | * @version v1.0 22 | * @since v1.0 23 | */ 24 | class Identidade extends CUserIdentity implements IdentidadeInterface 25 | { 26 | 27 | const SESSAO_OK = 0; 28 | const ERRO_SESSAO_INVALIDA = 1; 29 | const ERRO_PESSOA_INVALIDA = 2; 30 | 31 | /** 32 | * Objeto contendo os dados da pessoa autenticada 33 | * 34 | * @var Pessoa 35 | */ 36 | private $_pessoa; 37 | 38 | /** 39 | * Lista indicando as classes que representam os usuários 40 | * 41 | * @var array 42 | */ 43 | private $_modelos; 44 | 45 | /** 46 | * Nome da chave primária correspondente ao id da pessoa 47 | * 48 | * @var string 49 | */ 50 | private $_nomeChave; 51 | 52 | /** 53 | * Contrutor da classe Identidade. 54 | * 55 | * Método sobrecarregado herdado da classe {@see CUserIdentity} para passar 56 | * vazios os parâmetros de usuário e senha. 57 | * 58 | * @ignore 59 | */ 60 | public function __construct() 61 | { 62 | parent::__construct("", ""); 63 | } 64 | 65 | /** 66 | * Método autilizar para definição do atributo $_modelos. 67 | * 68 | * Esse método é utilizado pela classe {@see Sessao} para definir os modelos 69 | * que representam o usuário no sistema. 70 | * 71 | * @param array $modelos 72 | */ 73 | public function defineModelos(array $modelos) 74 | { 75 | $this->_modelos = $modelos; 76 | } 77 | 78 | /** 79 | * Método para controlar o acesso do usuário. 80 | * 81 | * O método verifica se o mesmo tem uma sessão válida. Em caso negativo uma 82 | * sessão tentará ser criada a partir da chave primária correspondente ao 83 | * id da pessoa. 84 | * 85 | * @return boolean TRUE para usuário com sessão válida e false para inválida 86 | */ 87 | public function authenticate() 88 | { 89 | $sessao = Yii::app()->getSession(); 90 | $sessao->open(); 91 | 92 | foreach ($this->_modelos as $nomeChave => $modelo) { 93 | if (isset($sessao[$nomeChave]) and trim($sessao[$nomeChave]) != "") { 94 | $ident = $modelo::model()->findByPk($sessao[$nomeChave]); 95 | if (is_null($ident)) { 96 | $this->errorCode = self::ERRO_PESSOA_INVALIDA; 97 | return false; 98 | } else { 99 | $this->_pessoa = $ident; 100 | $this->_nomeChave = $nomeChave; 101 | $this->username = $sessao[$nomeChave]; 102 | $this->errorCode = self::SESSAO_OK; 103 | return true; 104 | } 105 | } 106 | } 107 | $this->errorCode = self::ERRO_SESSAO_INVALIDA; 108 | return false; 109 | } 110 | 111 | /** 112 | * Método sobrescrito da interface {@see IdentidadeInterface}. 113 | * 114 | * É utilizado para retornar uma instância da classe Pessoa contendo os 115 | * dados do usuário dono da sessão definido no método authenticate(). 116 | * 117 | * @return Pessoa Instância da classe Pessoa correspondente ao usuário da sessão 118 | */ 119 | public function buscaPessoa() 120 | { 121 | return $this->_pessoa; 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /ponto/protected/components/IdentidadeInterface.php: -------------------------------------------------------------------------------- 1 | 18 | * @package cpd\spell 19 | * @subpackage components 20 | * @version v1.0 21 | * @since v1.0 22 | */ 23 | interface IdentidadeInterface 24 | { 25 | 26 | /** 27 | * Método proposto para buscar e retornar pessoas em alguma fonte de dados. 28 | * 29 | * @return Pessoa Uma instância da classe Pessoa 30 | */ 31 | public function buscaPessoa(); 32 | } 33 | -------------------------------------------------------------------------------- /ponto/protected/components/Sessao.php: -------------------------------------------------------------------------------- 1 | preFilter() é invocado. 13 | * 14 | * @author UFRGS 15 | * @package cpd\spell 16 | * @subpackage components 17 | * @version v1.0 18 | * @since v1.0 19 | */ 20 | class Sessao extends CFilter 21 | { 22 | 23 | /** 24 | * Atributo que guarda uma lista com as classes que contém os dados 25 | * utilizados para validação. 26 | * 27 | * É usado o padrão nome_da_chave_primaria => nome_da_classe. 28 | * 29 | * @var array Lista com os modelos utilizados 30 | */ 31 | public $modelos = array("id_pessoa" => "Pessoa"); 32 | 33 | /** 34 | * Método contendo o código utilizado para filtragem de sessão. 35 | * 36 | * Esse método sobrescreve o método do Yii Framework para conter o código 37 | * necessário para verificar a sessão do usuário. 38 | * 39 | * @param CFilterChain Cadeia de filtros a serem executados 40 | * @return boolean Retorna TRUE para sessão válida e FALSE para inválida 41 | * @throws CHttpException Excessão com código 403 indicando sessão expirada 42 | */ 43 | public function preFilter($filterChain) 44 | { 45 | if (is_null(Yii::app()->user->getId())) { 46 | $id = new Identidade(); 47 | $id->defineModelos($this->modelos); 48 | if ($id->authenticate()) { 49 | Yii::app()->user->login($id); 50 | } else { 51 | throw new CHttpException(403, "Sessão expirada."); 52 | } 53 | } 54 | return true; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /ponto/protected/components/UsuarioWeb.php: -------------------------------------------------------------------------------- 1 | 16 | * @package cpd\spell 17 | * @subpackage components 18 | * @version v1.0 19 | * @since v1.0 20 | */ 21 | class UsuarioWeb extends CWebUser 22 | { 23 | 24 | /** 25 | * Atributo contendo o nome correspondente ao usuário da sessão 26 | * 27 | * @var string 28 | */ 29 | public $guestName = 'Visitante'; 30 | 31 | /** 32 | * Instância da classe Pessoa correspondente ao usuário da sessão 33 | * 34 | * @var Pessoa 35 | */ 36 | private $pessoa = null; 37 | 38 | /** 39 | * Implementação da funcionalidade de login no sistema. 40 | * 41 | * Esse método sobrescreve o comportamênto do método da superclasse para 42 | * que os dados de identidade do usuário sejam armazenados na sessão. 43 | * 44 | * @param IdentidadeInterface $identidade Implementação da interface Identidade 45 | * @param int $duration Tempo de duração da sessão 46 | */ 47 | public function login($identidade, $duration = 0) 48 | { 49 | $this->pessoa = $identidade->buscaPessoa(); 50 | $this->setState('__dadosPessoa', serialize($this->pessoa)); 51 | parent::login($identidade, 0); 52 | } 53 | 54 | /** 55 | * Método utilizado para controlar a sessão do usuário 56 | * 57 | * Esse método é definido pelo Yii Framework na superclasse para regenerar 58 | * a sessão do usuário. Porém esse comportamento acaba por desconectar 59 | * alguns usuários logados. A implementação atual corrige esse problema. 60 | * 61 | * @param int|null $id Chave primária da classe Pessoa. É usado NULL em caso de visitante 62 | * @param string $name Nome do usuário 63 | * @param array $states Dados do usuário armazenados na sessão 64 | */ 65 | protected function changeIdentity($id, $name, $states) 66 | { 67 | $this->setId($id); 68 | $this->setName($name); 69 | $this->loadIdentityStates($states); 70 | } 71 | 72 | /** 73 | * Método para retornar os dados de uma pessoa autenticada. 74 | * 75 | * É feita a descerialização do objeto contido na sessão __dadosPessoa e 76 | * retornada em forma de objeto. 77 | * 78 | * @return Pessoa|null Instância contendo os dados da pessoa autenticada 79 | */ 80 | public function getPessoa() 81 | { 82 | if (is_null($this->pessoa)) { 83 | if ($this->hasState('__dadosPessoa')) 84 | $this->pessoa = unserialize($this->getState('__dadosPessoa')); 85 | else 86 | return null; 87 | } 88 | return $this->pessoa; 89 | } 90 | 91 | /** 92 | * Método mágico utilizado para buscar o valor de atributo da pessoa. 93 | * 94 | * O método recebe o nome de um atributo da classe {@see Pessoa} e busca o 95 | * valor correspondente a esse atributo nos dados da pessoa autenticada. 96 | * 97 | * @param string $name Nome da coluna corresponde a informação desejada 98 | * @return string Valor contido no campo informado. 99 | */ 100 | public function __get($name) 101 | { 102 | $pessoa = $this->getPessoa(); 103 | 104 | if (!is_null($pessoa) && $pessoa->hasAttribute($name)) { 105 | return $pessoa->$name; 106 | } 107 | 108 | return parent::__get($name); 109 | } 110 | 111 | /** 112 | * Método utilizado para controle de acesso à operações. 113 | * 114 | * Esse método faz a filtragem de ações do usuário no sistema. Antes de 115 | * executar a ação solicitada o método verifica se o usuário possui ou não 116 | * uma regra de acesso impedindo a operação. 117 | * 118 | * As operações podem ser: entrada, novo, salvar e excluir. 119 | * 120 | * @param string $operation Palavra contendo a ação que o usuário solicitou 121 | * @param array $params Lista de valores necessário para a ação. 122 | * @param boolean $allowCaching Indicador do uso de cache. 123 | * @return boolean Indicador de permissão para a execução. Retorna FALSE em caso de erro. 124 | */ 125 | public function checkAccess($operation, $params = array(), $allowCaching = true) 126 | { 127 | $regra = explode(" ", $operation); 128 | if (!isset($regra[1])) { 129 | return Yii::app()->seguranca->carregaAplicacao($operation)->direitoEntrada(); 130 | } else { 131 | switch ($regra[1]) { 132 | case "entrada": 133 | return Yii::app()->seguranca->carregaAplicacao($regra[0])->direitoEntrada(); 134 | case "novo": 135 | return Yii::app()->seguranca->carregaAplicacao($regra[0])->direitoNovo(); 136 | case "salvar": 137 | return Yii::app()->seguranca->carregaAplicacao($regra[0])->direitoSalvar(); 138 | case "excluir": 139 | return Yii::app()->seguranca->carregaAplicacao($regra[0])->direitoExcluir(); 140 | } 141 | return false; 142 | } 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /ponto/protected/config/config.php: -------------------------------------------------------------------------------- 1 | array( 4 | 'application.models.*', 5 | 'application.components.*', 6 | 'application.controllers.BaseController', 7 | ), 8 | 'preload'=>array('log'), 9 | 'components' => array( 10 | 'assetManager' => array('class' => 'CAssetManager', ), 11 | 'errorHandler' => array( 12 | 'errorAction' => 'base/Error', 13 | ), 14 | 'user' => array( 15 | 'class' => 'application.components.UsuarioWeb' 16 | ), 17 | 'seguranca' => array( 18 | 'class' => 'application.components.ComponenteSeguranca', 19 | 'permissao' => array(), 20 | ), 21 | // TODO - configurar acesso ao banco de dados 22 | 'db'=>array( 23 | 'connectionString' => 'mysql:host=localhost:3307;dbname=ponto', 24 | 'emulatePrepare' => true, 25 | 'username' => 'root', 26 | 'password' => 'usbw', 27 | 'charset' => 'utf8', 28 | ), 29 | 'urlManager' => array( 30 | 'urlFormat' => 'path', 31 | 'showScriptName' => false, 32 | 'caseSensitive'=>false, 33 | 'rules' => array( 34 | '/'=>'/ver', 35 | '//'=>'/', 36 | '///'=>'/', 37 | '/'=>'/' 38 | ), 39 | ), 40 | 'log'=>array( 41 | 'class'=>'CLogRouter', 42 | 'routes'=>array( 43 | array( 44 | 'class'=>'CFileLogRoute', 45 | 'levels'=>'error, warning, trace, profile', 46 | 'filter' => 'CLogFilter', 47 | ), 48 | // uncomment the following to show log messages on web pages 49 | // array( 50 | // 'class'=>'CWebLogRoute', 51 | // ), 52 | ), 53 | ), 54 | ), 55 | 'defaultController' => 'registro', 56 | 'name' => 'Ponto Eletrônico', 57 | 'charset' => 'utf-8', 58 | 'sourceLanguage' => 'pt_br', 59 | 'language' => 'pt_br', 60 | ); 61 | -------------------------------------------------------------------------------- /ponto/protected/controllers/GerenciaController.php: -------------------------------------------------------------------------------- 1 | 14 | * @package cpd\spell 15 | * @subpackage controllers 16 | * @version v1.0 17 | * @since v1.0 18 | */ 19 | class GerenciaController extends BaseController 20 | { 21 | 22 | /** 23 | * Action utilizada para mostrar o menu de tabs da tela de gerência. 24 | * 25 | * Aqui são buscados todos os registros de horários, solicitações de ajustes 26 | * e abonos. Estes dados são exibidos na tela juntamente com campos para 27 | * pesquisa de tais dados. 28 | */ 29 | public function actionIndex() 30 | { 31 | $registros = new Ponto('search'); 32 | if (isset($_GET['Ponto'])) { 33 | $registros->attributes = $_GET['Ponto']; //Campos do modelo 34 | } 35 | 36 | $ajustes = new Ajuste('search'); 37 | if (isset($_GET['Ajuste'])) { 38 | $ajustes->attributes = $_GET['Ajuste']; //Campos do modelo 39 | } 40 | 41 | $abonos = new Abono('search'); 42 | if (isset($_GET['Abono'])) { 43 | $abonos->attributes = $_GET['Abono']; //Campos do modelo 44 | } 45 | 46 | $this->render('index', array( 47 | 'registros' => $registros, 48 | 'ajustes' => $ajustes, 49 | 'abonos' => $abonos, 50 | 'acompanhamento' => '', 51 | )); 52 | } 53 | 54 | /** 55 | * Action para exclução de um pedido de compensação. 56 | * 57 | * O método deve receber o parâmetro "nr" via método POST para realizar uma 58 | * busca por um objeto da classe {@see Compensacao} com uma chave primária 59 | * correspondente. Além do parâmetro nr também necessário passar o parâmetro 60 | * tipo inidicando o tipo de pedido. 61 | * 62 | * O sucesso ou falha da operação é indicado pela string retornada pelo 63 | * método usando o comando print. 64 | */ 65 | public function actionExcluirPedido() 66 | { 67 | if (isset($_POST['nr'], $_POST['tipo']) && in_array($_POST['tipo'], array('ajuste', 'abono'))) { 68 | if ($_POST['tipo'] == 'ajuste') { 69 | $pedido = Ajuste::model()->findByPk($_POST['nr']); 70 | $chave = 'nr_ajuste'; 71 | $dataPedido = $pedido->data_hora_ponto; 72 | } 73 | else { 74 | $pedido = Abono::model()->findByPk($_POST['nr']); 75 | $chave = 'nr_abono'; 76 | $dataPedido = $pedido->data_abono; 77 | } 78 | 79 | $matriculaServidor = $pedido->matricula; 80 | $nrVinculo = $pedido->nr_vinculo; 81 | ArquivoAjuste::model()->deleteAllByAttributes(array($chave => $_POST['nr'])); 82 | 83 | if ($pedido->delete()) { 84 | 85 | // Se a exclusão está acontecendo após o fechamento do mês do pedido, recalcula o total de horas 86 | if ((date('m') > date('m', strtotime($dataPedido))) || (date('Y') > date('Y', strtotime($dataPedido)))) { 87 | $mesAnterior = (date('m') != 1 ? date('m')-1 : 12); 88 | $anoAnterior = (date('m') != 1 ? date('Y') : date('Y')-1); 89 | CargaHorariaMesServidor::buscaDadosESalva($matriculaServidor, $nrVinculo, $mesAnterior, $anoAnterior); 90 | } 91 | print 'Pedido excluído com sucesso!'; 92 | } 93 | else { 94 | print 'Ocorreu um erro ao excluir o pedido.'.print_r($pedido->getErrors(), true); 95 | } 96 | } 97 | } 98 | 99 | /** 100 | * Action utilizada para pesquisa de servidores da Universidade. 101 | * 102 | * O método recebe uma parâmetro com o termo a ser comparado com o nome e 103 | * com o código da pessoa usando o comando LIKE da linguaguem SQL. 104 | * 105 | * Os resultadores encontrados serão devolvidos em formato JSON seguindo o 106 | * exemplo: 107 | * 108 | * 109 | * { 110 | * "id": 0, 111 | * "label": "0 - Nome", 112 | * "text": "0 - Nome" 113 | * } 114 | * 115 | * 116 | * @param string $term Texto a ser usado na comparação com o nome e o id 117 | */ 118 | public function actionServidores($term) 119 | { 120 | $term = strtoupper(str_replace("'", "''", Helper::tiraAcento(trim($term)))); 121 | $pessoas = Pessoa::model()->with(array( 122 | 'DadoFuncional' => array( 123 | 'select' => '', 124 | 'on' => 'coalesce(DadoFuncional.data_desligamento, DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)) > CURRENT_TIMESTAMP() 125 | and coalesce(DadoFuncional.data_aposentadoria, DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)) > CURRENT_TIMESTAMP()', 126 | 'joinType' => 'inner join' 127 | ) 128 | ))->findAll(array( 129 | 'select' => 't.id_pessoa, t.nome_pessoa, t.nome_pessoa', 130 | 'condition' => " 131 | ( t.nome_pessoa like '%$term%' COLLATE utf8_general_ci or LTRIM(CAST(t.id_pessoa AS char(12))) = '$term' ) 132 | and t.id_pessoa <> :id_pessoa", 133 | 'params' => array( 134 | ':id_pessoa' => Yii::app()->user->id_pessoa, 135 | ), 136 | 'order' => 't.nome_pessoa' 137 | )); 138 | 139 | $opcoes = array(); 140 | if (!empty($pessoas)) { 141 | foreach ($pessoas as $pessoa) { 142 | $opcoes[] = array( 143 | 'id' => $pessoa->id_pessoa, 144 | 'label' => $pessoa->id_pessoa." - ".$pessoa->nome_pessoa, 145 | 'text' => $pessoa->id_pessoa." - ".$pessoa->nome_pessoa 146 | ); 147 | } 148 | } 149 | else { 150 | $opcoes[] = array( 151 | 'id' => '', 152 | 'label' => 'Nenhum servidor encontrado', 153 | 'text' => 'Nenhum servidor encontrado' 154 | ); 155 | } 156 | 157 | print CJSON::encode($opcoes); 158 | //Yii::app()->end(); 159 | } 160 | } 161 | -------------------------------------------------------------------------------- /ponto/protected/controllers/TempLoginController.php: -------------------------------------------------------------------------------- 1 | 12 | * @package cpd\spell 13 | * @subpackage controllers 14 | * @version v1.0 15 | * @since v1.0 16 | */ 17 | class TempLoginController extends BaseController 18 | { 19 | 20 | /** 21 | * Action utlizada para permitir o login do usuário. 22 | * 23 | * Esse método permite o login nos ambientes de teste e produção e tem três 24 | * comportamentos: 25 | * 26 | * - Exibir a tela de autenticação para um usuário não logado 27 | * - Realizar o login de um usuário 28 | * - Redirecionar um usuário logado para a tela de acompanhamento de horários 29 | * 30 | * @todo Testar o login em ambiente de produção 31 | * @todo Registrar erro de login em arquivo de LOG 32 | * @todo Registrar sucesso em fazer login 33 | */ 34 | public function actionLogin() 35 | { 36 | if (isset($_POST['usuario'])) { 37 | $usuario = intval($_POST['usuario']) % 1000000; // Usuário é numérico com no máximo 6 digitos 38 | $senha = str_replace("'", "''", $_POST['senha']); 39 | 40 | if (AMBIENTE == 'producao') { 41 | // TODO teste de senha em ambiente de produção 42 | if ($erro) { 43 | // TODO registro da falha em log 44 | 45 | $this->render('login', array( 46 | 'usuario' => $usuario, 47 | 'mensagem' => $result['mensagem'], 48 | )); 49 | Yii::app()->end(); 50 | } 51 | } 52 | // TODO registro do acesso com sucesso 53 | Yii::app()->session['id_pessoa'] = $usuario; 54 | $this->redirect('/ponto/acompanhamento/index'); 55 | } else if (isset(Yii::app()->session['id_pessoa'])) { 56 | $this->redirect('/ponto/acompanhamento/index'); 57 | } else { 58 | $this->render('login'); 59 | } 60 | } 61 | 62 | /** 63 | * Action utlizada para realizar o logout do usuário. 64 | * 65 | * A sessão do usuário é destruída e o mesmo é redirecionado para a página 66 | * de login. 67 | */ 68 | public function actionSair() 69 | { 70 | Yii::app()->session->destroy(); 71 | Yii::app()->session->close(); 72 | $this->redirect('login'); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /ponto/protected/models/ArquivoAjuste.php: -------------------------------------------------------------------------------- 1 | 22 | * @package cpd\spell 23 | * @subpackage models 24 | * @version v1.0 25 | * @since v1.0 26 | */ 27 | class ArquivoAjuste extends CActiveRecord 28 | { 29 | /** 30 | * Método do Yii Framework para definição da tabela associada ao objeto 31 | * 32 | * A string retornada define para o Yii qual tabela contém os registros a 33 | * serem mapeados para essa classe. 34 | * 35 | * @return string Nome da tabela no banco de dados associada ao objeto 36 | */ 37 | public function tableName() 38 | { 39 | return 'arquivo_ajuste'; 40 | } 41 | 42 | /** 43 | * Método do Yii Framework para definição da chave primária do objeto 44 | * 45 | * A string retornada indica a coluna contendo o identificador único do 46 | * objetos. 47 | * 48 | * @return string Nome da coluna referente à chave primária do objeto 49 | */ 50 | public function primaryKey() 51 | { 52 | return 'nr_arquivo_ajuste'; 53 | } 54 | 55 | /** 56 | * Método do Yii Framework para definição de regras de validação 57 | * 58 | * Aqui são definidos os atributos das colunas da tabela que presenta o 59 | * objeto como os campos que aceitam valores nulos e tamanho máximo de 60 | * caracteres suportados. 61 | * 62 | * É recomendado apenas definir as regras para os atributos que forem ser 63 | * utilizados com dados do usuário. 64 | * 65 | * @link http://www.yiiframework.com/doc/guide/1.1/en/form.model#declaring-validation-rules Como declarar regras 66 | * @return array Regras de validação para este modelo 67 | */ 68 | public function rules() 69 | { 70 | return array( 71 | array('cod_repositorio', 'required'), 72 | array('nr_arquivo_ajuste, nr_ajuste, nr_abono, cod_repositorio', 'length', 'max'=>12), 73 | array('descricao_arquivo', 'length', 'max'=>256), 74 | array('nr_arquivo_ajuste, nr_ajuste, nr_abono, cod_repositorio, descricao_arquivo', 'safe', 'on'=>'search'), 75 | ); 76 | } 77 | 78 | /** 79 | * Método do Yii Framework para definição de relacionamentos entre tabelas 80 | * 81 | * Aqui são definidos as tabelas, os tipos de relação e as colunas que as 82 | * possuem. 83 | * 84 | * @link http://www.yiiframework.com/doc/guide/1.1/en/database.arr#declaring-relationship Como declarar relacionamentos 85 | * @return array Relacionamentos que esta tabela possui 86 | */ 87 | public function relations() 88 | { 89 | return array( 90 | ); 91 | } 92 | 93 | /** 94 | * Método do Yii Framework para definir descrições às colunas da tabela 95 | * 96 | * Aqui são definidos nomes mais amigáveis aos atributos do objeto. É 97 | * utilizado para gerar mensagens de erros mais claras e mostrar dados nas 98 | * telas da aplicação. 99 | * 100 | * @return array Lista de descrições no formato 'coluna'=>'descrição' 101 | */ 102 | public function attributeLabels() 103 | { 104 | return array( 105 | 'nr_arquivo_ajuste' => 'Nr Seq Arquivo Ajuste', 106 | 'nr_ajuste' => 'Nr Seq Ajuste', 107 | 'nr_abono' => 'Nr Seq Abono', 108 | 'cod_repositorio' => 'Indentificador Repositorio', 109 | 'descricao_arquivo' => 'Descricao Arquivo', 110 | ); 111 | } 112 | 113 | /** 114 | * Método do Yii Framework para buscar modelos 115 | * 116 | * Aqui é feita a pesquisa de um modelo de acordo com determinadas condições 117 | * passadas por parâmetro. 118 | * 119 | * @return CActiveDataProvider Conjunto de dados retornados da consulta 120 | */ 121 | public function search() 122 | { 123 | $criteria=new CDbCriteria; 124 | 125 | $criteria->compare('nr_arquivo_ajuste',$this->nr_arquivo_ajuste,true); 126 | $criteria->compare('nr_ajuste',$this->nr_ajuste,true); 127 | $criteria->compare('nr_abono',$this->nr_abono,true); 128 | $criteria->compare('cod_repositorio',$this->cod_repositorio,true); 129 | $criteria->compare('descricao_arquivo',$this->descricao_arquivo,true); 130 | 131 | return new CActiveDataProvider($this, array( 132 | 'criteria'=>$criteria, 133 | )); 134 | } 135 | 136 | /** 137 | * Método do Yii Framework para retornar a instância da classe 138 | * 139 | * Esse método deve ser implementado em todas as classe {@see CActiveRecord} 140 | * para permitir que o framework encontre a classe. 141 | * 142 | * @param string $className Nome da classe que é Active Record. 143 | * @return ArquivoAjuste A classe que é Active Record 144 | */ 145 | public static function model($className=__CLASS__) 146 | { 147 | return parent::model($className); 148 | } 149 | } 150 | -------------------------------------------------------------------------------- /ponto/protected/models/CategoriaFuncional.php: -------------------------------------------------------------------------------- 1 | 20 | * @package cpd\spell 21 | * @subpackage models 22 | * @version v1.0 23 | * @since v1.0 24 | */ 25 | class CategoriaFuncional extends CActiveRecord 26 | { 27 | 28 | /** 29 | * Método do Yii Framework para retornar a instância da classe 30 | * 31 | * Esse método deve ser implementado em todas as classe {@see CActiveRecord} 32 | * para permitir que o framework encontre a classe. 33 | * 34 | * @param string $className Nome da classe que é Active Record. 35 | * @return CategoriaFuncional A classe que é Active Record 36 | */ 37 | public static function model($className=__CLASS__) 38 | { 39 | return parent::model($className); 40 | } 41 | 42 | /** 43 | * Método do Yii Framework para definição da tabela associada ao objeto 44 | * 45 | * A string retornada define para o Yii qual tabela contém os registros a 46 | * serem mapeados para essa classe. 47 | * 48 | * @return string Nome da tabela no banco de dados associada ao objeto 49 | */ 50 | public function tableName() 51 | { 52 | return 'categoria'; 53 | } 54 | 55 | /** 56 | * Método do Yii Framework para definição da chave primária do objeto 57 | * 58 | * A string retornada indica a coluna contendo o identificador único do 59 | * objetos. 60 | * 61 | * @return string Nome da coluna referente à chave primária do objeto 62 | */ 63 | public function primaryKey() 64 | { 65 | return array('id_categoria'); 66 | } 67 | 68 | /** 69 | * Método do Yii Framework para definição de relacionamentos entre tabelas 70 | * 71 | * Aqui são definidos as tabelas, os tipos de relação e as colunas que as 72 | * possuem. 73 | * 74 | * @link http://www.yiiframework.com/doc/guide/1.1/en/database.arr#declaring-relationship Como declarar relacionamentos 75 | * @return array Relacionamentos que esta tabela possui 76 | */ 77 | public function relations() 78 | { 79 | return array( 80 | 'grupoEmprego' => array(self::BELONGS_TO, 'GrupoEmprego', 'id_grupo'), 81 | ); 82 | } 83 | 84 | /** 85 | * Método do Yii Framework para definição de regras de validação 86 | * 87 | * Aqui são definidos os atributos das colunas da tabela que presenta o 88 | * objeto como os campos que aceitam valores nulos e tamanho máximo de 89 | * caracteres suportados. 90 | * 91 | * É recomendado apenas definir as regras para os atributos que forem ser 92 | * utilizados com dados do usuário. 93 | * 94 | * @link http://www.yiiframework.com/doc/guide/1.1/en/form.model#declaring-validation-rules Como declarar regras 95 | * @return array Regras de validação para este modelo 96 | */ 97 | public function rules() 98 | { 99 | return array( 100 | array('id_categoria, nome_categora, regime_trabalho', 'required'), 101 | array('id_categoria', 'length', 'max' => 3), 102 | array('nome_categoria', 'length', 'max' => 255), 103 | array('regime_trabalho', 'length', 'max' => 2) 104 | ); 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /ponto/protected/models/DadoFuncional.php: -------------------------------------------------------------------------------- 1 | 28 | * @package cpd\spell 29 | * @subpackage models 30 | * @version v1.0 31 | * @since v1.0 32 | */ 33 | class DadoFuncional extends CActiveRecord 34 | { 35 | 36 | /** 37 | * Método do Yii Framework para retornar a instância da classe 38 | * 39 | * Esse método deve ser implementado em todas as classe {@see CActiveRecord} 40 | * para permitir que o framework encontre a classe. 41 | * 42 | * @param string $className Nome da classe que é Active Record. 43 | * @return DadoFuncional A classe que é Active Record 44 | */ 45 | public static function model($className = __CLASS__) 46 | { 47 | return parent::model($className); 48 | } 49 | 50 | /** 51 | * Método do Yii Framework para definição da tabela associada ao objeto 52 | * 53 | * A string retornada define para o Yii qual tabela contém os registros a 54 | * serem mapeados para essa classe. 55 | * 56 | * @return string Nome da tabela no banco de dados associada ao objeto 57 | */ 58 | public function tableName() 59 | { 60 | return 'dado_funcional'; 61 | } 62 | 63 | /** 64 | * Método do Yii Framework para definição da chave primária do objeto 65 | * 66 | * A string retornada indica a coluna contendo o identificador único do 67 | * objetos. 68 | * 69 | * @return string Nome da coluna referente à chave primária do objeto 70 | */ 71 | public function primaryKey() 72 | { 73 | return array('matricula', 'nr_vinculo'); 74 | } 75 | 76 | /** 77 | * Método do Yii Framework para definição de relacionamentos entre tabelas 78 | * 79 | * Aqui são definidos as tabelas, os tipos de relação e as colunas que as 80 | * possuem. 81 | * 82 | * @link http://www.yiiframework.com/doc/guide/1.1/en/database.arr#declaring-relationship Como declarar relacionamentos 83 | * @return array Relacionamentos que esta tabela possui 84 | */ 85 | public function relations() 86 | { 87 | return array( 88 | 'OrgaoExercicio' => array(self::BELONGS_TO, 'Orgao', 'orgao_exercicio'), 89 | 'OrgaoLotacao' => array(self::BELONGS_TO, 'Orgao', 'orgao_lotacao'), 90 | 'CatFuncional' => array(self::BELONGS_TO, 'CategoriaFuncional', 'id_categoria'), 91 | 'GrupoEmprego' => array(self::BELONGS_TO, 'GrupoEmprego', 'id_grupo'), 92 | 'Pessoa' => array(self::BELONGS_TO, 'Pessoa', 'id_pessoa'), 93 | ); 94 | } 95 | 96 | /** 97 | * Método do Yii Framework para definição de regras de validação 98 | * 99 | * Aqui são definidos os atributos das colunas da tabela que presenta o 100 | * objeto como os campos que aceitam valores nulos e tamanho máximo de 101 | * caracteres suportados. 102 | * 103 | * É recomendado apenas definir as regras para os atributos que forem ser 104 | * utilizados com dados do usuário. 105 | * 106 | * @link http://www.yiiframework.com/doc/guide/1.1/en/form.model#declaring-validation-rules Como declarar regras 107 | * @return array Regras de validação para este modelo 108 | */ 109 | public function rules() 110 | { 111 | return array( 112 | array('matricula, nr_vinculo, id_pessoa, regime_trabalho, id_grupo, id_categoria, orgao_lotacao, orgao_exercicio, data_ingresso', 'required'), 113 | array('matricula', 'length', 'max' => 8), 114 | array('nr_vinculo', 'length', 'max' => 1), 115 | array('id_pessoa', 'length', 'max' => 6), 116 | array('regime_trabalho', 'length', 'max' => 2), 117 | array('id_grupo', 'length', 'max' => 2), 118 | array('id_categoria', 'length', 'max' => 3), 119 | array('orgao_lotacao, orgao_exercicio', 'length', 'max' => 5) 120 | ); 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /ponto/protected/models/Frequencia.php: -------------------------------------------------------------------------------- 1 | 24 | * @package cpd\spell 25 | * @subpackage models 26 | * @version v1.0 27 | * @since v1.0 28 | */ 29 | class Frequencia extends CActiveRecord { 30 | 31 | /** 32 | * Método do Yii Framework para retornar a instância da classe 33 | * 34 | * Esse método deve ser implementado em todas as classe {@see CActiveRecord} 35 | * para permitir que o framework encontre a classe. 36 | * 37 | * @param string $className Nome da classe que é Active Record. 38 | * @return Frequencia A classe que é Active Record 39 | */ 40 | public static function model($className=__CLASS__) { 41 | return parent::model($className); 42 | } 43 | 44 | /** 45 | * Método do Yii Framework para definição da tabela associada ao objeto 46 | * 47 | * A string retornada define para o Yii qual tabela contém os registros a 48 | * serem mapeados para essa classe. 49 | * 50 | * @return string Nome da tabela no banco de dados associada ao objeto 51 | */ 52 | public function tableName() { 53 | return 'frequencia'; 54 | } 55 | 56 | /** 57 | * Método do Yii Framework para definição da chave primária do objeto 58 | * 59 | * A string retornada indica a coluna contendo o identificador único do 60 | * objetos. 61 | * 62 | * @return string Nome da coluna referente à chave primária do objeto 63 | */ 64 | public function primaryKey() { 65 | return 'nr_frequencia'; 66 | } 67 | 68 | /** 69 | * Método do Yii Framework para definição de relacionamentos entre tabelas 70 | * 71 | * Aqui são definidos as tabelas, os tipos de relação e as colunas que as 72 | * possuem. 73 | * 74 | * @link http://www.yiiframework.com/doc/guide/1.1/en/database.arr#declaring-relationship Como declarar relacionamentos 75 | * @return array Relacionamentos que esta tabela possui 76 | */ 77 | public function relations() { 78 | return array( 79 | 'DadoFuncional' => array(self::BELONGS_TO, 'DadoFuncional', array('matricula' => 'id_pessoa', 'nr_vinculo' => 'nr_vinculo')), 80 | ); 81 | } 82 | 83 | /** 84 | * Método do Yii Framework para definição de regras de validação 85 | * 86 | * Aqui são definidos os atributos das colunas da tabela que presenta o 87 | * objeto como os campos que aceitam valores nulos e tamanho máximo de 88 | * caracteres suportados. 89 | * 90 | * É recomendado apenas definir as regras para os atributos que forem ser 91 | * utilizados com dados do usuário. 92 | * 93 | * @link http://www.yiiframework.com/doc/guide/1.1/en/form.model#declaring-validation-rules Como declarar regras 94 | * @return array Regras de validação para este modelo 95 | */ 96 | public function rules() 97 | { 98 | return array( 99 | array('nr_frequencia, matricula, nr_vinculo, nr_dias, data_frequencia, cod_frequencia', 'required'), 100 | array('nr_frequencia, matricula', 'length', 'max' => 8), 101 | array('nr_vinculo', 'length', 'max' => 1), 102 | array('nr_dias', 'length', 'max' => 11), 103 | array('cod_frequencia', 'length', 'max' => 3) 104 | ); 105 | } 106 | } -------------------------------------------------------------------------------- /ponto/protected/models/GrupoEmprego.php: -------------------------------------------------------------------------------- 1 | 20 | * @package cpd\spell 21 | * @subpackage models 22 | * @version v1.0 23 | * @since v1.0 24 | */ 25 | class GrupoEmprego extends CActiveRecord 26 | { 27 | 28 | /** 29 | * Método do Yii Framework para retornar a instância da classe 30 | * 31 | * Esse método deve ser implementado em todas as classe {@see CActiveRecord} 32 | * para permitir que o framework encontre a classe. 33 | * 34 | * @param string $className Nome da classe que é Active Record. 35 | * @return GrupoEmprego A classe que é Active Record 36 | */ 37 | public static function model($className = __CLASS__) 38 | { 39 | return parent::model($className); 40 | } 41 | 42 | /** 43 | * Método do Yii Framework para definição da tabela associada ao objeto 44 | * 45 | * A string retornada define para o Yii qual tabela contém os registros a 46 | * serem mapeados para essa classe. 47 | * 48 | * @return string Nome da tabela no banco de dados associada ao objeto 49 | */ 50 | public function tableName() 51 | { 52 | return 'grupo_emprego'; 53 | } 54 | 55 | /** 56 | * Método do Yii Framework para definição da chave primária do objeto 57 | * 58 | * A string retornada indica a coluna contendo o identificador único do 59 | * objetos. 60 | * 61 | * @return string Nome da coluna referente à chave primária do objeto 62 | */ 63 | public function primaryKey() 64 | { 65 | return array('id_grupo'); 66 | } 67 | 68 | /** 69 | * Método do Yii Framework para definição de regras de validação 70 | * 71 | * Aqui são definidos os atributos das colunas da tabela que presenta o 72 | * objeto como os campos que aceitam valores nulos e tamanho máximo de 73 | * caracteres suportados. 74 | * 75 | * É recomendado apenas definir as regras para os atributos que forem ser 76 | * utilizados com dados do usuário. 77 | * 78 | * @link http://www.yiiframework.com/doc/guide/1.1/en/form.model#declaring-validation-rules Como declarar regras 79 | * @return array Regras de validação para este modelo 80 | */ 81 | public function rules() 82 | { 83 | return array( 84 | array('id_grupo, segmento_grupo, nome_grupo', 'required'), 85 | array('id_grupo', 'length', 'max' => 2), 86 | array('segmento_grupo', 'length', 'max' => 1), 87 | array('nome_grupo', 'length', 'max' => 150) 88 | ); 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /ponto/protected/models/JustificativaAjuste.php: -------------------------------------------------------------------------------- 1 | 20 | * @package cpd\spell 21 | * @subpackage models 22 | * @version v1.0 23 | * @since v1.0 24 | */ 25 | class JustificativaAjuste extends CActiveRecord 26 | { 27 | /** 28 | * Método do Yii Framework para definição da tabela associada ao objeto 29 | * 30 | * A string retornada define para o Yii qual tabela contém os registros a 31 | * serem mapeados para essa classe. 32 | * 33 | * @return string Nome da tabela no banco de dados associada ao objeto 34 | */ 35 | public function tableName() 36 | { 37 | return 'justificativa_ajuste'; 38 | } 39 | 40 | /** 41 | * Método do Yii Framework para definição da chave primária do objeto 42 | * 43 | * A string retornada indica a coluna contendo o identificador único do 44 | * objetos. 45 | * 46 | * @return string Nome da coluna referente à chave primária do objeto 47 | */ 48 | public function primaryKey() 49 | { 50 | return 'nr_justificativa'; 51 | } 52 | 53 | /** 54 | * Método do Yii Framework para definição de regras de validação 55 | * 56 | * Aqui são definidos os atributos das colunas da tabela que presenta o 57 | * objeto como os campos que aceitam valores nulos e tamanho máximo de 58 | * caracteres suportados. 59 | * 60 | * É recomendado apenas definir as regras para os atributos que forem ser 61 | * utilizados com dados do usuário. 62 | * 63 | * @link http://www.yiiframework.com/doc/guide/1.1/en/form.model#declaring-validation-rules Como declarar regras 64 | * @return array Regras de validação para este modelo 65 | */ 66 | public function rules() 67 | { 68 | return array( 69 | array('nr_justificativa, texto_justificativa', 'required'), 70 | array('nr_justificativa', 'length', 'max'=>2), 71 | array('texto_justificativa', 'length', 'max'=>256), 72 | array('nr_justificativa, texto_justificativa', 'safe', 'on'=>'search'), 73 | ); 74 | } 75 | 76 | /** 77 | * Método do Yii Framework para definição de relacionamentos entre tabelas 78 | * 79 | * Aqui são definidos as tabelas, os tipos de relação e as colunas que as 80 | * possuem. 81 | * 82 | * @link http://www.yiiframework.com/doc/guide/1.1/en/database.arr#declaring-relationship Como declarar relacionamentos 83 | * @return array Relacionamentos que esta tabela possui 84 | */ 85 | public function relations() 86 | { 87 | return array( 88 | 'Ajustes' => array(self::HAS_MANY, 'Ajuste', 'nr_justificativa'), 89 | ); 90 | } 91 | 92 | /** 93 | * Método do Yii Framework para definir descrições às colunas da tabela 94 | * 95 | * Aqui são definidos nomes mais amigáveis aos atributos do objeto. É 96 | * utilizado para gerar mensagens de erros mais claras e mostrar dados nas 97 | * telas da aplicação. 98 | * 99 | * @return array Lista de descrições no formato 'coluna'=>'descrição' 100 | */ 101 | public function attributeLabels() 102 | { 103 | return array( 104 | 'nr_justificativa' => 'Nr Seq', 105 | 'texto_justificativa' => 'Denominação', 106 | ); 107 | } 108 | 109 | /** 110 | * Método do Yii Framework para buscar modelos 111 | * 112 | * Aqui é feita a pesquisa de um modelo de acordo com determinadas condições 113 | * passadas por parâmetro. 114 | * 115 | * @return CActiveDataProvider Conjunto de dados retornados da consulta 116 | */ 117 | public function search() 118 | { 119 | $criteria=new CDbCriteria; 120 | 121 | $criteria->compare('nr_justificativa',$this->nr_justificativa,true); 122 | $criteria->compare('texto_justificativa',$this->texto_justificativa,true); 123 | 124 | return new CActiveDataProvider($this, array( 125 | 'criteria'=>$criteria, 126 | )); 127 | } 128 | 129 | /** 130 | * Método do Yii Framework para retornar a instância da classe 131 | * 132 | * Esse método deve ser implementado em todas as classe {@see CActiveRecord} 133 | * para permitir que o framework encontre a classe. 134 | * 135 | * @param string $className Nome da classe que é Active Record. 136 | * @return JustificativaAjuste A classe que é Active Record 137 | */ 138 | public static function model($className=__CLASS__) 139 | { 140 | return parent::model($className); 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /ponto/protected/models/LogErroAcessoRegistro.php: -------------------------------------------------------------------------------- 1 | 25 | * @package cpd\spell 26 | * @subpackage models 27 | * @version v1.0 28 | * @since v1.0 29 | */ 30 | class LogErroAcessoRegistro extends CActiveRecord 31 | { 32 | /** 33 | * Método do Yii Framework para definição da tabela associada ao objeto 34 | * 35 | * A string retornada define para o Yii qual tabela contém os registros a 36 | * serem mapeados para essa classe. 37 | * 38 | * @return string Nome da tabela no banco de dados associada ao objeto 39 | */ 40 | public function tableName() 41 | { 42 | return 'log_erro_acesso_registro'; 43 | } 44 | 45 | /** 46 | * Método do Yii Framework para definição de regras de validação 47 | * 48 | * Aqui são definidos os atributos das colunas da tabela que presenta o 49 | * objeto como os campos que aceitam valores nulos e tamanho máximo de 50 | * caracteres suportados. 51 | * 52 | * É recomendado apenas definir as regras para os atributos que forem ser 53 | * utilizados com dados do usuário. 54 | * 55 | * @link http://www.yiiframework.com/doc/guide/1.1/en/form.model#declaring-validation-rules Como declarar regras 56 | * @return array Regras de validação para este modelo 57 | */ 58 | public function rules() 59 | { 60 | return array( 61 | array('id_pessoa, matricula, nr_vinculo, data_log, mensagem_log, ip_log, host_log', 'required'), 62 | array('id_pessoa', 'length', 'max'=>6), 63 | array('matricula', 'length', 'max'=>8), 64 | array('nr_vinculo', 'length', 'max'=>1), 65 | array('mensagem_log', 'length', 'max'=>512), 66 | array('ip_log', 'length', 'max'=>39), 67 | array('host_log', 'length', 'max'=>100), 68 | array('nr_log, id_pessoa, matricula, nr_vinculo, data_log, mensagem_log, ip_log, host_log', 'safe', 'on'=>'search'), 69 | ); 70 | } 71 | 72 | /** 73 | * Método do Yii Framework para definição de relacionamentos entre tabelas 74 | * 75 | * Aqui são definidos as tabelas, os tipos de relação e as colunas que as 76 | * possuem. 77 | * 78 | * @link http://www.yiiframework.com/doc/guide/1.1/en/database.arr#declaring-relationship Como declarar relacionamentos 79 | * @return array Relacionamentos que esta tabela possui 80 | */ 81 | public function relations() 82 | { 83 | return array( 84 | ); 85 | } 86 | 87 | /** 88 | * Método do Yii Framework para definir descrições às colunas da tabela 89 | * 90 | * Aqui são definidos nomes mais amigáveis aos atributos do objeto. É 91 | * utilizado para gerar mensagens de erros mais claras e mostrar dados nas 92 | * telas da aplicação. 93 | * 94 | * @return array Lista de descrições no formato 'coluna'=>'descrição' 95 | */ 96 | public function attributeLabels() 97 | { 98 | return array( 99 | 'nr_log' => 'Nr Seq Log', 100 | 'id_pessoa' => 'Cod Pessoa', 101 | 'matricula' => 'Matricula Servidor', 102 | 'nr_vinculo' => 'Nr Vinculo', 103 | 'data_log' => 'Data Hora Log', 104 | 'mensagem_log' => 'Mensagem Erro', 105 | 'ip_log' => 'Iperro', 106 | 'host_log' => 'Host Erro', 107 | ); 108 | } 109 | 110 | /** 111 | * Método do Yii Framework para buscar modelos 112 | * 113 | * Aqui é feita a pesquisa de um modelo de acordo com determinadas condições 114 | * passadas por parâmetro. 115 | * 116 | * @return CActiveDataProvider Conjunto de dados retornados da consulta 117 | */ 118 | public function search() 119 | { 120 | $criteria=new CDbCriteria; 121 | 122 | $criteria->compare('nr_log',$this->nr_log,false); 123 | $criteria->compare('id_pessoa',$this->id_pessoa,false); 124 | $criteria->compare('matricula',$this->matricula,false); 125 | $criteria->compare('nr_vinculo',$this->nr_vinculo,false); 126 | $criteria->compare('data_log',$this->data_log,false); 127 | $criteria->compare('mensagem_log',$this->mensagem_log,false); 128 | $criteria->compare('ip_log',$this->ip_log,false); 129 | $criteria->compare('host_log',$this->host_log,false); 130 | 131 | return new CActiveDataProvider($this, array( 132 | 'criteria'=>$criteria, 133 | )); 134 | } 135 | 136 | /** 137 | * Método do Yii Framework para retornar a instância da classe 138 | * 139 | * Esse método deve ser implementado em todas as classe {@see CActiveRecord} 140 | * para permitir que o framework encontre a classe. 141 | * 142 | * @param string $className Nome da classe que é Active Record. 143 | * @return LogErroAcessoRegistro A classe que é Active Record 144 | */ 145 | public static function model($className=__CLASS__) 146 | { 147 | return parent::model($className); 148 | } 149 | } 150 | -------------------------------------------------------------------------------- /ponto/protected/models/Orgao.php: -------------------------------------------------------------------------------- 1 | 24 | * @package cpd\spell 25 | * @subpackage models 26 | * @version v1.0 27 | * @since v1.0 28 | */ 29 | class Orgao extends CActiveRecord 30 | { 31 | /** 32 | * Método do Yii Framework para retornar a instância da classe 33 | * 34 | * Esse método deve ser implementado em todas as classe {@see CActiveRecord} 35 | * para permitir que o framework encontre a classe. 36 | * 37 | * @param string $className Nome da classe que é Active Record. 38 | * @return Orgao A classe que é Active Record 39 | */ 40 | public static function model($className = __CLASS__) 41 | { 42 | return parent::model($className); 43 | } 44 | 45 | /** 46 | * Método do Yii Framework para definição da tabela associada ao objeto 47 | * 48 | * A string retornada define para o Yii qual tabela contém os registros a 49 | * serem mapeados para essa classe. 50 | * 51 | * @return string Nome da tabela no banco de dados associada ao objeto 52 | */ 53 | public function tableName() 54 | { 55 | return 'Orgao'; 56 | } 57 | 58 | /** 59 | * Método do Yii Framework para definição da chave primária do objeto 60 | * 61 | * A string retornada indica a coluna contendo o identificador único do 62 | * objetos. 63 | * 64 | * @return string Nome da coluna referente à chave primária do objeto 65 | */ 66 | public function primaryKey() 67 | { 68 | return 'id_orgao'; 69 | } 70 | 71 | /** 72 | * Método do Yii Framework para definição de relacionamentos entre tabelas 73 | * 74 | * Aqui são definidos as tabelas, os tipos de relação e as colunas que as 75 | * possuem. 76 | * 77 | * @link http://www.yiiframework.com/doc/guide/1.1/en/database.arr#declaring-relationship Como declarar relacionamentos 78 | * @return array Relacionamentos que esta tabela possui 79 | */ 80 | public function relations() 81 | { 82 | return array( 83 | 'DirigenteOrgao' => array(self::BELONGS_TO, 'DadoFuncional', 'matricula_dirigente'), 84 | 'DirigenteSubstituto' =>array(self::BELONGS_TO, 'DadoFuncional', 'matricula_substituto'), 85 | ); 86 | } 87 | 88 | /** 89 | * Método do Yii Framework para definição de regras de validação 90 | * 91 | * Aqui são definidos os atributos das colunas da tabela que presenta o 92 | * objeto como os campos que aceitam valores nulos e tamanho máximo de 93 | * caracteres suportados. 94 | * 95 | * É recomendado apenas definir as regras para os atributos que forem ser 96 | * utilizados com dados do usuário. 97 | * 98 | * @link http://www.yiiframework.com/doc/guide/1.1/en/form.model#declaring-validation-rules Como declarar regras 99 | * @return array Regras de validação para este modelo 100 | */ 101 | public function rules() 102 | { 103 | return array( 104 | array('id_orgao, sigla_orgao, nome_orgao', 'required'), 105 | array('id_orgao', 'length', 'max' => 5), 106 | array('sigla_orgao', 'length', 'max' => 10), 107 | array('nome_orgao', 'length', 'max' => 255), 108 | array('email', 'length', 'max' => 150), 109 | array('matricula_dirigente, matricula_substituto', 'length', 'max' => 8), 110 | array('id_orgao_superior', 'length', 'max' => 5) 111 | ); 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /ponto/protected/models/Permissao.php: -------------------------------------------------------------------------------- 1 | 21 | * @package cpd\spell 22 | * @subpackage models 23 | * @version v1.0 24 | * @since v1.0 25 | */ 26 | class Permissao extends CActiveRecord { 27 | 28 | /** 29 | * Método do Yii Framework para retornar a instância da classe 30 | * 31 | * Esse método deve ser implementado em todas as classe {@see CActiveRecord} 32 | * para permitir que o framework encontre a classe. 33 | * 34 | * @param string $className Nome da classe que é Active Record. 35 | * @return Permissao A classe que é Active Record 36 | */ 37 | public static function model($className=__CLASS__) { 38 | return parent::model($className); 39 | } 40 | 41 | /** 42 | * Método do Yii Framework para definição da tabela associada ao objeto 43 | * 44 | * A string retornada define para o Yii qual tabela contém os registros a 45 | * serem mapeados para essa classe. 46 | * 47 | * @return string Nome da tabela no banco de dados associada ao objeto 48 | */ 49 | public function tableName() { 50 | return 'permissao'; 51 | } 52 | 53 | /** 54 | * Método do Yii Framework para definição da chave primária do objeto 55 | * 56 | * A string retornada indica a coluna contendo o identificador único do 57 | * objetos. 58 | * 59 | * @return string Nome da coluna referente à chave primária do objeto 60 | */ 61 | public function primaryKey() { 62 | return array('id_aplicacao', 'id_pessoa'); 63 | } 64 | 65 | /** 66 | * Método do Yii Framework para definição de relacionamentos entre tabelas 67 | * 68 | * Aqui são definidos as tabelas, os tipos de relação e as colunas que as 69 | * possuem. 70 | * 71 | * @link http://www.yiiframework.com/doc/guide/1.1/en/database.arr#declaring-relationship Como declarar relacionamentos 72 | * @return array Relacionamentos que esta tabela possui 73 | */ 74 | public function relations() { 75 | return array( 76 | 'Pessoa' => array(self::BELONGS_TO, 'Pessoa', 'id_pessoa'), 77 | ); 78 | } 79 | 80 | /** 81 | * Método do Yii Framework para definição de regras de validação 82 | * 83 | * Aqui são definidos os atributos das colunas da tabela que presenta o 84 | * objeto como os campos que aceitam valores nulos e tamanho máximo de 85 | * caracteres suportados. 86 | * 87 | * É recomendado apenas definir as regras para os atributos que forem ser 88 | * utilizados com dados do usuário. 89 | * 90 | * @link http://www.yiiframework.com/doc/guide/1.1/en/form.model#declaring-validation-rules Como declarar regras 91 | * @return array Regras de validação para este modelo 92 | */ 93 | public function rules() 94 | { 95 | return array( 96 | array('id_aplicacao, id_pessoa, id_orgao', 'required'), 97 | array('id_aplicacao, id_pessoa', 'length', 'max' => 6), 98 | array('id_orgao', 'length', 'max' => 5) 99 | ); 100 | } 101 | } -------------------------------------------------------------------------------- /ponto/protected/models/Pessoa.php: -------------------------------------------------------------------------------- 1 | 21 | * @package cpd\spell 22 | * @subpackage models 23 | * @version v1.0 24 | * @since v1.0 25 | */ 26 | class Pessoa extends CActiveRecord { 27 | 28 | /** 29 | * Método do Yii Framework para retornar a instância da classe 30 | * 31 | * Esse método deve ser implementado em todas as classe {@see CActiveRecord} 32 | * para permitir que o framework encontre a classe. 33 | * 34 | * @param string $className Nome da classe que é Active Record. 35 | * @return Pessoa A classe que é Active Record 36 | */ 37 | public static function model($className=__CLASS__) { 38 | return parent::model($className); 39 | } 40 | 41 | /** 42 | * Método do Yii Framework para definição da tabela associada ao objeto 43 | * 44 | * A string retornada define para o Yii qual tabela contém os registros a 45 | * serem mapeados para essa classe. 46 | * 47 | * @return string Nome da tabela no banco de dados associada ao objeto 48 | */ 49 | public function tableName() { 50 | return 'pessoa'; 51 | } 52 | 53 | /** 54 | * Método do Yii Framework para definição da chave primária do objeto 55 | * 56 | * A string retornada indica a coluna contendo o identificador único do 57 | * objetos. 58 | * 59 | * @return string Nome da coluna referente à chave primária do objeto 60 | */ 61 | public function primaryKey() { 62 | return 'id_pessoa'; 63 | } 64 | 65 | /** 66 | * Método do Yii Framework para definição de relacionamentos entre tabelas 67 | * 68 | * Aqui são definidos as tabelas, os tipos de relação e as colunas que as 69 | * possuem. 70 | * 71 | * @link http://www.yiiframework.com/doc/guide/1.1/en/database.arr#declaring-relationship Como declarar relacionamentos 72 | * @return array Relacionamentos que esta tabela possui 73 | */ 74 | public function relations() { 75 | return array( 76 | 'DadoFuncional' => array(self::HAS_ONE, 'DadoFuncional', 'id_pessoa'), 77 | 'DadosFuncionais' => array(self::HAS_MANY, 'DadoFuncional', 'id_pessoa'), 78 | ); 79 | } 80 | 81 | /** 82 | * Método do Yii Framework para definição de regras de validação 83 | * 84 | * Aqui são definidos os atributos das colunas da tabela que presenta o 85 | * objeto como os campos que aceitam valores nulos e tamanho máximo de 86 | * caracteres suportados. 87 | * 88 | * É recomendado apenas definir as regras para os atributos que forem ser 89 | * utilizados com dados do usuário. 90 | * 91 | * @link http://www.yiiframework.com/doc/guide/1.1/en/form.model#declaring-validation-rules Como declarar regras 92 | * @return array Regras de validação para este modelo 93 | */ 94 | public function rules() 95 | { 96 | return array( 97 | array('id_pessoa, nome_pessoa, email', 'required'), 98 | array('id_categoria', 'length', 'max' => 6), 99 | array('nome_pessoa', 'length', 'max' => 150), 100 | array('tipo_foto', 'length', 'max' => 4) 101 | ); 102 | } 103 | 104 | /** 105 | * Método do Yii Framework para definição de escopos 106 | * 107 | * Esse método é utilizado para definir condições a serem aplicadas nas 108 | * pesquisas. A implementação atual define a quantidade padrão de pessoas 109 | * a serem retornadas por pesquisa usando o comando SQL LIMIT. 110 | * 111 | * @link http://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes Como declarar escopos 112 | * @return array Lista de escopos definidos 113 | */ 114 | public function scopes() 115 | { 116 | return array( 117 | 'limite' => array( 118 | 'limit' => 10, 119 | ), 120 | ); 121 | } 122 | 123 | /** 124 | * Método do Yii Framework para persistir Active Records 125 | * 126 | * A sobrescrita do método nessa classe é utilizada para impedir que uma 127 | * instância dessa classe seja persistida pela aplicação. 128 | * 129 | * @param boolean $runValidation Variável para indicar se o modelo precisa ser validado antes de ser persistido 130 | * @param array $attributes Atributos extras para serem persistidos 131 | * @throws CException 132 | */ 133 | public function save($runValidation = true, $attributes = NULL) { 134 | throw new CException("Operação inválida."); 135 | } 136 | 137 | /** 138 | * Método do Yii Framework para persistir Active Records 139 | * 140 | * A sobrescrita do método nessa classe é utilizada para impedir que uma 141 | * instância dessa classe seja removida do banco de dados pela aplicação. 142 | * 143 | * @throws CException 144 | */ 145 | public function delete() { 146 | throw new CException("Operação inválida."); 147 | } 148 | } -------------------------------------------------------------------------------- /ponto/protected/views/acompanhamento/acompanhamentoChefia.php: -------------------------------------------------------------------------------- 1 | getClientScript(); 3 | $cs->registerCssFile(Yii::app()->baseUrl."/css/acompanhamento.css"); 4 | $cs->registerCssFile(Yii::app()->baseUrl."/css/calendario.css"); 5 | $cs->registerScriptFile(Yii::app()->baseUrl."/js/acompanhamentoChefia.js", CClientScript::POS_END); 6 | $cs->registerScriptFile(Yii::app()->baseUrl."/js/circle-progress.js", CClientScript::POS_END); 7 | ?> 8 | 9 |
10 |
11 | 12 | 13 | 14 | 15 |
> 16 | Tabela 17 | Calendário 18 |
19 |
-------------------------------------------------------------------------------- /ponto/protected/views/ajuste/dadosPedido.php: -------------------------------------------------------------------------------- 1 | 2 |

Pedido de nro. nr_ajuste : $pedido->nr_abono)?>

3 | 4 | 5 | Pessoa->nome_pessoa?>
6 | 7 | data_hora_registro))?>
8 |
9 | 10 | 11 | entrada_saida == 'E' ? 'Entrada' : 'Saída')?>
12 | 13 | data_hora_ponto))?>
14 | 15 | data_hora_ponto))?> 16 | Ponto) ? '(anterior '.date("H:i", strtotime($pedido->Ponto->data_hora_ponto)).')' : '')?>
17 | 18 | 19 | data_abono))?>
20 | 21 | periodo_abono)?>
22 | 23 | 24 | justificativa) != "" ? $pedido->justificativa : $pedido->JustificativaAjuste->texto_justificativa)?>
25 | 26 | listaAnexos()?>
27 | 28 | 29 |
30 | Registros do dia 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | entrada_saida == 'E'): 49 | if ($ultimoTipoRegistro == 'E'): //Entrada-Entrada ?> 50 | 51 | 52 | 53 | 55 | 56 | 57 | data_hora_ponto)))): // se existe uma saida anterior no mesmo dia 58 | $tempoIntervalo = (strtotime($registro->data_hora_ponto)-strtotime($ultimoRegistro))/60; ?> 59 | 61 | 62 | 63 | 64 | 65 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | data_hora_ponto)-strtotime($ultimoRegistro))/60; 75 | $jornadaDiaria += $jornadaDoTurno; ?> 76 | 77 | 78 | 79 | 80 | 81 | data_hora_ponto; 82 | endif; 83 | $ultimoTipoRegistro = $registro->entrada_saida; 84 | $ultimoRegistro = $registro->data_hora_ponto; 85 | endforeach; 86 | if ($ultimoTipoRegistro == 'E'): ?> 87 | 88 | 89 | 90 | 92 | 93 |
IntervaloEntradaSaídaTempo trabalhado
id_pessoa)?>?
180 ? 'class="textoVermelho centro" title="Intervalo superior a 3 horas"' : 'class="centro"'))?>>?id_pessoa)?>
?data_hora_ponto, 'E', $registro->id_pessoa)?>id_pessoa)?> 360 ? 'class="textoVermelho" title="Turno de trabalho superior a 6 horas"' : '')?>>?
?
94 |
95 | 96 | 97 |
98 |
99 | Certificação 100 |
101 |
102 | 103 | 104 | 105 |
106 | -------------------------------------------------------------------------------- /ponto/protected/views/ajuste/dadosPedidoCertificado.php: -------------------------------------------------------------------------------- 1 | 2 |

Pedido de nro. nr_ajuste : $pedido->nr_abono)?>

3 | 4 | 5 | Pessoa->nome_pessoa?>
6 | 7 | data_hora_registro))?>
8 |
9 | 10 | 11 | entrada_saida == 'E' ? 'Entrada' : 'Saída')?>
12 | 13 | data_hora_ponto))?>
14 | 15 | data_hora_ponto))?> 16 | Ponto) ? '(anterior '.date("H:i", strtotime($pedido->Ponto->data_hora_ponto)).')' : '')?>
17 | 18 | 19 | data_abono))?>
20 | 21 | periodo_abono)?>
22 | 23 | 24 | justificativa) != "" ? $pedido->justificativa : $pedido->JustificativaAjuste->texto_justificativa)?>
25 | 26 | listaAnexos()?>
27 |
28 | 29 | indicador_certificado == 'S' ? 'Sim' : 'Não')?>
30 | 31 | data_hora_certificacao))?>
32 | 33 | Certificador->nome_pessoa?>
34 | 35 |
justificativa_certificacao) != "" ? $pedido->justificativa_certificacao : "Sem justificativa")?>

36 |
37 | -------------------------------------------------------------------------------- /ponto/protected/views/ajuste/pedidosAvaliacao.php: -------------------------------------------------------------------------------- 1 | getClientScript(); 3 | $cs->registerScriptFile(Yii::app()->baseUrl."/js/pedidosAvaliacao.js", CClientScript::POS_END); 4 | ?> 5 | 6 |
7 | Instruções 8 | Clique no nome do servidor para ver mais informações sobre o pedido. 9 |
10 | 11 |

Pedidos de ajuste

12 | 13 | widget('zii.widgets.grid.CGridView', array( 15 | 'dataProvider' => $ajustes, 16 | 'columns' => array( 17 | array( 18 | 'header' => '', 19 | 'value' => 'CHtml::checkBox("certificarAjuste", false, array("value" => $data->nr_ajuste))', 20 | 'type' => 'raw', 21 | ), 22 | array( 23 | 'name' => 'Pessoa.nome_pessoa', 24 | 'sortable' => true, 25 | 'value' => 'CHtml::link($data->Pessoa->nome_pessoa, "javascript:verPedido($data->nr_ajuste, \'ajuste\')")', 26 | 'header' => 'Servidor', 27 | 'type' => 'raw', 28 | ), 29 | array( 30 | 'name' => 'nome_categoria', 31 | 'sortable' => true, 32 | 'value' => '$data->DadoFuncional->CatFuncional->nome_categoria." - ".$data->DadoFuncional->regime_trabalho."h
".$data->DadoFuncional->OrgaoExercicio->nome_orgao', 33 | 'type' => 'raw', 34 | 'header' => 'Cargo', 35 | ), 36 | array( 37 | 'name' => 'entrada_saida', 38 | 'sortable' => true, 39 | 'value' => '($data->entrada_saida == "E" ? "Entrada" : "Saída")', 40 | 'header' => 'Registro' 41 | ), 42 | array( 43 | 'name' => 'data_hora_ponto', 44 | 'sortable' => true, 45 | 'value' => 'date("d/m/Y", strtotime($data->data_hora_ponto))', 46 | 'header' => 'Dia' 47 | ), 48 | array( 49 | 'value' => 'date("H:i", strtotime($data->data_hora_ponto))', 50 | 'header' => 'Hora', 51 | ), 52 | array( 53 | 'value' => '(trim($data->justificativa) != "" ? $data->justificativa : $data->JustificativaAjuste->texto_justificativa)', 54 | 'header' => 'justificativa', 55 | ), 56 | ), 57 | )); 58 | ?> 59 | 60 | 61 | 62 |

Pedidos de abono

63 | 64 | widget('zii.widgets.grid.CGridView', array( 66 | 'dataProvider' => $abonos, 67 | 'columns' => array( 68 | array( 69 | 'header' => '', 70 | 'value' => 'CHtml::checkBox("certificarAbono", false, array("value" => $data->nr_abono))', 71 | 'type' => 'raw', 72 | ), 73 | array( 74 | 'name' => 'Pessoa.nome_pessoa', 75 | 'sortable' => true, 76 | 'value' => 'CHtml::link($data->Pessoa->nome_pessoa, "javascript:verPedido($data->nr_abono, \'abono\')")', 77 | 'header' => 'Servidor', 78 | 'type' => 'raw', 79 | ), 80 | array( 81 | 'name' => 'nome_categoria', 82 | 'sortable' => true, 83 | 'value' => '$data->DadoFuncional->CatFuncional->nome_categoria." - ".$data->DadoFuncional->regime_trabalho."h
".$data->DadoFuncional->OrgaoExercicio->nome_orgao', 84 | 'type' => 'raw', 85 | 'header' => 'Cargo', 86 | ), 87 | array( 88 | 'name' => 'data_abono', 89 | 'sortable' => true, 90 | 'value' => 'date("d/m/Y", strtotime($data->data_abono))', 91 | 'header' => 'Dia' 92 | ), 93 | array( 94 | 'name' => 'periodo_abono', 95 | 'value' => 'Helper::transformaEmFormatoHora($data->periodo_abono)', 96 | 'header' => 'Horas', 97 | ), 98 | array( 99 | 'value' => '(trim($data->justificativa) != "" ? $data->justificativa : $data->JustificativaAjuste->texto_justificativa)', 100 | 'header' => 'justificativa', 101 | ), 102 | ), 103 | )); 104 | ?> 105 | 106 | 107 | 108 | -------------------------------------------------------------------------------- /ponto/protected/views/ajuste/pedidosCertificados.php: -------------------------------------------------------------------------------- 1 | getClientScript(); 3 | $cs->registerScriptFile(Yii::app()->baseUrl."/js/pedidosCertificados.js", CClientScript::POS_END); 4 | ?> 5 | 6 |
7 | Instruções 8 | Clique no nome do servidor para ver mais informações sobre o pedido. 9 |
10 | 11 |

Pedidos de ajuste certificados

12 | 13 | widget('zii.widgets.grid.CGridView', array( 15 | 'dataProvider' => $ajustes, 16 | 'columns' => array( 17 | array( 18 | 'name' => 'Pessoa.nome_pessoa', 19 | 'sortable' => true, 20 | 'value' => 'CHtml::link($data->Pessoa->nome_pessoa, "javascript:verPedido($data->nr_ajuste, \'ajuste\')")', 21 | 'header' => 'Servidor', 22 | 'type' => 'raw', 23 | ), 24 | array( 25 | 'name' => 'nome_categoria', 26 | 'sortable' => true, 27 | 'value' => '$data->DadoFuncional->CatFuncional->nome_categoria." - ".$data->DadoFuncional->regime_trabalho."h
".$data->DadoFuncional->OrgaoExercicio->nome_orgao', 28 | 'type' => 'raw', 29 | 'header' => 'Cargo', 30 | ), 31 | array( 32 | 'name' => 'entrada_saida', 33 | 'sortable' => true, 34 | 'value' => '($data->entrada_saida == "E" ? "Entrada" : "Saída")', 35 | 'header' => 'Registro' 36 | ), 37 | array( 38 | 'name' => 'data_hora_ponto', 39 | 'sortable' => true, 40 | 'value' => 'date("d/m/Y", strtotime($data->data_hora_ponto))', 41 | 'header' => 'Dia' 42 | ), 43 | array( 44 | 'value' => 'date("H:i", strtotime($data->data_hora_ponto))', 45 | 'header' => 'Hora', 46 | ), 47 | array( 48 | 'value' => '(trim($data->justificativa) != "" ? $data->justificativa : $data->JustificativaAjuste->texto_justificativa)', 49 | 'header' => 'justificativa', 50 | ), 51 | array( 52 | 'name' => 'indicador_certificado', 53 | 'sortable' => true, 54 | 'value' => '($data->indicador_certificado == "S" ? "Certificado" : "Não certificado")." por
".$data->Certificador->nome_pessoa', 55 | 'type' => 'raw', 56 | 'header' => 'Certificado' 57 | ), 58 | ), 59 | )); 60 | ?> 61 | 62 |

Pedidos de abono certificados

63 | 64 | widget('zii.widgets.grid.CGridView', array( 66 | 'dataProvider' => $abonos, 67 | 'columns' => array( 68 | array( 69 | 'name' => 'Pessoa.nome_pessoa', 70 | 'sortable' => true, 71 | 'value' => 'CHtml::link($data->Pessoa->nome_pessoa, "javascript:verPedido($data->nr_abono, \'abono\')")', 72 | 'header' => 'Servidor', 73 | 'type' => 'raw', 74 | ), 75 | array( 76 | 'name' => 'nome_categoria', 77 | 'sortable' => true, 78 | 'value' => '$data->DadoFuncional->CatFuncional->nome_categoria." - ".$data->DadoFuncional->regime_trabalho."h
".$data->DadoFuncional->OrgaoExercicio->nome_orgao', 79 | 'type' => 'raw', 80 | 'header' => 'Cargo', 81 | ), 82 | array( 83 | 'name' => 'data_abono', 84 | 'sortable' => true, 85 | 'value' => 'date("d/m/Y", strtotime($data->data_abono))', 86 | 'header' => 'Dia' 87 | ), 88 | array( 89 | 'name' => 'periodo_abono', 90 | 'value' => 'Helper::transformaEmFormatoHora($data->periodo_abono)', 91 | 'header' => 'Horas', 92 | ), 93 | array( 94 | 'value' => '(trim($data->justificativa) != "" ? $data->justificativa : $data->JustificativaAjuste->texto_justificativa)', 95 | 'header' => 'justificativa', 96 | ), 97 | array( 98 | 'name' => 'indicador_certificado', 99 | 'sortable' => true, 100 | 'value' => '($data->indicador_certificado == "S" ? "Certificado" : "Não certificado")." por
".$data->Certificador->nome_pessoa', 101 | 'type' => 'raw', 102 | 'header' => 'Certificado' 103 | ), 104 | ), 105 | )); 106 | ?> 107 | 108 | -------------------------------------------------------------------------------- /ponto/protected/views/compensacao/dadosPedido.php: -------------------------------------------------------------------------------- 1 | 2 |

Registro de Compensacao nro. nr_compensacao?>

3 | 4 | 5 | Pessoa->nome_pessoa?>
6 | 7 | data_hora_registro))?>
8 |
9 | 10 | data_compensacao))?>
11 | 12 | periodo_compensacao)?>
13 | 14 | justificativa?>
15 | 16 | 17 |
18 | Registros do dia 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | entrada_saida == 'E'): 37 | if ($ultimoTipoRegistro == 'E'): //Entrada-Entrada ?> 38 | 39 | 40 | 41 | 43 | 44 | 45 | data_hora_ponto)))): // se existe uma saida anterior no mesmo dia 46 | $tempoIntervalo = (strtotime($registro->data_hora_ponto)-strtotime($ultimoRegistro))/60; ?> 47 | 49 | 50 | 51 | 52 | 53 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | data_hora_ponto)-strtotime($ultimoRegistro))/60; 63 | $jornadaDiaria += $jornadaDoTurno; ?> 64 | 65 | 66 | 67 | 68 | 69 | data_hora_ponto; 70 | endif; 71 | $ultimoTipoRegistro = $registro->entrada_saida; 72 | $ultimoRegistro = $registro->data_hora_ponto; 73 | endforeach; 74 | if ($ultimoTipoRegistro == 'E'): ?> 75 | 76 | 77 | 78 | 80 | 81 |
IntervaloEntradaSaídaTempo trabalhado
id_pessoa)?>?
180 ? 'class="textoVermelho centro" title="Intervalo superior a 3 horas"' : 'class="centro"'))?>>?id_pessoa)?>
?data_hora_ponto, 'E', $registro->id_pessoa)?>id_pessoa)?> 360 ? 'class="textoVermelho" title="Turno de trabalho superior a 6 horas"' : '')?>>?
?
82 |
83 | 84 | 85 |
86 |
87 | Certificação 88 |
89 |
90 | 91 | 92 | 93 |
94 | -------------------------------------------------------------------------------- /ponto/protected/views/compensacao/dadosPedidoCertificado.php: -------------------------------------------------------------------------------- 1 | 2 |

Registro de Compensação nro. nr_compensacao?>

3 | 4 | 5 | Pessoa->nome_pessoa?>
6 | 7 | data_hora_registro))?>
8 |
9 | 10 | data_compensacao))?>
11 | 12 | periodo_compensacao)?>
13 | 14 | justificativa?>
15 |
16 | 17 | indicador_certificado == 'S' ? 'Sim' : 'Não')?>
18 | 19 | data_hora_certificacao))?>
20 | 21 | Certificador->nome_pessoa?>
22 | 23 |
justificativa_certificacao) != "" ? $pedido->justificativa_certificacao : "Sem justificativa")?>

24 |
25 | -------------------------------------------------------------------------------- /ponto/protected/views/compensacao/pedido.php: -------------------------------------------------------------------------------- 1 | getClientScript(); 3 | $cs->registerScriptFile(Yii::app()->baseUrl."/js/compensacao.js", CClientScript::POS_END); 4 | 5 | if (count($pessoa->DadosFuncionais) == 1): ?> 6 | 7 | 8 |
9 |

Dados do servidor

10 |
11 | nome_pessoa?>
12 | DadosFuncionais->CatFuncional->nome_categoria?>
13 | DadosFuncionais->regime_trabalho?>h
14 | DadosFuncionais->OrgaoLotacao->nome_orgao?>
15 | DadosFuncionais->OrgaoExercicio->nome_orgao?> 16 |
17 |
18 |
19 |
20 | O que é um registro de compensação? 21 | Um registro de compensação é uma forma de aproveitar as horas excedentes do mês anterior para abonar horas do mês atual.
22 | Para fazer isso, indique o dia em que você irá aproveitar as horas excedentes e a quantidade de horas a ser utilizada e aguarde a certificação do pedido.
23 | Para ter certeza que a compensação será certificada, é recomendado que haja um acerto prévio com a chefia. 24 |
25 |
26 | 27 | Saldo de horas do mês anterior:
28 | Saldo de horas de dois mês atrás:
29 | 30 | Saldo de horas disponível para compensação:
31 | Horas compensadas até o momento: ( restante)
32 | 33 | 34 |
35 |
36 | 0): ?> 37 |
38 | 39 |
40 | 41 |
42 |

Registros de compensação efetuados

43 | widget('zii.widgets.grid.CGridView', array( 45 | 'dataProvider' => $compensacoes, 46 | 'columns' => array( 47 | array( 48 | 'name' => 'data_hora_registro', 49 | 'sortable' => true, 50 | 'value' => 'date("d/m/Y H:i", strtotime($data->data_hora_registro))', 51 | 'header' => 'Data do pedido', 52 | 'type' => 'raw', 53 | ), 54 | array( 55 | 'name' => 'data_compensacao', 56 | 'sortable' => true, 57 | 'value' => 'date("d/m/Y", strtotime($data->data_compensacao))', 58 | 'header' => 'Dia' 59 | ), 60 | array( 61 | 'name' => 'periodo_compensacao', 62 | 'sortable' => true, 63 | 'value' => 'Helper::transformaEmFormatoHora($data->periodo_compensacao)', 64 | 'header' => 'Horas' 65 | ), 66 | array( 67 | 'name' => 'justificativa', 68 | 'header' => 'justificativa', 69 | 'value' => '$data->justificativa.(trim($data->justificativa_certificacao) != "" ? "

justificativa da ".(trim($data->indicador_certificado) == "N" ? "não" : "")." certificação:
".$data->justificativa_certificacao : "")', 70 | 'type' => 'raw', 71 | ), 72 | array( 73 | 'value' => '(trim($data->indicador_certificado) != "" ? (trim($data->indicador_certificado) == "S" ? "Certificado" : "Não indicador_certificado")." por
".$data->Certificador->nome_pessoa : "Pendente")', 74 | 'header' => 'Status', 75 | 'type' => 'raw', 76 | ), 77 | array( 78 | 'value' => '(trim($data->indicador_certificado) == "" ? CHtml::link("excluir", "javascript:excluir($data->nr_compensacao)") : "")', 79 | 'header' => '', 80 | 'type' => 'raw', 81 | ), 82 | ), 83 | 'ajaxUpdate' => false, 84 | )); 85 | ?> 86 |
87 | 88 |
89 | 90 | 91 |
92 | 93 | 94 |
95 | 96 |
97 | 98 |
99 | 100 |
101 | 102 |
103 |
104 |
105 | 106 | 107 | 108 | 109 | 110 | 111 |
112 | 118 | 119 | getClientScript(); 3 | $cs->registerScriptFile(Yii::app()->baseUrl."/js/compensacao.js", CClientScript::POS_END); 4 | ?> 5 | 6 |
7 | Instruções 8 | Clique no nome do servidor para ver mais informações sobre o pedido. 9 |
10 | 11 |

Registros de compensação

12 | 13 | widget('zii.widgets.grid.CGridView', array( 15 | 'dataProvider' => $pedidosAbertos, 16 | 'columns' => array( 17 | array( 18 | 'header' => '', 19 | 'value' => 'CHtml::checkBox("certificarCompensacao", false, array("value" => $data->nr_compensacao))', 20 | 'type' => 'raw', 21 | ), 22 | array( 23 | 'name' => 'Pessoa.nome_pessoa', 24 | 'sortable' => true, 25 | 'value' => 'CHtml::link($data->Pessoa->nome_pessoa, "javascript:verPedido($data->nr_compensacao)")', 26 | 'header' => 'Servidor', 27 | 'type' => 'raw', 28 | ), 29 | array( 30 | 'name' => 'nome_categoria', 31 | 'sortable' => true, 32 | 'value' => '$data->DadoFuncional->CatFuncional->nome_categoria." - ".$data->DadoFuncional->regime_trabalho."h
".$data->DadoFuncional->OrgaoExercicio->nome_orgao', 33 | 'type' => 'raw', 34 | 'header' => 'Cargo', 35 | ), 36 | array( 37 | 'name' => 'data_compensacao', 38 | 'sortable' => true, 39 | 'value' => 'date("d/m/Y", strtotime($data->data_compensacao))', 40 | 'header' => 'Dia' 41 | ), 42 | array( 43 | 'name' => 'periodo_compensacao', 44 | 'value' => 'Helper::transformaEmFormatoHora($data->periodo_compensacao)', 45 | 'header' => 'Horas', 46 | ), 47 | array( 48 | 'value' => '$data->justificativa', 49 | 'header' => 'justificativa', 50 | ), 51 | ), 52 | )); 53 | ?> 54 | 55 |
56 |
57 |

Registros de compensações certificados

58 | 59 | widget('zii.widgets.grid.CGridView', array( 61 | 'dataProvider' => $pedidosCertificados, 62 | 'columns' => array( 63 | array( 64 | 'name' => 'Pessoa.nome_pessoa', 65 | 'sortable' => true, 66 | 'value' => 'CHtml::link($data->Pessoa->nome_pessoa, "javascript:verPedidoCertificado($data->nr_compensacao)")', 67 | 'header' => 'Servidor', 68 | 'type' => 'raw', 69 | ), 70 | array( 71 | 'name' => 'nome_categoria', 72 | 'sortable' => true, 73 | 'value' => '$data->DadoFuncional->CatFuncional->nome_categoria." - ".$data->DadoFuncional->regime_trabalho."h
".$data->DadoFuncional->OrgaoExercicio->nome_orgao', 74 | 'type' => 'raw', 75 | 'header' => 'Cargo', 76 | ), 77 | array( 78 | 'name' => 'data_compensacao', 79 | 'sortable' => true, 80 | 'value' => 'date("d/m/Y", strtotime($data->data_compensacao))', 81 | 'header' => 'Dia' 82 | ), 83 | array( 84 | 'name' => 'periodo_compensacao', 85 | 'value' => 'Helper::transformaEmFormatoHora($data->periodo_compensacao)', 86 | 'header' => 'Horas', 87 | ), 88 | array( 89 | 'value' => '$data->justificativa', 90 | 'header' => 'justificativa', 91 | ), 92 | array( 93 | 'name' => 'indicador_certificado', 94 | 'sortable' => true, 95 | 'value' => '($data->indicador_certificado == "S" ? "Certificado" : "Não certificado")." por
".$data->Certificador->nome_pessoa', 96 | 'type' => 'raw', 97 | 'header' => 'Certificado' 98 | ), 99 | ), 100 | )); 101 | ?> 102 | 103 | -------------------------------------------------------------------------------- /ponto/protected/views/consolida/index.php: -------------------------------------------------------------------------------- 1 | getClientScript(); 3 | $cs->registerScriptFile(Yii::app()->baseUrl."/js/consolida.js", CClientScript::POS_END); 4 | ?> 5 |
6 | 7 |
8 | Consolida carga horária 9 | 10 |   15 | 16 |
21 |
22 |
23 |
24 | 25 |
26 | De um lote de servidores 27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | -------------------------------------------------------------------------------- /ponto/protected/views/horarios/horariosOrgaos.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 'esquerdaAlinhado maior')); 6 | echo CHtml::dropDownList( 7 | 'Orgaos', 8 | isset($_POST['Orgaos']) ? $_POST['Orgaos'] : '', 9 | CHtml::listData( 10 | $orgaos, 11 | 'id_orgao', 12 | 'nome_orgao' 13 | ), 14 | array( 15 | 'onchange' => 'selecionaOrgao()', 16 | 'empty' => ' ------------------ ' 17 | ) 18 | ); 19 | ?> 20 | 21 |
22 | 23 |
24 | renderPartial('exibirHorariosOrgao', array('orgao' => $orgao, 'definicao' => $definicao, 'podeEditar' => true, 'empty' => false, 'teste' => 1), false, false); 26 | } ?> 27 |
-------------------------------------------------------------------------------- /ponto/protected/views/layouts/main.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Ponto Eletrônico 11 | 12 | 13 | 14 |
15 |
16 | SPELL — Acompanhamento e Ajustes 17 | session['id_pessoa'])): ?> 19 | ">Sair (user->nome_pessoa?>) 20 | 21 |
22 |
23 | session['id_pessoa'], Yii::app()->controller->menu)): ?> 26 | 43 | 44 |
45 |

46 | 49 |
50 |
51 |
52 | 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /ponto/protected/views/layouts/registroPonto.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Ponto Eletrônico 12 | 13 | 14 | 15 |
16 |
17 | session['CodPessoaPonto'])): ?> 19 | ">Sair 20 | 21 | 22 | 32 |
33 | 36 |
37 | 38 | "/> 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /ponto/protected/views/registro/login.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 |
6 |
7 | 8 |
9 | 10 |
11 | 12 |
" method="post" onsubmit="return verificaSenhaEmBranco()"> 13 |
14 |
15 |
16 |
17 | 18 |
19 |
-------------------------------------------------------------------------------- /ponto/protected/views/registro/mensagem.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 | -------------------------------------------------------------------------------- /ponto/protected/views/registro/selecionaVinculo.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | -------------------------------------------------------------------------------- /ponto/protected/views/relatorio/_periodos.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |
8 | 9 | 10 | 11 |
Nenhum período disponível para esse órgão.
12 | 13 | -------------------------------------------------------------------------------- /ponto/protected/views/relatorio/exibicao.php: -------------------------------------------------------------------------------- 1 | nome_orgao, true); 10 | print CHtml::tag('h2', array(), 'Relatório de Registro em Ponto Eletrônico - '.$periodo, true); 11 | 12 | $this->widget('zii.widgets.grid.CGridView', array( 13 | 'dataProvider' => $dataProviderRegistros, 14 | 'columns' => array( 15 | array( 16 | 'name' => 'Pessoa.nome_pessoa', 17 | 'value' => 'CHtml::link($data->Pessoa->nome_pessoa, Yii::app()->createUrl("acompanhamento/acompanhamentoChefia", array("p" => $data->id_pessoa, "v" => $data->nr_vinculo, "a" => '.$ano.', "m" => '.$mes.'))).($data->DadoFuncional->orgao_exercicio != '.$orgao->id_orgao.' ? "
(".$data->DadoFuncional->OrgaoExercicio->nome_orgao.")" : "")', 18 | 'sortable' => true, 19 | 'type' => 'raw', 20 | 'header' => 'Nome Servidor' 21 | ), 22 | array( 23 | 'name' => 'DadoFuncional.CatFuncional.nome_categoria', 24 | 'sortable' => true, 25 | 'header' => 'Cargo', 26 | ), 27 | array( 28 | 'name' => 'DadoFuncional.regime_trabalho', 29 | 'sortable' => true, 30 | 'header' => 'Regime
Trabalho', 31 | 'htmlOptions' => array('class' => 'textoCentralizado'), 32 | ), 33 | array( 34 | 'name' => 'nr_minutos_trabalho', 35 | 'sortable' => true, 36 | 'value' => 'Helper::transformaEmFormatoHora($data->nr_minutos_trabalho)', 37 | 'header' => 'Tempo
Trabalho', 38 | 'htmlOptions' => array('class' => 'textoADireita'), 39 | ), 40 | array( 41 | 'name' => 'nr_minutos_abono', 42 | 'sortable' => true, 43 | 'value' => 'Helper::transformaEmFormatoHora($data->nr_minutos_abono)', 44 | 'header' => 'Tempo
Abono', 45 | 'htmlOptions' => array('class' => 'textoADireita'), 46 | ), 47 | array( 48 | 'name' => 'nr_minutos_previsto', 49 | 'sortable' => true, 50 | 'value' => 'Helper::transformaEmFormatoHora($data->nr_minutos_previsto)', 51 | 'header' => 'Tempo
Previsto', 52 | 'htmlOptions' => array('class' => 'textoADireita'), 53 | ), 54 | array( 55 | 'name' => 'nr_minutos_saldo', 56 | 'sortable' => true, 57 | 'value' => 'Helper::transformaEmFormatoHora($data->nr_minutos_saldo)', 58 | 'header' => 'Saldo', 59 | 'cssClassExpression' => '($data->nr_minutos_saldo < 0 ? "italico" : "textoVerde")." textoADireita"', 60 | //'htmlOptions' => array('class' => 'textoADireita'), 61 | ), 62 | array( 63 | 'name' => 'CargaHorariaMesAnterior', 64 | 'sortable' => true, 65 | 'value' => 'Helper::transformaEmFormatoHora($data->getSaldoMesAnterior())', 66 | 'header' => 'Saldo Mês
Anterior', 67 | 'cssClassExpression' => '($data->getSaldoMesAnterior() < 0 ? "italico" : "textoVerde")." textoADireita"', 68 | //'htmlOptions' => array('class' => 'textoADireita'), 69 | ), 70 | ), 71 | 'ajaxUpdate' => true, 72 | )); 73 | 74 | print CHtml::tag('h2', array(), 'Servidores sem Registro em Ponto Eletrônico - '.$periodo, true); 75 | 76 | $this->widget('zii.widgets.grid.CGridView', array( 77 | 'dataProvider' => $dataProviderSemRegistros, 78 | 'columns' => array( 79 | array( 80 | 'name' => 'Pessoa.nome_pessoa', 81 | 'value' => '$data->Pessoa->nome_pessoa.($data->orgao_exercicio != '.$orgao->id_orgao.' ? "
(".$data->OrgaoExercicio->nome_orgao.")" : "")', 82 | 'sortable' => true, 83 | 'type' => 'raw', 84 | 'header' => 'Nome Servidor' 85 | ), 86 | array( 87 | 'name' => 'CatFuncional.nome_categoria', 88 | 'sortable' => true, 89 | 'header' => 'Cargo', 90 | ), 91 | array( 92 | 'name' => 'regime_trabalho', 93 | 'sortable' => true, 94 | 'header' => 'Regime
Trabalho', 95 | 'htmlOptions' => array('class' => 'textoCentralizado'), 96 | ), 97 | ), 98 | 'ajaxUpdate' => true, 99 | )); 100 | 101 | print CHtml::link('Voltar', Yii::app()->createUrl('relatorio/index'), array('class' => 'button')); -------------------------------------------------------------------------------- /ponto/protected/views/relatorio/index.php: -------------------------------------------------------------------------------- 1 | getClientScript(); 3 | $cs->registerScriptFile(Yii::app()->baseUrl."/js/relatorio.js", CClientScript::POS_END); 4 | 5 | print CHtml::form(Yii::app()->createUrl('relatorio/exibeCargaHorariaConsolidada'), 'get'); 6 | 7 | print CHtml::label('Selecione o órgão', 'orgao', array('class' => 'esquerdaAlinhado maior')); 8 | print CHtml::dropDownList('orgao', '', CHtml::listData($orgaos, 'id_orgao', 'nome_orgao'), array( 9 | 'onchange' => 'selecionaOrgao()', 10 | 'empty' => '------------------' 11 | )); 12 | 13 | print CHtml::tag('div', array('id' => 'periodos'), '', true); 14 | 15 | print CHtml::endForm(); -------------------------------------------------------------------------------- /ponto/protected/views/restricao/index.php: -------------------------------------------------------------------------------- 1 | getClientScript(); 3 | $cs->registerScriptFile(Yii::app()->baseUrl.'/js/restricao.js', CClientScript::POS_END); 4 | ?> 5 | 6 |
7 | Restrição por Órgão 8 | Adicionar restrição para: 9 |
10 | widget('zii.widgets.grid.CGridView', array( 12 | 'dataProvider' => $restricoesOrgao->search(), 13 | 'filter' => $restricoesOrgao, 14 | 'columns' => array( 15 | array( 16 | 'name' => 'sigla_orgao', 17 | 'sortable' => true, 18 | 'value' => 'CHtml::link($data->Orgao->sigla_orgao." - ".$data->Orgao->nome_orgao, 19 | "javascript:alteraRestricao($data->nr_restricao, \'".$data->Orgao->sigla_orgao." - ".$data->Orgao->nome_orgao."\', \'$data->mascara_ip_v4\', \'$data->mascara_ip_v6\')")', 20 | 'header' => 'Órgão', 21 | 'type' => 'raw', 22 | ), 23 | array( 24 | 'name' => 'mascara_ip_v4', 25 | 'sortable' => true, 26 | 'header' => 'Máscara IPv4' 27 | ), 28 | array( 29 | 'name' => 'mascara_ip_v6', 30 | 'sortable' => true, 31 | 'header' => 'Máscara IPv6', 32 | ), 33 | array( 34 | 'sortable' => false, 35 | 'value' => 'CHtml::link("excluir", "javascript:excluiRestricao($data->nr_restricao)")', 36 | 'header' => '', 37 | 'type' => 'raw', 38 | ), 39 | ), 40 | 'ajaxUpdate' => false, 41 | )); 42 | ?> 43 |
44 |
45 |
46 |
47 | Restrição por pessoa 48 | Adicionar restrição para: 49 |
50 | widget('zii.widgets.grid.CGridView', array( 52 | 'dataProvider' => $restricoesPessoa->search(), 53 | 'filter' => $restricoesPessoa, 54 | 'columns' => array( 55 | array( 56 | 'name' => 'nome_pessoa', 57 | 'sortable' => true, 58 | 'value' => 'CHtml::link($data->id_pessoa." - ".$data->Pessoa->nome_pessoa, 59 | "javascript:alteraRestricao($data->nr_restricao, \'".$data->id_pessoa." - ".$data->Pessoa->nome_pessoa."\', \'$data->mascara_ip_v4\', \'$data->mascara_ip_v6\')")', 60 | 'header' => 'Pessoa', 61 | 'type' => 'raw', 62 | ), 63 | array( 64 | 'name' => 'mascara_ip_v4', 65 | 'sortable' => true, 66 | 'header' => 'Máscara IPv4' 67 | ), 68 | array( 69 | 'name' => 'mascara_ip_v6', 70 | 'sortable' => true, 71 | 'header' => 'Máscara IPv6', 72 | ), 73 | array( 74 | 'sortable' => false, 75 | 'value' => 'CHtml::link("excluir", "javascript:excluiRestricao($data->nr_restricao)")', 76 | 'header' => '', 77 | 'type' => 'raw', 78 | ), 79 | ), 80 | 'ajaxUpdate' => false, 81 | )); 82 | ?> 83 |
84 |
85 | 86 | -------------------------------------------------------------------------------- /ponto/protected/views/tempLogin/login.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 |
6 | 7 |
8 | 9 |
10 | 11 |
" method="post" onsubmit="return verificaSenhaEmBranco()"> 12 |
13 |
14 |
15 |
16 | 17 |
18 |
-------------------------------------------------------------------------------- /repositorio/abreArquivo.php: -------------------------------------------------------------------------------- 1 | $iData) 27 | die('Documento inválido!'); 28 | } 29 | 30 | switch ($Extensao) { 31 | case "pdf": 32 | $Mime = "application/pdf"; 33 | break; 34 | case "jpg": case "jpeg": 35 | $Mime = "image/jpeg"; 36 | break; 37 | case "gif": 38 | $Mime = "image/gif"; 39 | break; 40 | case "txt": 41 | $Mime = "text/plain"; 42 | break; 43 | case "doc": case "docx": 44 | $Mime = "application/msword"; 45 | break; 46 | case "png": 47 | $Mime = "image/png"; 48 | break; 49 | case "ppt": case "pps": case "pptx": case "ppsx": 50 | $Mime = "application/mspowerpoint"; 51 | break; 52 | case "xls": case "xlsx": 53 | $Mime = "application/x-msexcel"; 54 | break; 55 | case "ods": 56 | $Mime = "application/vnd.oasis.opendocument.spreadsheet"; 57 | break; 58 | case "odt": 59 | $Mime = "application/vnd.oasis.opendocument.text"; 60 | break; 61 | case "odp": 62 | $Mime = "application/vnd.oasis.opendocument.presentation"; 63 | break; 64 | case "odg": 65 | $Mime = "application/vnd.oasis.opendocument.graphics"; 66 | break; 67 | default: 68 | $Mime = "application/force-download"; 69 | break; 70 | } 71 | 72 | header('cache-control: '); 73 | header('pragma: '); 74 | header('Content-type: ' . $Mime); 75 | 76 | if ($Download) 77 | header('Content-Disposition: attachment; filename="' . $DadosDocumento['nome_arquivo'] . '"'); 78 | else 79 | header('Content-Disposition: inline; filename="' . $DadosDocumento['nome_arquivo'] . '"'); 80 | 81 | $temp = file_get_contents($sArquivo, FILE_BINARY); 82 | echo $temp; 83 | ?> -------------------------------------------------------------------------------- /repositorio/docs/F727BC55D5AA: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ufrgs/spell/f55b43f608bca5366da2e3b97d0e3fd85e85882c/repositorio/docs/F727BC55D5AA -------------------------------------------------------------------------------- /repositorio/docs/F727BC55D5AA.txt: -------------------------------------------------------------------------------- 1 | a:5:{s:12:"tipo_arquivo";s:15:"application/pdf";s:12:"nome_arquivo";s:10:"dou.24.pdf";s:18:"chave_autenticacao";N;s:17:"chave_repositorio";s:12:"F727BC55D5AA";s:14:"data_expiracao";s:0:"";} --------------------------------------------------------------------------------