diff --git a/app/Models/LegacyRegistration.php b/app/Models/LegacyRegistration.php index 9e15683ac4..90ff229d6e 100644 --- a/app/Models/LegacyRegistration.php +++ b/app/Models/LegacyRegistration.php @@ -2,6 +2,7 @@ namespace App\Models; +use App_Model_MatriculaSituacao; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; @@ -11,6 +12,8 @@ * LegacyRegistration * * @property int $id + * @property boolean isTransferred + * @property boolean isAbandoned * */ class LegacyRegistration extends Model @@ -119,4 +122,14 @@ public function exemptions() { return $this->hasMany(LegacyDisciplineExemption::class, 'ref_cod_matricula', 'cod_matricula'); } + + public function getIsTransferredAttribute() + { + return $this->aprovado == App_Model_MatriculaSituacao::TRANSFERIDO; + } + + public function getIsAbandonedAttribute() + { + return $this->aprovado == App_Model_MatriculaSituacao::ABANDONO; + } } diff --git a/app/Process.php b/app/Process.php index 576e7b9422..a41a8fb11f 100644 --- a/app/Process.php +++ b/app/Process.php @@ -17,6 +17,7 @@ class Process const ENROLLMENT_HISTORY = 1001; const ATTENDED_CANDIDATE = 1002; + const BACK_TO_QUEUE = 1003; const UNDO_STUDENT_UNIFICATION = 2001; const EXEMPTION_LIST = 2002; } diff --git a/app/Services/StudentService.php b/app/Services/StudentService.php new file mode 100644 index 0000000000..6f719cbc5d --- /dev/null +++ b/app/Services/StudentService.php @@ -0,0 +1,33 @@ +registrations()->where('status', 3); + + if ($levelId) { + $query->where('level_id', $levelId); + } + + return $query->orderBy('year', 'desc') + ->exists(); + } +} diff --git a/composer.json b/composer.json index 2937d052b3..bfd1d7aa39 100644 --- a/composer.json +++ b/composer.json @@ -3,7 +3,7 @@ "description": "Software livre de gestão escolar", "type": "project", "license": "GPL-2.0-or-later", - "version": "2.2.10", + "version": "2.2.11", "keywords": [ "Portabilis", "i-Educar" diff --git a/composer.lock b/composer.lock index feb6086de9..3a722f99a1 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b809688eaf9970067bfc1abc85b1a398", + "content-hash": "67141df1d8ac1c6225bdf16215518566", "packages": [ { "name": "aws/aws-sdk-php", - "version": "3.112.25", + "version": "3.112.28", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "f91e264e3cbf8ced5c93f5f786c9e0f079926749" + "reference": "dabae6df3fd53b470da8806d641d05dbb66859da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/f91e264e3cbf8ced5c93f5f786c9e0f079926749", - "reference": "f91e264e3cbf8ced5c93f5f786c9e0f079926749", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/dabae6df3fd53b470da8806d641d05dbb66859da", + "reference": "dabae6df3fd53b470da8806d641d05dbb66859da", "shasum": "" }, "require": { @@ -87,7 +87,7 @@ "s3", "sdk" ], - "time": "2019-10-18T18:08:55+00:00" + "time": "2019-10-24T18:14:24+00:00" }, { "name": "cocur/slugify", @@ -911,27 +911,28 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.3.3", + "version": "6.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + "reference": "0895c932405407fd3a7368b6910c09a24d26db11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/0895c932405407fd3a7368b6910c09a24d26db11", + "reference": "0895c932405407fd3a7368b6910c09a24d26db11", "shasum": "" }, "require": { + "ext-json": "*", "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", + "guzzlehttp/psr7": "^1.6.1", "php": ">=5.5" }, "require-dev": { "ext-curl": "*", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" + "psr/log": "^1.1" }, "suggest": { "psr/log": "Required for using the Log middleware" @@ -943,12 +944,12 @@ } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\": "src/" - } + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -972,7 +973,7 @@ "rest", "web service" ], - "time": "2018-04-22T15:46:56+00:00" + "time": "2019-10-23T15:58:00+00:00" }, { "name": "guzzlehttp/promises", @@ -2065,16 +2066,16 @@ }, { "name": "nesbot/carbon", - "version": "2.25.2", + "version": "2.25.3", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "443fe5f1498147e0fbc792142b5dc43e2e8a533f" + "reference": "d07636581795383e2fea2d711212d30f941f2039" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/443fe5f1498147e0fbc792142b5dc43e2e8a533f", - "reference": "443fe5f1498147e0fbc792142b5dc43e2e8a533f", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/d07636581795383e2fea2d711212d30f941f2039", + "reference": "d07636581795383e2fea2d711212d30f941f2039", "shasum": "" }, "require": { @@ -2128,7 +2129,7 @@ "datetime", "time" ], - "time": "2019-10-14T14:18:59+00:00" + "time": "2019-10-20T11:05:44+00:00" }, { "name": "nikic/php-parser", @@ -2183,16 +2184,16 @@ }, { "name": "opis/closure", - "version": "3.4.0", + "version": "3.4.1", "source": { "type": "git", "url": "https://github.com/opis/closure.git", - "reference": "60a97fff133b1669a5b1776aa8ab06db3f3962b7" + "reference": "e79f851749c3caa836d7ccc01ede5828feb762c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/60a97fff133b1669a5b1776aa8ab06db3f3962b7", - "reference": "60a97fff133b1669a5b1776aa8ab06db3f3962b7", + "url": "https://api.github.com/repos/opis/closure/zipball/e79f851749c3caa836d7ccc01ede5828feb762c7", + "reference": "e79f851749c3caa836d7ccc01ede5828feb762c7", "shasum": "" }, "require": { @@ -2240,7 +2241,7 @@ "serialization", "serialize" ], - "time": "2019-09-02T21:07:33+00:00" + "time": "2019-10-19T18:38:51+00:00" }, { "name": "paragonie/random_compat", @@ -2735,16 +2736,16 @@ }, { "name": "psr/log", - "version": "1.1.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + "reference": "bf73deb2b3b896a9d9c75f3f0d88185d2faa27e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "url": "https://api.github.com/repos/php-fig/log/zipball/bf73deb2b3b896a9d9c75f3f0d88185d2faa27e2", + "reference": "bf73deb2b3b896a9d9c75f3f0d88185d2faa27e2", "shasum": "" }, "require": { @@ -2753,7 +2754,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -2778,7 +2779,7 @@ "psr", "psr-3" ], - "time": "2018-11-20T15:27:04+00:00" + "time": "2019-10-25T08:06:51+00:00" }, { "name": "psr/simple-cache", @@ -4448,21 +4449,23 @@ }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.1", + "version": "2.2.2", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757" + "reference": "dda2ee426acd6d801d5b7fd1001cde9b5f790e15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", - "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/dda2ee426acd6d801d5b7fd1001cde9b5f790e15", + "reference": "dda2ee426acd6d801d5b7fd1001cde9b5f790e15", "shasum": "" }, "require": { + "ext-dom": "*", + "ext-libxml": "*", "php": "^5.5 || ^7.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0" + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" @@ -4491,7 +4494,7 @@ ], "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "time": "2017-11-27T11:13:29+00:00" + "time": "2019-10-24T08:53:34+00:00" }, { "name": "tooleks/laravel-asset-version", diff --git a/database/migrations/2019_10_24_083313_cria_parametro_ordena_alunos_por_sequencial_enturmacao.php b/database/migrations/2019_10_24_083313_cria_parametro_ordena_alunos_por_sequencial_enturmacao.php new file mode 100644 index 0000000000..b5d5662879 --- /dev/null +++ b/database/migrations/2019_10_24_083313_cria_parametro_ordena_alunos_por_sequencial_enturmacao.php @@ -0,0 +1,32 @@ +boolean('ordenar_alunos_sequencial_enturmacao')->default(false); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('pmieducar.instituicao', function (Blueprint $table) { + $table->dropColumn('ordenar_alunos_sequencial_enturmacao'); + }); + } +} diff --git a/ieducar/intranet/educar_dispensa_disciplina_cad.php b/ieducar/intranet/educar_dispensa_disciplina_cad.php index 7b2dfd614d..bf6bfb04db 100644 --- a/ieducar/intranet/educar_dispensa_disciplina_cad.php +++ b/ieducar/intranet/educar_dispensa_disciplina_cad.php @@ -1,5 +1,9 @@ rodaPromocao(); $this->mensagem .= 'Cadastro efetuado com sucesso.
'; $this->simpleRedirect('educar_dispensa_disciplina_lst.php?ref_cod_matricula=' . $this->ref_cod_matricula); @@ -283,6 +289,7 @@ public function Editar() $editou = $objetoDispensa->edita(); if ($editou) { + $this->rodaPromocao(); $this->mensagem .= 'Edição efetuada com sucesso.
'; $this->simpleRedirect('educar_dispensa_disciplina_lst.php?ref_cod_matricula=' . $this->ref_cod_matricula); } @@ -305,6 +312,7 @@ public function Excluir() $excluiu = $objetoDispensa->excluir(); if ($excluiu) { + $this->rodaPromocao(); $this->mensagem .= 'Exclusão efetuada com sucesso.
'; $this->simpleRedirect('educar_dispensa_disciplina_lst.php?ref_cod_matricula=' . $this->ref_cod_matricula); } @@ -314,6 +322,33 @@ public function Excluir() return false; } + public function maiorEtapaUtilizada($registration) + { + $where = [ + 'ref_ref_cod_escola' => $registration->ref_ref_cod_escola, + 'ref_ano' => $registration->ano, + ]; + + $totalEtapas['total'] = LegacySchoolStage::query()->where($where)->count(); + $arrayEtapas = []; + + for ($i = 1; $i <= $totalEtapas['total']; $i++) + { + $arrayEtapas[$i] = strval($i); + } + + $arrayEtapas = array_diff($arrayEtapas, $this->etapa); + return max($arrayEtapas); + } + + public function rodaPromocao() + { + $registration = LegacyRegistration::find($this->ref_cod_matricula); + $_GET['etapa'] = $this->maiorEtapaUtilizada($registration); + $promocao = new PromotionService($registration->lastEnrollment()->first()); + $promocao->fakeRequest(); + } + public function montaEtapas() { //Pega matricula para pegar curso, escola e ano diff --git a/ieducar/intranet/educar_instituicao_cad.php b/ieducar/intranet/educar_instituicao_cad.php index 889ba6d2fe..f4345b988a 100644 --- a/ieducar/intranet/educar_instituicao_cad.php +++ b/ieducar/intranet/educar_instituicao_cad.php @@ -73,6 +73,7 @@ class indice extends clsCadastro public $exibir_apenas_professores_alocados; public $bloquear_vinculo_professor_sem_alocacao_escola; public $permitir_matricula_fora_periodo_letivo; + public $ordenar_alunos_sequencial_enturmacao; public function Inicializar() { @@ -123,6 +124,7 @@ public function Inicializar() $this->exibir_apenas_professores_alocados = dbBool($this->exibir_apenas_professores_alocados); $this->bloquear_vinculo_professor_sem_alocacao_escola = dbBool($this->bloquear_vinculo_professor_sem_alocacao_escola); $this->permitir_matricula_fora_periodo_letivo = dbBool($this->permitir_matricula_fora_periodo_letivo); + $this->ordenar_alunos_sequencial_enturmacao = dbBool($this->ordenar_alunos_sequencial_enturmacao); return $retorno; } @@ -256,6 +258,15 @@ public function Gerar() $this->campoCheck('permissao_filtro_abandono_transferencia', 'Não permitir a apresentação de alunos com matrícula em abandono ou transferida na emissão do relatório de frequência', $this->permissao_filtro_abandono_transferencia); $this->campoCheck('altera_atestado_para_declaracao', 'Alterar nome do título do menu e relatórios de Atestado para Declaração', $this->altera_atestado_para_declaracao); $this->campoCheck('exibir_apenas_professores_alocados', 'Exibir apenas professores alocados nos filtros de emissão do Diário de classe', $this->exibir_apenas_professores_alocados); + $this->campoCheck( + 'ordenar_alunos_sequencial_enturmacao', + 'Apresentar alunos em relatórios de acordo com a ordenação definida de forma automática/manual na turma', + $this->ordenar_alunos_sequencial_enturmacao, + null, + false, + false, + false + ); $this->campoRotulo('processos_escolares','Processos escolares'); $this->campoCheck('exigir_vinculo_turma_professor', 'Exigir vínculo com turma para lançamento de notas do professor?', $this->exigir_vinculo_turma_professor); @@ -373,6 +384,7 @@ public function Editar() $obj->exibir_apenas_professores_alocados = !is_null($this->exibir_apenas_professores_alocados); $obj->bloquear_vinculo_professor_sem_alocacao_escola = !is_null($this->bloquear_vinculo_professor_sem_alocacao_escola); $obj->permitir_matricula_fora_periodo_letivo = !is_null($this->permitir_matricula_fora_periodo_letivo); + $obj->ordenar_alunos_sequencial_enturmacao = !is_null($this->ordenar_alunos_sequencial_enturmacao); $detalheAntigo = $obj->detalhe(); diff --git a/ieducar/intranet/educar_usuario_det.php b/ieducar/intranet/educar_usuario_det.php index 191d0de7ee..d07b04c3bc 100644 --- a/ieducar/intranet/educar_usuario_det.php +++ b/ieducar/intranet/educar_usuario_det.php @@ -38,9 +38,9 @@ public function Gerar() $this->addDetalhe(['Nome', $det_pessoa['nome']]); - $obj_fisica_cpf = new clsFisica($cod_pessoa); - $det_fisica_cpf = $obj_fisica_cpf->detalhe(); - $this->addDetalhe(['CPF', int2CPF($det_fisica_cpf['cpf'])]); + $obj_fisica = new clsFisica($cod_pessoa); + $det_fisica = $obj_fisica->detalhe(); + $this->addDetalhe(['CPF', int2CPF($det_fisica['cpf'])]); $obj_funcionario = new clsFuncionario($cod_pessoa); $det_funcionario = $obj_funcionario->detalhe(); diff --git a/ieducar/intranet/include/pessoa/clsFuncionario.inc.php b/ieducar/intranet/include/pessoa/clsFuncionario.inc.php index d85bf03208..bee2a4e940 100644 --- a/ieducar/intranet/include/pessoa/clsFuncionario.inc.php +++ b/ieducar/intranet/include/pessoa/clsFuncionario.inc.php @@ -24,8 +24,6 @@ class clsFuncionario extends clsPessoaFisica public $schema_cadastro = 'cadastro'; public $schema_portal = 'portal'; public $tabela_pessoa = 'pessoa'; - public $tabela_funcionario = 'funcionario'; - public $tabela_fisica_cpf = 'fisica'; public function __construct($int_idpes = false, $str_matricula = false, $int_cpf = false, $int_ref_cod_setor = false, $str_senha = false, $data_troca_senha = false, $tempo_expira_senha = false, $data_reativa_conta = false, $tempo_expira_conta = false, $ref_cod_funcionario_vinculo = false, $ramal = false, $matricula_permanente = false, $banido = false, $email = null) { diff --git a/ieducar/intranet/include/pmieducar/clsPmieducarCandidatoFilaUnica.inc.php b/ieducar/intranet/include/pmieducar/clsPmieducarCandidatoFilaUnica.inc.php index 049cd2bad4..3a281b5c6b 100644 --- a/ieducar/intranet/include/pmieducar/clsPmieducarCandidatoFilaUnica.inc.php +++ b/ieducar/intranet/include/pmieducar/clsPmieducarCandidatoFilaUnica.inc.php @@ -770,22 +770,23 @@ public function vinculaMatricula($ref_cod_matricula) return false; } - public function alteraSituacao($situacao, $motivo = null) + public function alteraSituacao($situacao, $motivo = null, $data = null) { if (!$this->cod_candidato_fila_unica) { return false; } $situacao = $situacao ?: 'NULL'; - $motivo = $motivo ?: 'NULL'; + $motivo = str_replace("\'", "''", $motivo) ?: 'NULL'; $historico = $this->montaHistorico(); + $data = $data ?: 'NOW()'; $db = new clsBanco(); $db->Consulta("UPDATE pmieducar.candidato_fila_unica SET situacao = {$situacao}, - motivo = {$motivo}, + motivo = '{$motivo}', data_situacao = NOW(), - data_solicitacao = NOW(), + data_solicitacao = '{$data}', hora_solicitacao = NOW(), historico = '{$historico}' WHERE cod_candidato_fila_unica = '{$this->cod_candidato_fila_unica}'"); diff --git a/ieducar/intranet/include/pmieducar/clsPmieducarCandidatoReservaVaga.inc.php b/ieducar/intranet/include/pmieducar/clsPmieducarCandidatoReservaVaga.inc.php index 54d80cdf2f..20da93b6bc 100644 --- a/ieducar/intranet/include/pmieducar/clsPmieducarCandidatoReservaVaga.inc.php +++ b/ieducar/intranet/include/pmieducar/clsPmieducarCandidatoReservaVaga.inc.php @@ -14,10 +14,8 @@ class clsPmieducarCandidatoReservaVaga extends Model public $ref_cod_turno; public $ref_cod_pessoa_cad; public $data_cad; - public $data_update; public $ref_cod_matricula; public $situacao; - public $data_situacao; public $quantidade_membros; public $codUsuario; public $membros_trabalham; @@ -38,7 +36,6 @@ public function __construct( $mae_fez_pre_natal = null, $hora_solicitacao = null ) { - $db = new clsBanco(); $this->_schema = 'pmieducar.'; $this->_tabela = $this->_schema . 'candidato_reserva_vaga crv '; @@ -58,7 +55,8 @@ public function __construct( crv.quantidade_membros, crv.membros_trabalham, crv.mae_fez_pre_natal, - crv.hora_solicitacao '; + crv.hora_solicitacao, + crv.historico'; if (is_numeric($cod_candidato_reserva_vaga)) { $this->cod_candidato_reserva_vaga = $cod_candidato_reserva_vaga; @@ -116,8 +114,11 @@ public function __construct( */ public function cadastra() { - if (is_numeric($this->ano_letivo) && is_string($this->data_solicitacao) && is_numeric($this->ref_cod_aluno) - && is_numeric($this->ref_cod_serie) && is_numeric($this->ref_cod_pessoa_cad)) { + if (is_numeric($this->ano_letivo) && + is_string($this->data_solicitacao) && + is_numeric($this->ref_cod_aluno) && + is_numeric($this->ref_cod_serie) && + is_numeric($this->ref_cod_pessoa_cad)) { $db = new clsBanco(); $campos = ''; @@ -229,6 +230,8 @@ public function edita() if (is_numeric($this->cod_candidato_reserva_vaga)) { $db = new clsBanco(); $set = ''; + $gruda = ''; + $campos = ''; if (is_numeric($this->ano_letivo)) { $set .= "{$gruda}ano_letivo = '{$this->ano_letivo}'"; @@ -289,10 +292,8 @@ public function edita() if (is_string($this->hora_solicitacao) && !empty($this->hora_solicitacao)) { $set .= "{$gruda}hora_solicitacao = '$this->hora_solicitacao'"; - $gruda = ', '; } elseif (empty($this->hora_solicitacao)) { $set .= "{$gruda}hora_solicitacao = NULL"; - $gruda = ', '; } if ($set) { @@ -310,20 +311,30 @@ public function edita() * * @return array */ - public function lista($ano_letivo = null, $nome = null, $nome_responsavel = null, $ref_cod_escola = null, $ref_cod_serie = null, $ref_cod_curso = null, $ref_cod_turno = null, $ref_cod_aluno = null, $situacaoEmEspera = false) - { - $filtros = ''; + public function lista( + $ano_letivo = null, + $nome = null, + $nome_responsavel = null, + $ref_cod_escola = null, + $ref_cod_serie = null, + $ref_cod_curso = null, + $ref_cod_turno = null, + $ref_cod_aluno = null, + $situacaoEmEspera = false + ) { $this->resetCamposLista(); - $sql = "SELECT {$this->_campos_lista}, resp_pes.nome as nome_responsavel, pes.nome as nome, relatorio.get_nome_escola(crv.ref_cod_escola) as nm_escola - FROM {$this->_tabela} - INNER JOIN pmieducar.aluno a ON a.cod_aluno = crv.ref_cod_aluno - INNER JOIN cadastro.pessoa pes ON pes.idpes = a.ref_idpes - INNER JOIN cadastro.fisica fis ON fis.idpes = pes.idpes - LEFT JOIN cadastro.pessoa resp_pes ON fis.idpes_responsavel = resp_pes.idpes - INNER JOIN pmieducar.serie AS ser ON ser.cod_serie = crv.ref_cod_serie "; + $sql = "SELECT {$this->_campos_lista}, + resp_pes.nome as nome_responsavel, + pes.nome as nome, + relatorio.get_nome_escola(crv.ref_cod_escola) as nm_escola + FROM {$this->_tabela} + INNER JOIN pmieducar.aluno a ON a.cod_aluno = crv.ref_cod_aluno + INNER JOIN cadastro.pessoa pes ON pes.idpes = a.ref_idpes + INNER JOIN cadastro.fisica fis ON fis.idpes = pes.idpes + LEFT JOIN cadastro.pessoa resp_pes ON fis.idpes_responsavel = resp_pes.idpes + INNER JOIN pmieducar.serie AS ser ON ser.cod_serie = crv.ref_cod_serie "; $whereAnd = ' WHERE '; - $filtros = ''; if (is_numeric($ano_letivo)) { @@ -374,7 +385,6 @@ public function lista($ano_letivo = null, $nome = null, $nome_responsavel = null if ($situacaoEmEspera) { $filtros .= " {$whereAnd} crv.situacao IS NULL"; - $whereAnd = ' AND '; } $db = new clsBanco(); @@ -382,12 +392,13 @@ public function lista($ano_letivo = null, $nome = null, $nome_responsavel = null $resultado = []; $sql .= $filtros . $this->getOrderby() . $this->getLimite(); - $this->_total = $db->CampoUnico("SELECT COUNT(0) FROM {$this->_tabela} - INNER JOIN pmieducar.aluno a ON a.cod_aluno = crv.ref_cod_aluno - INNER JOIN cadastro.pessoa pes ON pes.idpes = a.ref_idpes - INNER JOIN cadastro.fisica fis ON fis.idpes = pes.idpes - LEFT JOIN cadastro.pessoa resp_pes ON fis.idpes_responsavel = resp_pes.idpes - INNER JOIN pmieducar.serie AS ser ON ser.cod_serie = crv.ref_cod_serie {$filtros}"); + $this->_total = $db->CampoUnico("SELECT COUNT(0) + FROM {$this->_tabela} + INNER JOIN pmieducar.aluno a ON a.cod_aluno = crv.ref_cod_aluno + INNER JOIN cadastro.pessoa pes ON pes.idpes = a.ref_idpes + INNER JOIN cadastro.fisica fis ON fis.idpes = pes.idpes + LEFT JOIN cadastro.pessoa resp_pes ON fis.idpes_responsavel = resp_pes.idpes + INNER JOIN pmieducar.serie AS ser ON ser.cod_serie = crv.ref_cod_serie {$filtros}"); $db->Consulta($sql); @@ -420,12 +431,18 @@ public function detalhe() { if (is_numeric($this->cod_candidato_reserva_vaga)) { $db = new clsBanco(); - $db->Consulta("SELECT {$this->_todos_campos}, resp_pes.nome as nome_responsavel, pes.nome as nome, crv.motivo as motivo, relatorio.get_nome_escola(crv.ref_cod_escola) as nm_escola, (SELECT nm_serie FROM pmieducar.serie WHERE cod_serie = ref_cod_serie) as serie FROM {$this->_tabela} - INNER JOIN pmieducar.aluno a ON a.cod_aluno = crv.ref_cod_aluno - INNER JOIN cadastro.pessoa pes ON pes.idpes = a.ref_idpes - INNER JOIN cadastro.fisica fis ON fis.idpes = pes.idpes - LEFT JOIN cadastro.pessoa resp_pes ON fis.idpes_responsavel = resp_pes.idpes - WHERE cod_candidato_reserva_vaga = '{$this->cod_candidato_reserva_vaga}'"); + $db->Consulta("SELECT {$this->_todos_campos}, + resp_pes.nome as nome_responsavel, + pes.nome as nome, + crv.motivo as motivo, + relatorio.get_nome_escola(crv.ref_cod_escola) as nm_escola, + (SELECT nm_serie FROM pmieducar.serie WHERE cod_serie = ref_cod_serie) as serie + FROM {$this->_tabela} + INNER JOIN pmieducar.aluno a ON a.cod_aluno = crv.ref_cod_aluno + INNER JOIN cadastro.pessoa pes ON pes.idpes = a.ref_idpes + INNER JOIN cadastro.fisica fis ON fis.idpes = pes.idpes + LEFT JOIN cadastro.pessoa resp_pes ON fis.idpes_responsavel = resp_pes.idpes + WHERE cod_candidato_reserva_vaga = '{$this->cod_candidato_reserva_vaga}'"); $db->ProximoRegistro(); return $db->Tupla(); @@ -434,16 +451,24 @@ public function detalhe() return false; } + /** + * @param null $ano_letivo + * @param null $ref_cod_serie + * @param null $ref_cod_aluno + * @param null $ref_cod_escola + * + * @return bool + * + * @throws Exception + */ public function atualizaDesistente($ano_letivo = null, $ref_cod_serie = null, $ref_cod_aluno = null, $ref_cod_escola = null) { - $filtros = ''; $this->resetCamposLista(); $sql = "UPDATE {$this->_tabela} SET situacao = 'D', data_situacao = NOW()"; $whereAnd = ' WHERE '; - $filtros = ''; if (is_numeric($ano_letivo)) { @@ -463,15 +488,10 @@ public function atualizaDesistente($ano_letivo = null, $ref_cod_serie = null, $r if (is_numeric($ref_cod_escola)) { $filtros .= " {$whereAnd} ref_cod_escola <> {$ref_cod_escola} "; - $whereAnd = ' AND '; } $db = new clsBanco(); - $countCampos = count(explode(',', $this->_campos_lista)); - $resultado = []; - $sql .= $filtros . $this->getOrderby() . $this->getLimite(); - $db->Consulta($sql); return true; @@ -512,29 +532,62 @@ public function excluir() return false; } - public function vinculaMatricula($ref_cod_escola, $ref_cod_matricula, $ref_cod_aluno) + /** + * @return false|string + */ + protected function montaHistorico() { - if (is_numeric($ref_cod_escola) && is_numeric($ref_cod_matricula) && is_numeric($ref_cod_aluno)) { - $sql = "UPDATE pmieducar.candidato_reserva_vaga SET ref_cod_matricula = '{$ref_cod_matricula}', situacao = 'A', data_situacao = NOW() - WHERE ref_cod_escola = '{$ref_cod_escola}' - AND ref_cod_aluno = '{$ref_cod_aluno}'"; - $db = new clsBanco(); - $db->Consulta($sql); - $db->ProximoRegistro(); + $detalhes = $this->detalhe(); + $historico = $detalhes['historico']; - return $db->Tupla(); + if (is_null($historico)) { + $historico = []; + } else { + $historico = json_decode($historico, true); } - return false; + $mapaSituacao = [ + null => 'Em espera', + 'I' => 'Indeferida', + 'A' => 'Atendida', + ]; + + $data = $detalhes['data_situacao'] ?? $detalhes['data_solicitacao']; + $data = date('d/m/Y', strtotime($data)); + + $historico[] = [ + 'situacao' => $mapaSituacao[$detalhes['situacao']] ?? 'Desconhecida', + 'motivo' => trim($detalhes['motivo']), + 'data' => $data, + ]; + + return json_encode($historico); } - public function indefereOutrasReservas($cod_aluno) + /** + * @param $ref_cod_escola + * @param $ref_cod_matricula + * @param $ref_cod_aluno + * + * @return bool|mixed + * + * @throws Exception + */ + public function vinculaMatricula($ref_cod_escola, $ref_cod_matricula, $ref_cod_aluno) { - if (is_numeric($this->cod_candidato_reserva_vaga) && is_numeric($cod_aluno)) { + if (is_numeric($ref_cod_escola) && + is_numeric($ref_cod_matricula) && + is_numeric($ref_cod_aluno)) { + $historico = $this->montaHistorico(); + $sql = "UPDATE pmieducar.candidato_reserva_vaga + SET ref_cod_matricula = '{$ref_cod_matricula}', + situacao = 'A', + data_situacao = NOW(), + historico = '{$historico}' + WHERE ref_cod_escola = '{$ref_cod_escola}' + AND ref_cod_aluno = '{$ref_cod_aluno}'"; $db = new clsBanco(); - $db->Consulta("UPDATE pmieducar.candidato_reserva_vaga SET situacao = 'N', data_situacao = NOW() - WHERE cod_candidato_reserva_vaga <> '{$this->cod_candidato_reserva_vaga}' - AND ref_cod_aluno = {$cod_aluno} "); + $db->Consulta($sql); $db->ProximoRegistro(); return $db->Tupla(); @@ -543,14 +596,26 @@ public function indefereOutrasReservas($cod_aluno) return false; } + /** + * @param null $motivo + * + * @return bool|mixed + * + * @throws Exception + */ public function indefereSolicitacao($motivo = null) { $motivo = $motivo == null ? 'null' : '\'' . $motivo . '\''; if (is_numeric($this->cod_candidato_reserva_vaga)) { + $historico = $this->montaHistorico(); $db = new clsBanco(); - $db->Consulta("UPDATE pmieducar.candidato_reserva_vaga SET situacao = 'N', motivo = $motivo, data_situacao = NOW() - WHERE cod_candidato_reserva_vaga = '{$this->cod_candidato_reserva_vaga}'"); + $db->Consulta("UPDATE pmieducar.candidato_reserva_vaga + SET situacao = 'N', + motivo = $motivo, + data_situacao = NOW(), + historico = '{$historico}' + WHERE cod_candidato_reserva_vaga = '{$this->cod_candidato_reserva_vaga}'"); $db->ProximoRegistro(); return $db->Tupla(); @@ -559,21 +624,36 @@ public function indefereSolicitacao($motivo = null) return false; } - public function alteraSituacao($situacao, $motivo = null) + /** + * @param $situacao + * @param null $motivo + * + * @return bool + * + * @throws Exception + */ + public function alteraSituacao($situacao, $motivo = null, $data = null) { if (!$this->cod_candidato_reserva_vaga) { return false; } $situacao = $situacao ?: 'NULL'; - $motivo = $motivo ?: 'NULL'; + $motivo = str_replace("\'", "''", addslashes($motivo)) ?: null; + if ($data) { + $data = "data_solicitacao = to_date('{$data}','DD-MM-YYYY'),"; + } + + $historico = $this->montaHistorico(); $db = new clsBanco(); $db->Consulta("UPDATE pmieducar.candidato_reserva_vaga - SET situacao = {$situacao}, - motivo = {$motivo}, - data_situacao = NOW() - WHERE cod_candidato_reserva_vaga = '{$this->cod_candidato_reserva_vaga}'"); + SET situacao = {$situacao}, + motivo = '{$motivo}', + {$data} + data_situacao = NOW(), + historico = '{$historico}' + WHERE cod_candidato_reserva_vaga = '{$this->cod_candidato_reserva_vaga}'"); return true; } diff --git a/ieducar/intranet/include/pmieducar/clsPmieducarInstituicao.inc.php b/ieducar/intranet/include/pmieducar/clsPmieducarInstituicao.inc.php index 1013a92e1a..8095af278d 100644 --- a/ieducar/intranet/include/pmieducar/clsPmieducarInstituicao.inc.php +++ b/ieducar/intranet/include/pmieducar/clsPmieducarInstituicao.inc.php @@ -51,6 +51,7 @@ class clsPmieducarInstituicao extends Model public $exibir_apenas_professores_alocados; public $bloquear_vinculo_professor_sem_alocacao_escola; public $permitir_matricula_fora_periodo_letivo; + public $ordenar_alunos_sequencial_enturmacao; public function __construct( $cod_instituicao = null, @@ -81,7 +82,8 @@ public function __construct( $exigir_lancamentos_anteriores = null, $exibir_apenas_professores_alocados = null, $bloquear_vinculo_professor_sem_alocacao_escola = null, - $permitir_matricula_fora_periodo_letivo = null + $permitir_matricula_fora_periodo_letivo = null, + $ordenar_alunos_sequencial_enturmacao = null ) { $db = new clsBanco(); $this->_schema = 'pmieducar.'; @@ -136,7 +138,8 @@ public function __construct( exigir_lancamentos_anteriores, exibir_apenas_professores_alocados, bloquear_vinculo_professor_sem_alocacao_escola, - permitir_matricula_fora_periodo_letivo + permitir_matricula_fora_periodo_letivo, + ordenar_alunos_sequencial_enturmacao '; if (is_numeric($ref_usuario_cad)) { @@ -249,6 +252,10 @@ public function __construct( if (is_bool($permitir_matricula_fora_periodo_letivo)) { $this->permitir_matricula_fora_periodo_letivo = $permitir_matricula_fora_periodo_letivo; } + + if (is_bool($ordenar_alunos_sequencial_enturmacao)) { + $this->ordenar_alunos_sequencial_enturmacao = $ordenar_alunos_sequencial_enturmacao; + } } public function canRegister() @@ -635,6 +642,16 @@ public function cadastra() $gruda = ', '; } + if (dbBool($this->ordenar_alunos_sequencial_enturmacao)) { + $campos .= "{$gruda}ordenar_alunos_sequencial_enturmacao"; + $valores .= "{$gruda} true "; + $gruda = ', '; + } else { + $campos .= "{$gruda}ordenar_alunos_sequencial_enturmacao"; + $valores .= "{$gruda} false "; + $gruda = ', '; + } + if (is_string($this->orgao_regional) and !empty($this->orgao_regional)) { $campos .= "{$gruda}orgao_regional"; $valores .= "{$gruda}'{$this->orgao_regional}'"; @@ -994,6 +1011,14 @@ public function edita() $gruda = ', '; } + if (dbBool($this->ordenar_alunos_sequencial_enturmacao)) { + $set .= "{$gruda}ordenar_alunos_sequencial_enturmacao = true "; + $gruda = ', '; + } else { + $set .= "{$gruda}ordenar_alunos_sequencial_enturmacao = false "; + $gruda = ', '; + } + if ($set) { $db->Consulta("UPDATE {$this->_tabela} SET $set WHERE cod_instituicao = '{$this->cod_instituicao}'"); diff --git a/ieducar/intranet/include/pmieducar/clsPmieducarMatriculaTurma.inc.php b/ieducar/intranet/include/pmieducar/clsPmieducarMatriculaTurma.inc.php index 82e366e07d..fc51695d4d 100644 --- a/ieducar/intranet/include/pmieducar/clsPmieducarMatriculaTurma.inc.php +++ b/ieducar/intranet/include/pmieducar/clsPmieducarMatriculaTurma.inc.php @@ -359,7 +359,8 @@ public function lista( $int_ano_turma = false, $dependencia = null, $apenasTurmasMultiSeriadas = false, - $apenasTurmasUnificadas = false + $apenasTurmasUnificadas = false, + $ultimoSequencialNaTurma = false ) { $nome = ''; $tab_aluno = ''; @@ -623,6 +624,16 @@ public function lista( $whereAnd = ' AND '; } + if ($ultimoSequencialNaTurma) { + $filtros .= "{$whereAnd} mt.sequencial = ( + SELECT max(sequencial) + FROM pmieducar.matricula_turma + WHERE matricula_turma.ref_cod_turma = mt.ref_cod_turma + AND matricula_turma.ref_cod_matricula = m.cod_matricula + )"; + $whereAnd = ' AND '; + } + $db = new clsBanco(); $countCampos = count(explode(',', $this->_campos_lista)); $resultado = []; diff --git a/ieducar/lib/App/Unificacao/Pessoa.php b/ieducar/lib/App/Unificacao/Pessoa.php index a6fd98174e..40de7cb568 100644 --- a/ieducar/lib/App/Unificacao/Pessoa.php +++ b/ieducar/lib/App/Unificacao/Pessoa.php @@ -21,10 +21,6 @@ class App_Unificacao_Pessoa extends App_Unificacao_Base 'tabela' => 'cadastro.fisica', 'coluna' => 'idpes' ], - [ - 'tabela' => 'cadastro.fisica_cpf', - 'coluna' => 'idpes' - ], [ 'tabela' => 'cadastro.fisica_foto', 'coluna' => 'idpes' @@ -96,14 +92,6 @@ class App_Unificacao_Pessoa extends App_Unificacao_Base 'tabela' => 'cadastro.fisica', 'coluna' => 'idpes_cad' ], - [ - 'tabela' => 'cadastro.fisica_cpf', - 'coluna' => 'idpes_rev' - ], - [ - 'tabela' => 'cadastro.fisica_cpf', - 'coluna' => 'idpes_cad' - ], [ 'tabela' => 'cadastro.fone_pessoa', 'coluna' => 'idpes_rev' diff --git a/ieducar/modules/Avaliacao/Views/DiarioApiController.php b/ieducar/modules/Avaliacao/Views/DiarioApiController.php index 935e5753c7..e23c4171dc 100644 --- a/ieducar/modules/Avaliacao/Views/DiarioApiController.php +++ b/ieducar/modules/Avaliacao/Views/DiarioApiController.php @@ -832,6 +832,12 @@ protected function getMatriculas() null, null, null, + true, + null, + null, + null, + null, + null, true );