From 00101e5d4d3f7503c636342eb2b8a58b1bf603ff Mon Sep 17 00:00:00 2001 From: Lucas D'Avila Date: Thu, 31 Jan 2013 20:33:39 -0200 Subject: [PATCH] Corrigido / aplicado melhorias no modulo deprecado biblioteca, adicionado /modules/Biblioteca com emprestimo reescrito. --- ieducar/intranet/educar_acervo_assunto_cad.php | 31 ++++--------------------------- ieducar/intranet/educar_acervo_cad.php | 179 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------------- ieducar/intranet/educar_acervo_det.php | 9 ++++++++- ieducar/intranet/educar_acervo_editora_cad.php | 39 +++++++++------------------------------ ieducar/intranet/educar_acervo_editora_cad_pop.php | 14 +++++++------- ieducar/intranet/educar_acervo_idioma_cad.php | 31 +++---------------------------- ieducar/intranet/educar_biblioteca_dados_cad.php | 13 +++++-------- ieducar/intranet/educar_biblioteca_index.php | 4 ++-- ieducar/intranet/educar_cliente_cad.php | 68 ++++++++------------------------------------------------------------ ieducar/intranet/educar_cliente_tipo_cad.php | 17 +++++++++++------ ieducar/intranet/educar_cliente_tipo_xml.php | 16 +++++++++++++--- ieducar/intranet/educar_exemplar_cad.php | 355 +++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ieducar/intranet/educar_exemplar_det.php | 8 +++----- ieducar/intranet/educar_exemplar_devolucao_det.php | 10 +++++----- ieducar/intranet/educar_exemplar_devolucao_lst.php | 7 +++++-- ieducar/intranet/educar_exemplar_tipo_cad.php | 9 ++++++--- ieducar/intranet/educar_fonte_cad.php | 28 ++-------------------------- ieducar/intranet/educar_motivo_baixa_cad.php | 25 +++---------------------- ieducar/intranet/educar_motivo_suspensao_cad.php | 28 ++++------------------------ ieducar/intranet/educar_situacao_cad.php | 24 +++++------------------- ieducar/intranet/include/pmieducar/clsPmieducarAcervo.inc.php | 45 ++++++++++++++++++++++++++++++++++++--------- ieducar/intranet/include/pmieducar/clsPmieducarAcervoEditora.inc.php | 38 +++++++++++++++++++++++--------------- ieducar/intranet/include/pmieducar/clsPmieducarCliente.inc.php | 165 +++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------- ieducar/intranet/include/pmieducar/clsPmieducarExemplar.inc.php | 27 +++++++++++++++++++++------ ieducar/intranet/include/pmieducar/clsPmieducarMotivoSuspensao.inc.php | 9 ++++----- ieducar/intranet/include/pmieducar/clsPmieducarReservas.inc.php | 9 +++++++-- ieducar/modules/Biblioteca/Assets/Javascripts/Emprestimo.js | 208 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/modules/Biblioteca/Assets/Javascripts/Reserva.js | 221 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/modules/Biblioteca/Model/TipoExemplar.php | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/modules/Biblioteca/Model/TipoExemplarDataMapper.php | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/modules/Biblioteca/Views/EmprestimoApiController.php | 640 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/modules/Biblioteca/Views/EmprestimoController.php | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/modules/Biblioteca/Views/ReservaApiController.php | 597 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/modules/Biblioteca/Views/ReservaController.php | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 34 files changed, 2294 insertions(+), 866 deletions(-) create mode 100644 ieducar/modules/Biblioteca/Assets/Javascripts/Emprestimo.js create mode 100644 ieducar/modules/Biblioteca/Assets/Javascripts/Reserva.js create mode 100644 ieducar/modules/Biblioteca/Model/TipoExemplar.php create mode 100644 ieducar/modules/Biblioteca/Model/TipoExemplarDataMapper.php create mode 100644 ieducar/modules/Biblioteca/Views/EmprestimoApiController.php create mode 100644 ieducar/modules/Biblioteca/Views/EmprestimoController.php create mode 100644 ieducar/modules/Biblioteca/Views/ReservaApiController.php create mode 100644 ieducar/modules/Biblioteca/Views/ReservaController.php diff --git a/ieducar/intranet/educar_acervo_assunto_cad.php b/ieducar/intranet/educar_acervo_assunto_cad.php index 5a95c1e..024e849 100644 --- a/ieducar/intranet/educar_acervo_assunto_cad.php +++ b/ieducar/intranet/educar_acervo_assunto_cad.php @@ -56,7 +56,7 @@ class indice extends clsCadastro var $data_exclusao; var $ativo; var $ref_cod_biblioteca; - + function Inicializar() { $retorno = "Novo"; @@ -98,35 +98,12 @@ class indice extends clsCadastro // primary keys $this->campoOculto( "cod_acervo_assunto", $this->cod_acervo_assunto ); - // foreign keys - /*$obj_pessoa_bib = new clsPmieducarBibliotecaUsuario(); - $lst_pessoa_bib = $obj_pessoa_bib->lista(null, $this->pessoa_logada); - - $opcoes = array("" => "Selecione"); - if(is_array($lst_pessoa_bib)) - { - foreach ($lst_pessoa_bib as $bib) - { - $obj_biblioteca = new clsPmieducarBiblioteca($bib['ref_cod_biblioteca']); - $det_biblioteca = $obj_biblioteca->detalhe(); - - $opcoes[$det_biblioteca['cod_biblioteca']] = $det_biblioteca['nm_biblioteca']; - } - } - $this->campoLista("ref_cod_biblioteca", "Biblioteca", $opcoes, $this->ref_cod_biblioteca);*/ - - $get_escola = 1; - $escola_obrigatorio = false; - $get_biblioteca = 1; - $instituicao_obrigatorio = true; - $biblioteca_obrigatorio = true; - include("include/pmieducar/educar_campo_lista.php"); + //foreign keys + $this->inputsHelper()->dynamic(array('instituicao', 'escola', 'biblioteca')); // text $this->campoTexto( "nm_assunto", "Assunto", $this->nm_assunto, 30, 255, true ); $this->campoMemo( "descricao", "Descrição", $this->descricao, 60, 5, false ); - - } function Novo() @@ -213,4 +190,4 @@ $miolo = new indice(); $pagina->addForm( $miolo ); // gera o html $pagina->MakeAll(); -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/educar_acervo_cad.php b/ieducar/intranet/educar_acervo_cad.php index fe48956..9cafe75 100644 --- a/ieducar/intranet/educar_acervo_cad.php +++ b/ieducar/intranet/educar_acervo_cad.php @@ -1,4 +1,5 @@ campoOculto( "idioma", "" ); $this->campoOculto( "autor", "" ); - $get_escola = 1; - $escola_obrigatorio = false; - $get_biblioteca = 1; - $instituicao_obrigatorio = true; - $biblioteca_obrigatorio = true; - include("include/pmieducar/educar_campo_lista.php"); - - // foreign keys - /*$opcoes = array( "" => "Selecione" ); - if( class_exists( "clsPmieducarExemplarTipo" ) ) - { - $objTemp = new clsPmieducarExemplarTipo(); - $lista = $objTemp->lista(null,null); - if ( is_array( $lista ) && count( $lista ) ) - { - $tipos = "tipos = new Array();\n"; - foreach ( $lista as $registro ) - { - $tipos .= "tipos[tipos.length] = new Array( {$registro["cod_exemplar_tipo"]}, '{$registro['nm_tipo']}', {$registro['ref_cod_biblioteca']});\n"; - - } - echo ""; - } - } - else - { - echo ""; - }*/ - $opcoes = array( "NULL" => "Selecione" ); - - if( $this->ref_cod_biblioteca ) - { - $objTemp = new clsPmieducarExemplarTipo(); - $lista = $objTemp->lista(null,$this->ref_cod_biblioteca); - if ( is_array( $lista ) && count( $lista ) ) - { - foreach ( $lista as $registro ) - { - $opcoes["{$registro['cod_exemplar_tipo']}"] = "{$registro['nm_tipo']}"; - } - } - } - - $this->campoLista( "ref_cod_exemplar_tipo", "Exemplar Tipo", $opcoes, $this->ref_cod_exemplar_tipo ); + $this->inputsHelper()->dynamic(array('instituicao', 'escola', 'biblioteca', 'bibliotecaTipoExemplar')); + // Obra referência $opcoes = array( "NULL" => "Selecione" ); if( $this->ref_cod_acervo && $this->ref_cod_acervo != "NULL") @@ -216,9 +180,9 @@ class indice extends clsCadastro } } - //campoListaPesq( $nome, $campo, $valor, $default, $caminho="", $acao = "" , $duplo=false, $descricao="", $descricao2="", $flag=null, $pag_cadastro = null, $disabled = "", $div = false, $serializedcampos = false, $obrigatorio = false ) -// $this->campoListaPesq( "ref_cod_acervo", "Obra Referência", $opcoes, $this->ref_cod_acervo,"educar_pesquisa_acervo_lst.php?campo1=ref_cod_acervo","","","","","","","",true ); $this->campoLista("ref_cod_acervo","Obra Referência",$opcoes,$this->ref_cod_acervo,"",false,"","",false,false); + + // Coleção $opcoes = array( "" => "Selecione" ); if( class_exists( "clsPmieducarAcervoColecao" ) ) { @@ -238,8 +202,8 @@ class indice extends clsCadastro $opcoes = array( "" => "Erro na geracao" ); } $this->campoLista( "ref_cod_acervo_colecao", "Coleção", $opcoes, $this->ref_cod_acervo_colecao,"",false,"","",false,false ); - //" + // Idioma $opcoes = array( "" => "Selecione" ); if( class_exists( "clsPmieducarAcervoIdioma" ) ) { @@ -363,7 +327,7 @@ class indice extends clsCadastro $det_acervo_autor = $obj_acervo_autor->detalhe(); $nm_autor = $det_acervo_autor["nm_autor"]; $this->campoTextoInv( "ref_cod_exemplar_tipo_{$autor["ref_cod_acervo_autor_"]}", "", $nm_autor, 30, 255, false, false, true ); - $this->campoCheck( "principal_{$autor["ref_cod_acervo_autor_"]}", "", $autor['principal_'], "__nome}.submit();\">", false,false,true ); + $this->campoCheck( "principal_{$autor["ref_cod_acervo_autor_"]}", "", $autor['principal_'], "__nome}.submit();\">", false, false, false ); $aux["ref_cod_acervo_autor_"] = $autor["ref_cod_acervo_autor_"]; $aux["principal_"] = $autor['principal_']; } @@ -399,18 +363,14 @@ class indice extends clsCadastro { // die("1"); $this->campoLista( "ref_cod_acervo_autor", "Autor", $opcoes, $this->ref_cod_acervo_autor,null,true,"","",false,true ); - $this->campoCheck( "principal", "   Principal", $this->principal,"__nome}.submit();\">" ); + + $this->campoCheck( "principal", "  ", $this->principal,"__nome}.submit();\">" ); } // não existe um autor principal, mas existe um autor else if ( ($this->checked != 1) && ($qtd_autor > 0) ) { -// echo "principal ".$this->checked; -// echo "is_array($this->acervo_autor)"; -// print_r($this->acervo_autor); -// -// die("2"); $this->campoLista( "ref_cod_acervo_autor", "Autor", $opcoes, $this->ref_cod_acervo_autor,null,true,null, null,null,false); - $this->campoCheck( "principal", "   Principal", $this->principal,"__nome}.submit();\">" ); + $this->campoCheck( "principal", "  ", $this->principal,"__nome}.submit();\">" ); } // existe um autor principal else @@ -420,7 +380,6 @@ class indice extends clsCadastro } $this->campoOculto( "incluir_autor", "" ); -// $this->campoRotulo( "bt_incluir_autor", "Autor", "__nome}.submit();\">" ); $this->campoQuebra(); //-----------------------FIM AUTOR------------------------// @@ -428,13 +387,15 @@ class indice extends clsCadastro // text $this->campoTexto( "titulo", "Título", $this->titulo, 40, 255, true ); $this->campoTexto( "sub_titulo", "Subtítulo", $this->sub_titulo, 40, 255, false ); - $this->campoTexto( "cdu", "Cdu", $this->cdu, 20, 15, false ); + $this->campoTexto( "estante", "Estante", $this->estante, 20, 15, false ); + $this->campoTexto( "cdd", "CDD", $this->cdd, 20, 15, false ); + $this->campoTexto( "cdu", "CDU", $this->cdu, 20, 15, false ); $this->campoTexto( "cutter", "Cutter", $this->cutter, 20, 15, false ); $this->campoNumero( "volume", "Volume", $this->volume, 20, 255, true ); $this->campoNumero( "num_edicao", "Número Edicão", $this->num_edicao, 20, 255, true ); $this->campoNumero( "ano", "Ano", $this->ano, 5, 4, true ); $this->campoNumero( "num_paginas", "Número Páginas", $this->num_paginas, 5, 255, true ); - $this->campoNumero( "isbn", "ISBN", $this->isbn, 20, 255, true ); + $this->campoNumero( "isbn", "ISBN", $this->isbn, 20, 13, true ); } function Novo() @@ -448,17 +409,16 @@ class indice extends clsCadastro $this->acervo_autor = unserialize( urldecode( $this->acervo_autor ) ); if ($this->acervo_autor) { - $obj = new clsPmieducarAcervo( null, $this->ref_cod_exemplar_tipo, $this->ref_cod_acervo, null, $this->pessoa_logada, $this->ref_cod_acervo_colecao, $this->ref_cod_acervo_idioma, $this->ref_cod_acervo_editora, $this->titulo, $this->sub_titulo, $this->cdu, $this->cutter, $this->volume, $this->num_edicao, $this->ano, $this->num_paginas, $this->isbn, null, null, 1, $this->ref_cod_biblioteca ); + $obj = new clsPmieducarAcervo( null, $this->ref_cod_exemplar_tipo, $this->ref_cod_acervo, null, $this->pessoa_logada, $this->ref_cod_acervo_colecao, $this->ref_cod_acervo_idioma, $this->ref_cod_acervo_editora, $this->titulo, $this->sub_titulo, $this->cdu, $this->cutter, $this->volume, $this->num_edicao, $this->ano, $this->num_paginas, $this->isbn, null, null, 1, $this->ref_cod_biblioteca, $this->cdd, $this->estante ); $cadastrou = $obj->cadastra(); if( $cadastrou ) { //-----------------------CADASTRA AUTOR------------------------// foreach ( $this->acervo_autor AS $autor ) { - if ($autor["principal_"] == 'on') - $autor["principal_"] = 1; - else - $autor["principal_"] = 0; + $autorPrincipal = $_POST["principal_{$autor['ref_cod_acervo_autor_']}"]; + $autor["principal_"] = is_null($autorPrincipal) ? 0 : 1; + $obj = new clsPmieducarAcervoAcervoAutor( $autor["ref_cod_acervo_autor_"], $cadastrou, $autor["principal_"] ); $cadastrou2 = $obj->cadastra(); if ( !$cadastrou2 ) @@ -495,21 +455,21 @@ class indice extends clsCadastro $this->acervo_autor = unserialize( urldecode( $this->acervo_autor ) ); if ($this->acervo_autor) { - $obj = new clsPmieducarAcervo($this->cod_acervo, $this->ref_cod_exemplar_tipo, $this->ref_cod_acervo, $this->pessoa_logada, null, $this->ref_cod_acervo_colecao, $this->ref_cod_acervo_idioma, $this->ref_cod_acervo_editora, $this->titulo, $this->sub_titulo, $this->cdu, $this->cutter, $this->volume, $this->num_edicao, $this->ano, $this->num_paginas, $this->isbn, null, null, 1, $this->ref_cod_biblioteca); + $obj = new clsPmieducarAcervo($this->cod_acervo, $this->ref_cod_exemplar_tipo, $this->ref_cod_acervo, $this->pessoa_logada, null, $this->ref_cod_acervo_colecao, $this->ref_cod_acervo_idioma, $this->ref_cod_acervo_editora, $this->titulo, $this->sub_titulo, $this->cdu, $this->cutter, $this->volume, $this->num_edicao, $this->ano, $this->num_paginas, $this->isbn, null, null, 1, $this->ref_cod_biblioteca, $this->cdd, $this->estante); $editou = $obj->edita(); if( $editou ) { //-----------------------EDITA AUTOR------------------------// + $obj = new clsPmieducarAcervoAcervoAutor( null, $this->cod_acervo ); $excluiu = $obj->excluirTodos(); if ( $excluiu ) { foreach ( $this->acervo_autor AS $autor ) { - if ($autor["principal_"] == 'on') - $autor["principal_"] = 1; - else - $autor["principal_"] = 0; + $autorPrincipal = $_POST["principal_{$autor['ref_cod_acervo_autor_']}"]; + $autor["principal_"] = is_null($autorPrincipal) ? 0 : 1; + $obj = new clsPmieducarAcervoAcervoAutor( $autor["ref_cod_acervo_autor_"], $this->cod_acervo, $autor["principal_"] ); $cadastrou2 = $obj->cadastra(); if ( !$cadastrou2 ) @@ -572,8 +532,6 @@ $pagina->MakeAll(); ?> diff --git a/ieducar/intranet/educar_acervo_det.php b/ieducar/intranet/educar_acervo_det.php index 1019661..6e2faaf 100644 --- a/ieducar/intranet/educar_acervo_det.php +++ b/ieducar/intranet/educar_acervo_det.php @@ -280,6 +280,13 @@ class indice extends clsDetalhe { $this->addDetalhe( array( "Autor", "{$tabela}") ); } + + if($registro["estante"]) + $this->addDetalhe( array( "Estante", "{$registro["estante"]}") ); + + if($registro["cdd"]) + $this->addDetalhe( array( "Cdd", "{$registro["cdd"]}") ); + if( $registro["cdu"] ) { $this->addDetalhe( array( "Cdu", "{$registro["cdu"]}") ); @@ -329,4 +336,4 @@ $miolo = new indice(); $pagina->addForm( $miolo ); // gera o html $pagina->MakeAll(); -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/educar_acervo_editora_cad.php b/ieducar/intranet/educar_acervo_editora_cad.php index 0cb7c93..82c8ab3 100644 --- a/ieducar/intranet/educar_acervo_editora_cad.php +++ b/ieducar/intranet/educar_acervo_editora_cad.php @@ -105,30 +105,9 @@ class indice extends clsCadastro // primary keys $this->campoOculto( "cod_acervo_editora", $this->cod_acervo_editora ); - /*$obj_pessoa_bib = new clsPmieducarBibliotecaUsuario(); - $lst_pessoa_bib = $obj_pessoa_bib->lista(null, $this->pessoa_logada); + //foreign keys + $this->inputsHelper()->dynamic(array('instituicao', 'escola', 'biblioteca')); - $opcoes = array("" => "Selecione"); - if(is_array($lst_pessoa_bib)) - { - foreach ($lst_pessoa_bib as $bib) - { - $obj_biblioteca = new clsPmieducarBiblioteca($bib['ref_cod_biblioteca']); - $det_biblioteca = $obj_biblioteca->detalhe(); - - $opcoes[$det_biblioteca['cod_biblioteca']] = $det_biblioteca['nm_biblioteca']; - } - } - $this->campoLista("ref_cod_biblioteca", "Biblioteca", $opcoes, $this->ref_cod_biblioteca); - */ - - $get_escola = 1; - $escola_obrigatorio = false; - $get_biblioteca = 1; - $instituicao_obrigatorio = true; - $biblioteca_obrigatorio = true; - include("include/pmieducar/educar_campo_lista.php"); - //text $this->campoTexto( "nm_editora", "Editora", $this->nm_editora, 30, 255, true ); @@ -138,7 +117,7 @@ class indice extends clsCadastro $this->cep = int2CEP($this->cep); } - $this->campoCep( "cep", "CEP", $this->cep, true ); + $this->campoCep( "cep", "CEP", $this->cep, false ); $opcoes = array( "" => "Selecione" ); if( class_exists( "clsUf" ) ) @@ -158,10 +137,10 @@ class indice extends clsCadastro echo ""; $opcoes = array( "" => "Erro na geracao" ); } - $this->campoLista( "ref_sigla_uf", "Estado", $opcoes, $this->ref_sigla_uf ); + $this->campoLista( "ref_sigla_uf", "Estado", $opcoes, $this->ref_sigla_uf, '', false, '', '', false, false ); - $this->campoTexto( "cidade", "Cidade", $this->cidade, 30, 60, true ); - $this->campoTexto( "bairro", "Bairro", $this->bairro, 30, 60, true ); + $this->campoTexto( "cidade", "Cidade", $this->cidade, 30, 60, false ); + $this->campoTexto( "bairro", "Bairro", $this->bairro, 30, 60, false ); $opcoes = array( "" => "Selecione" ); if( class_exists( "clsTipoLogradouro" ) ) @@ -181,9 +160,9 @@ class indice extends clsCadastro echo ""; $opcoes = array( "" => "Erro na geracao" ); } - $this->campoLista( "ref_idtlog", "Tipo Logradouro", $opcoes, $this->ref_idtlog ); + $this->campoLista( "ref_idtlog", "Tipo Logradouro", $opcoes, $this->ref_idtlog, '', false, '', '', false, false ); - $this->campoTexto( "logradouro", "Logradouro", $this->logradouro, 30, 255, true ); + $this->campoTexto( "logradouro", "Logradouro", $this->logradouro, 30, 255, false ); $this->campoNumero( "numero", "Número", $this->numero, 6, 6 ); @@ -280,4 +259,4 @@ $miolo = new indice(); $pagina->addForm( $miolo ); // gera o html $pagina->MakeAll(); -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/educar_acervo_editora_cad_pop.php b/ieducar/intranet/educar_acervo_editora_cad_pop.php index ed6a639..72b09c1 100644 --- a/ieducar/intranet/educar_acervo_editora_cad_pop.php +++ b/ieducar/intranet/educar_acervo_editora_cad_pop.php @@ -93,7 +93,7 @@ class indice extends clsCadastro $this->cep = int2CEP($this->cep); } - $this->campoCep( "cep", "CEP", $this->cep, true ); + $this->campoCep( "cep", "CEP", $this->cep, false ); $opcoes = array( "" => "Selecione" ); if( class_exists( "clsUf" ) ) @@ -113,10 +113,10 @@ class indice extends clsCadastro echo ""; $opcoes = array( "" => "Erro na geracao" ); } - $this->campoLista( "ref_sigla_uf", "Estado", $opcoes, $this->ref_sigla_uf ); + $this->campoLista( "ref_sigla_uf", "Estado", $opcoes, $this->ref_sigla_uf, '', false, '', '', false, false ); - $this->campoTexto( "cidade", "Cidade", $this->cidade, 30, 60, true ); - $this->campoTexto( "bairro", "Bairro", $this->bairro, 30, 60, true ); + $this->campoTexto( "cidade", "Cidade", $this->cidade, 30, 60, false ); + $this->campoTexto( "bairro", "Bairro", $this->bairro, 30, 60, false ); $opcoes = array( "" => "Selecione" ); if( class_exists( "clsTipoLogradouro" ) ) @@ -136,9 +136,9 @@ class indice extends clsCadastro echo ""; $opcoes = array( "" => "Erro na geracao" ); } - $this->campoLista( "ref_idtlog", "Tipo Logradouro", $opcoes, $this->ref_idtlog ); + $this->campoLista( "ref_idtlog", "Tipo Logradouro", $opcoes, $this->ref_idtlog, '', false, '', '', false, false ); - $this->campoTexto( "logradouro", "Logradouro", $this->logradouro, 30, 255, true ); + $this->campoTexto( "logradouro", "Logradouro", $this->logradouro, 30, 255, false ); $this->campoNumero( "numero", "Número", $this->numero, 6, 6 ); @@ -201,4 +201,4 @@ $pagina->MakeAll(); ?> \ No newline at end of file + diff --git a/ieducar/intranet/educar_acervo_idioma_cad.php b/ieducar/intranet/educar_acervo_idioma_cad.php index e5928fd..5f88b24 100644 --- a/ieducar/intranet/educar_acervo_idioma_cad.php +++ b/ieducar/intranet/educar_acervo_idioma_cad.php @@ -99,36 +99,11 @@ class indice extends clsCadastro // primary keys $this->campoOculto( "cod_acervo_idioma", $this->cod_acervo_idioma ); - // foreign keys - /*$obj_pessoa_bib = new clsPmieducarBibliotecaUsuario(); - $lst_pessoa_bib = $obj_pessoa_bib->lista(null, $this->pessoa_logada); + //foreign keys + $this->inputsHelper()->dynamic(array('instituicao', 'escola', 'biblioteca')); - $opcoes = array("" => "Selecione"); - if(is_array($lst_pessoa_bib)) - { - foreach ($lst_pessoa_bib as $bib) - { - $obj_biblioteca = new clsPmieducarBiblioteca($bib['ref_cod_biblioteca']); - $det_biblioteca = $obj_biblioteca->detalhe(); - - $opcoes[$det_biblioteca['cod_biblioteca']] = $det_biblioteca['nm_biblioteca']; - } - } - $this->campoLista("ref_cod_biblioteca", "Biblioteca", $opcoes, $this->ref_cod_biblioteca); - */ - $get_escola = 1; - $escola_obrigatorio = false; - $get_biblioteca = 1; - $instituicao_obrigatorio = true; - $biblioteca_obrigatorio = true; - include("include/pmieducar/educar_campo_lista.php"); - - // text $this->campoTexto( "nm_idioma", "Idioma", $this->nm_idioma, 30, 255, true ); - - // data - } function Novo() @@ -215,4 +190,4 @@ $miolo = new indice(); $pagina->addForm( $miolo ); // gera o html $pagina->MakeAll(); -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/educar_biblioteca_dados_cad.php b/ieducar/intranet/educar_biblioteca_dados_cad.php index 691c5fc..0934ab2 100644 --- a/ieducar/intranet/educar_biblioteca_dados_cad.php +++ b/ieducar/intranet/educar_biblioteca_dados_cad.php @@ -71,7 +71,7 @@ class indice extends clsCadastro var $biblioteca_feriado; var $incluir_feriado; var $excluir_feriado; - + var $tombo_automatico; function Inicializar() @@ -148,10 +148,10 @@ class indice extends clsCadastro // $this->campoLista( "requisita_senha", "Requisita Senha", $opcoes, $this->requisita_senha ); $this->campoCheck( "requisita_senha", "Requisita Senha", $this->requisita_senha ); $this->campoNumero( "dias_espera", "Dias Espera", $this->dias_espera, 2, 2, true ); - + if ($this->tombo_automatico) $this->campoBoolLista("tombo_automatico", "Biblioteca possui tombo automático", $this->tombo_automatico); - else + else $this->campoBoolLista("tombo_automatico", "Biblioteca possui tombo automático", "t"); //-----------------------INCLUI DIA SEMANA------------------------// @@ -300,10 +300,7 @@ class indice extends clsCadastro $this->valor_maximo_multa = str_replace(".","",$this->valor_maximo_multa); $this->valor_maximo_multa = str_replace(",",".",$this->valor_maximo_multa); - if ($this->requisita_senha == 'on') - $this->requisita_senha = 1; - else - $this->requisita_senha = 0; + $this->requisita_senha = is_null($this->requisita_senha) ? 0 : 1; $obj = new clsPmieducarBiblioteca( $this->cod_biblioteca, null, null, null, $this->valor_multa, $this->max_emprestimo, $this->valor_maximo_multa, null, null, $this->requisita_senha, 1, $this->dias_espera, $this->tombo_automatico ); $editou = $obj->edita(); @@ -413,4 +410,4 @@ $miolo = new indice(); $pagina->addForm( $miolo ); // gera o html $pagina->MakeAll(); -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/educar_biblioteca_index.php b/ieducar/intranet/educar_biblioteca_index.php index 5ce566c..eb73e14 100644 --- a/ieducar/intranet/educar_biblioteca_index.php +++ b/ieducar/intranet/educar_biblioteca_index.php @@ -44,7 +44,7 @@ class indice { return " - +
"; } @@ -58,4 +58,4 @@ $pagina->addForm( $miolo ); $pagina->MakeAll(); -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/educar_cliente_cad.php b/ieducar/intranet/educar_cliente_cad.php index f641e60..f263e54 100644 --- a/ieducar/intranet/educar_cliente_cad.php +++ b/ieducar/intranet/educar_cliente_cad.php @@ -128,7 +128,7 @@ class indice extends clsCadastro $parametros->adicionaCampoSelect('ref_idpes', 'idpes', 'nome'); $parametros->setPessoa('F'); $parametros->setPessoaCPF('N'); - $parametros->setCodSistema(1); + $parametros->setCodSistema(null); $parametros->setPessoaNovo('S'); $parametros->setPessoaTela('frame'); @@ -144,22 +144,6 @@ class indice extends clsCadastro $this->campoNumero( "login", "Login", $this->login_, 9, 9, false ); $this->campoSenha( "senha", "Senha", $this->senha_, false ); - $get_escola = 1; - $get_biblioteca = 1; - $instituicao_obrigatorio = true; - $escola_obrigatorio = false; - $biblioteca_obrigatorio = true; - include("include/pmieducar/educar_campo_lista.php"); - - //$instituicao_obrigatorio = true; - //$escola_obrigatorio = false; - //$biblioteca_obrigatorio = true; - $cliente_tipo_obrigatorio = true; - $get_instituicao = true; - $get_escola = true; - //$get_biblioteca = true; - $get_cliente_tipo = true; - if($this->cod_cliente && $this->ref_cod_biblioteca) { $db = new clsBanco(); @@ -168,12 +152,13 @@ class indice extends clsCadastro $this->ref_cod_biblioteca_atual = $this->ref_cod_biblioteca; $this->campoOculto("ref_cod_biblioteca_atual", $this->ref_cod_biblioteca_atual); - $this->ref_cod_instituicao = $db->CampoUnico("SELECT ref_cod_instituicao FROM pmieducar.biblioteca, pmieducar.cliente_tipo_cliente ctc, pmieducar.cliente_tipo ct WHERE ref_cod_cliente = '$this->cod_cliente' AND ref_cod_cliente_tipo = cod_cliente_tipo AND ct.ref_cod_biblioteca = cod_biblioteca AND ctc.ref_cod_biblioteca = {$this->ref_cod_biblioteca}"); - $this->ref_cod_escola = $db->CampoUnico("SELECT ref_cod_escola FROM pmieducar.biblioteca, pmieducar.cliente_tipo_cliente ctc, pmieducar.cliente_tipo ct WHERE ref_cod_cliente = '$this->cod_cliente' AND ref_cod_cliente_tipo = cod_cliente_tipo AND ct.ref_cod_biblioteca = cod_biblioteca AND ctc.ref_cod_biblioteca = {$this->ref_cod_biblioteca}"); - $this->ref_cod_biblioteca = $db->CampoUnico("SELECT cod_biblioteca FROM pmieducar.biblioteca, pmieducar.cliente_tipo_cliente ctc, pmieducar.cliente_tipo ct WHERE ref_cod_cliente = '$this->cod_cliente' AND ref_cod_cliente_tipo = cod_cliente_tipo AND ct.ref_cod_biblioteca = cod_biblioteca AND ctc.ref_cod_biblioteca = {$this->ref_cod_biblioteca}"); - $this->ref_cod_cliente_tipo = $db->CampoUnico("SELECT ref_cod_cliente_tipo FROM pmieducar.cliente_tipo_cliente WHERE ref_cod_cliente = '$this->cod_cliente'");// AND ref_cod_cliente_tipo IN (SELECT cod_cliente_tipo FROM pmieducar.cliente_tipo WHERE ref_cod_biblioteca = )");//IN (SELECT ref_cod_biblioteca FROM pmieducar.biblioteca_usuario WHERE ref_cod_usuario = '$this->pessoa_logada'))"); + //$this->ref_cod_biblioteca = $db->CampoUnico("SELECT cod_biblioteca FROM pmieducar.biblioteca, pmieducar.cliente_tipo_cliente ctc, pmieducar.cliente_tipo ct WHERE ref_cod_cliente = '$this->cod_cliente' AND ref_cod_cliente_tipo = cod_cliente_tipo AND ct.ref_cod_biblioteca = cod_biblioteca AND ctc.ref_cod_biblioteca = {$this->ref_cod_biblioteca}"); + + // obtem o codigo do tipo de cliente, apartir da tabela cliente_tipo_cliente + $this->ref_cod_cliente_tipo = $db->CampoUnico("SELECT ref_cod_cliente_tipo FROM pmieducar.cliente_tipo_cliente WHERE ref_cod_cliente = '$this->cod_cliente'"); } - include( "include/pmieducar/educar_campo_lista.php" ); + + $this->inputsHelper()->dynamic(array('instituicao', 'escola', 'biblioteca', 'bibliotecaTipoCliente')); } @@ -369,35 +354,6 @@ $pagina->addForm( $miolo ); $pagina->MakeAll(); ?> "; - } - } - else - { - echo ""; - $opcoes = array( "" => "Erro na geracao" ); - }*/ - - $opcoes = array( "" => "Selecione" ); - if($this->ref_cod_biblioteca) - { - if( class_exists( "clsPmieducarSituacao" ) ) - { - $objTemp = new clsPmieducarSituacao(); - $lista = $objTemp->lista(null,null,null,null,null,null,null,null,null,null,null,null,null,$this->ref_cod_biblioteca); - if ( is_array( $lista ) && count( $lista ) ) - { - foreach ( $lista as $registro ) - { - $opcoes["{$registro['cod_situacao']}"] = "{$registro['nm_situacao']}"; - } - } - } - else - { - echo ""; - $opcoes = array( "" => "Erro na geracao" ); - } - } - $this->campoLista( "ref_cod_situacao", "Situacão", $opcoes, $this->ref_cod_situacao ); - - - // text $opcoes = array( "" => "Selecione", "2" => "Sim", "1" => "Não" ); $this->campoLista( "permite_emprestimo", "Permite Emprestimo", $opcoes, $this->permite_emprestimo ); - //$this->campoTexto( "permite_emprestimo", "Permite Emprestimo", $this->permite_emprestimo, 30, 255, true ); + $this->preco = is_numeric($this->preco) ? number_format($this->preco, 2, ",", ".") : ""; $this->campoMonetario( "preco", "Preco", $this->preco, 10, 20, true ); + $this->inputsHelper()->dynamic('bibliotecaPesquisaObra', array('required' => true)); + // data if(!$this->data_aquisicao) $this->data_aquisicao = date("d/m/Y"); - $this->campoData( "data_aquisicao", "Data Aquisicão", $this->data_aquisicao, false ); + + $this->campoData( "data_aquisicao", "Data Aquisicão", $this->data_aquisicao, true ); + + $this->campoNumero("tombo", "Tombo", $this->tombo, 10, 10, false); + if (!is_numeric($this->cod_exemplar)) - { $this->campoNumero("qtd_livros", "Quantidade de Livros", 1, 5, 5, true); -// $this->campoBoolLista("tombo_automarico", "Tombo Automático", "t"); - $this->campoNumero("combo_manual", "Combo", "", 5, 5, false); - $this->campoOculto("eh_manual", 0); - } } function Novo() @@ -290,33 +159,27 @@ class indice extends clsCadastro $this->preco = str_replace(".","",$this->preco); $this->preco = str_replace(",",".",$this->preco); - if (!$this->combo_manual) - { - $obj_exemplar = new clsPmieducarExemplar(); - $max_tombo = $obj_exemplar->retorna_tombo_maximo() + 1; - } - else - { - $max_tombo = $this->combo_manual; - } - for ($i = 0; $i < $this->qtd_livros; $i++) + + $this->data_aquisicao = dataToBanco($this->data_aquisicao); + + for ($i = 0; $i < $this->qtd_livros; $i++) { - $obj = new clsPmieducarExemplar( $this->cod_exemplar, $this->ref_cod_fonte, $this->ref_cod_motivo_baixa, $this->ref_cod_acervo, $this->ref_cod_situacao, $this->pessoa_logada, $this->pessoa_logada, $this->permite_emprestimo, $this->preco, $this->data_cadastro, $this->data_exclusao, $this->ativo, $this->data_aquisicao, $max_tombo ); + $obj = new clsPmieducarExemplar($this->cod_exemplar, $this->ref_cod_fonte, $this->ref_cod_motivo_baixa, $this->ref_cod_acervo, $this->ref_cod_situacao, $this->pessoa_logada, $this->pessoa_logada, $this->permite_emprestimo, $this->preco, $this->data_cadastro, $this->data_exclusao, $this->ativo, $this->data_aquisicao, $this->getTombo()); $cadastrou = $obj->cadastra(); - if (!$cadastrou) + if (!$cadastrou) { $this->mensagem = "Cadastro não realizado.
"; echo ""; return false; } - $max_tombo++; - } + } $this->mensagem .= "Cadastro efetuado com sucesso.
"; header( "Location: educar_exemplar_lst.php" ); die(); return true; } + function Editar() { @session_start(); @@ -330,7 +193,9 @@ class indice extends clsCadastro $this->preco = str_replace(".","",$this->preco); $this->preco = str_replace(",",".",$this->preco); - $obj = new clsPmieducarExemplar($this->cod_exemplar, $this->ref_cod_fonte, $this->ref_cod_motivo_baixa, $this->ref_cod_acervo, $this->ref_cod_situacao, $this->pessoa_logada, $this->pessoa_logada, $this->permite_emprestimo, $this->preco, $this->data_cadastro, $this->data_exclusao, $this->ativo, $this->data_aquisicao); + $this->data_aquisicao = dataToBanco($this->data_aquisicao); + + $obj = new clsPmieducarExemplar($this->cod_exemplar, $this->ref_cod_fonte, $this->ref_cod_motivo_baixa, $this->ref_cod_acervo, $this->ref_cod_situacao, $this->pessoa_logada, $this->pessoa_logada, $this->permite_emprestimo, $this->preco, $this->data_cadastro, $this->data_exclusao, $this->ativo, $this->data_aquisicao, $this->getTombo()); $editou = $obj->edita(); if( $editou ) { @@ -369,6 +234,21 @@ class indice extends clsCadastro echo ""; return false; } + + protected function getTombo(){ + if (! $this->tombo) { + $exemplar = new clsPmieducarExemplar(); + $tombo = $exemplar->retorna_tombo_maximo($this->ref_cod_biblioteca, $this->cod_exemplar) + 1; + } + else { + // após obter tombo reseta para na proxima chamada de getTombo buscar o proximo no banco + $tombo = $this->tombo; + $this->tombo = null; + } + + return $tombo; + } + } // cria uma extensao da classe base @@ -380,144 +260,3 @@ $pagina->addForm( $miolo ); // gera o html $pagina->MakeAll(); ?> - \ No newline at end of file diff --git a/ieducar/intranet/educar_exemplar_det.php b/ieducar/intranet/educar_exemplar_det.php index 373922c..62b1c98 100644 --- a/ieducar/intranet/educar_exemplar_det.php +++ b/ieducar/intranet/educar_exemplar_det.php @@ -129,11 +129,9 @@ class indice extends clsDetalhe echo ""; } + $this->addDetalhe(array("Código", "{$registro["cod_exemplar"]}")); + $this->addDetalhe(array("Tombo", "{$registro["tombo"]}")); - if( $registro["cod_exemplar"] ) - { - $this->addDetalhe( array( "Tombo", "{$registro["cod_exemplar"]}") ); - } if( $registro["ref_cod_acervo"] ) { $this->addDetalhe( array( "Obra Referéncia", "{$registro["ref_cod_acervo"]}") ); @@ -193,4 +191,4 @@ $miolo = new indice(); $pagina->addForm( $miolo ); // gera o html $pagina->MakeAll(); -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/educar_exemplar_devolucao_det.php b/ieducar/intranet/educar_exemplar_devolucao_det.php index 4f272ba..adf862a 100644 --- a/ieducar/intranet/educar_exemplar_devolucao_det.php +++ b/ieducar/intranet/educar_exemplar_devolucao_det.php @@ -187,10 +187,10 @@ class indice extends clsDetalhe { $this->addDetalhe( array( "Obra", "{$titulo_exemplar}") ); } - if( $registro["ref_cod_exemplar"] ) - { - $this->addDetalhe( array( "Tombo", "{$registro["ref_cod_exemplar"]}") ); - } + + $this->addDetalhe( array( "Código exemplar", "{$registro["ref_cod_exemplar"]}") ); + $this->addDetalhe( array( "Tombo", "{$det_ref_cod_exemplar["tombo"]}") ); + if( $registro["data_retirada"] ) { $this->addDetalhe( array( "Data Retirada", dataFromPgToBr( $registro["data_retirada"], "d/m/Y" ) ) ); @@ -219,4 +219,4 @@ $miolo = new indice(); $pagina->addForm( $miolo ); // gera o html $pagina->MakeAll(); -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/educar_exemplar_devolucao_lst.php b/ieducar/intranet/educar_exemplar_devolucao_lst.php index 7525966..44f3b1f 100644 --- a/ieducar/intranet/educar_exemplar_devolucao_lst.php +++ b/ieducar/intranet/educar_exemplar_devolucao_lst.php @@ -100,6 +100,7 @@ class indice extends clsListagem $lista_busca = array( "Cliente", + "Código exemplar", "Tombo", "Exemplar", "Data Retirada" @@ -120,7 +121,8 @@ class indice extends clsListagem $this->campoTexto("nm_obra","Obra", $this->nm_obra, 30, 255, false, false, false, "", ""); $this->campoOculto("ref_cod_acervo", $this->ref_cod_acervo); - $this->campoNumero("ref_cod_exemplar","Tombo", $this->ref_cod_exemplar, 15, 50); + $this->campoNumero("ref_cod_exemplar","Código exemplar", $this->ref_cod_exemplar, 15, 10); + $this->campoNumero("tombo","Tombo", $this->tombo, 15, 10); if ($this->ref_cod_biblioteca) { @@ -227,6 +229,7 @@ class indice extends clsListagem $lista_busca = array( "{$registro["ref_cod_cliente"]}", "{$registro["ref_cod_exemplar"]}", + "{$det_exemplar["tombo"]}", "{$registro["titulo"]}", "{$registro["data_retirada_br"]}" ); @@ -271,4 +274,4 @@ function pesquisa_obra() pesquisa_valores_popless('educar_pesquisa_obra_lst.php?campo1=ref_cod_acervo&campo2=nm_obra&campo3='+campoBiblioteca) } - \ No newline at end of file + diff --git a/ieducar/intranet/educar_exemplar_tipo_cad.php b/ieducar/intranet/educar_exemplar_tipo_cad.php index c035590..9314072 100644 --- a/ieducar/intranet/educar_exemplar_tipo_cad.php +++ b/ieducar/intranet/educar_exemplar_tipo_cad.php @@ -334,8 +334,11 @@ setVisibility ('tr_div_clientes', false); function getClienteTipo() { var campoBiblioteca = document.getElementById('ref_cod_biblioteca').value; + var exemplarTipoId = document.getElementById('cod_exemplar_tipo').value; + var xml1 = new ajax(getClienteTipo_XML); - strURL = "educar_cliente_tipo_xml.php?bib="+campoBiblioteca; + + strURL = "educar_cliente_tipo_xml.php?bib="+campoBiblioteca+"&exemplar_tipo_id="+exemplarTipoId; xml1.envia(strURL); } @@ -378,7 +381,7 @@ function getClienteTipo_XML(xml) nm_tipo_cliente.setAttribute( 'style', 'margin: 2px;' ); // nm_tipo_cliente.setAttribute( 'value', tipo_cliente[j][1] ); nm_tipo_cliente.setAttribute( 'value', tipo_cliente[j].firstChild.data ); - + dias_tipo_cliente.setAttribute( "id", "tipo_"+tipo_cliente[j].getAttribute("cod_cliente_tipo") ); dias_tipo_cliente.setAttribute( 'type', 'text' ); dias_tipo_cliente.setAttribute( 'size', '3' ); @@ -444,4 +447,4 @@ if(editar_) { padding: 6px; } - \ No newline at end of file + diff --git a/ieducar/intranet/educar_fonte_cad.php b/ieducar/intranet/educar_fonte_cad.php index fa34201..5a5deed 100644 --- a/ieducar/intranet/educar_fonte_cad.php +++ b/ieducar/intranet/educar_fonte_cad.php @@ -99,35 +99,11 @@ class indice extends clsCadastro $this->campoOculto( "cod_fonte", $this->cod_fonte ); // foreign keys -/* $obj_pessoa_bib = new clsPmieducarBibliotecaUsuario(); - $lst_pessoa_bib = $obj_pessoa_bib->lista(null, $this->pessoa_logada); - - $opcoes = array("" => "Selecione"); - if(is_array($lst_pessoa_bib)) - { - foreach ($lst_pessoa_bib as $bib) - { - $obj_biblioteca = new clsPmieducarBiblioteca($bib['ref_cod_biblioteca']); - $det_biblioteca = $obj_biblioteca->detalhe(); - - $opcoes[$det_biblioteca['cod_biblioteca']] = $det_biblioteca['nm_biblioteca']; - } - } - $this->campoLista("ref_cod_biblioteca", "Biblioteca", $opcoes, $this->ref_cod_biblioteca);*/ - - $get_escola = 1; - $escola_obrigatorio = false; - $get_biblioteca = 1; - $instituicao_obrigatorio = true; - $biblioteca_obrigatorio = true; - include("include/pmieducar/educar_campo_lista.php"); + $this->inputsHelper()->dynamic(array('instituicao', 'escola', 'biblioteca')); // text $this->campoTexto( "nm_fonte", "Fonte", $this->nm_fonte, 30, 255, true ); $this->campoMemo( "descricao", "Descrição", $this->descricao, 60, 5, false ); - - // data - } function Novo() @@ -214,4 +190,4 @@ $miolo = new indice(); $pagina->addForm( $miolo ); // gera o html $pagina->MakeAll(); -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/educar_motivo_baixa_cad.php b/ieducar/intranet/educar_motivo_baixa_cad.php index 93f310a..029ee92 100644 --- a/ieducar/intranet/educar_motivo_baixa_cad.php +++ b/ieducar/intranet/educar_motivo_baixa_cad.php @@ -97,28 +97,9 @@ class indice extends clsCadastro // primary keys $this->campoOculto( "cod_motivo_baixa", $this->cod_motivo_baixa ); - /*$obj_pessoa_bib = new clsPmieducarBibliotecaUsuario(); - $lst_pessoa_bib = $obj_pessoa_bib->lista(null, $this->pessoa_logada); + //foreign keys + $this->inputsHelper()->dynamic(array('instituicao', 'escola', 'biblioteca')); - $opcoes = array("" => "Selecione"); - if(is_array($lst_pessoa_bib)) - { - foreach ($lst_pessoa_bib as $bib) - { - $obj_biblioteca = new clsPmieducarBiblioteca($bib['ref_cod_biblioteca']); - $det_biblioteca = $obj_biblioteca->detalhe(); - - $opcoes[$det_biblioteca['cod_biblioteca']] = $det_biblioteca['nm_biblioteca']; - } - } - $this->campoLista("ref_cod_biblioteca", "Biblioteca", $opcoes, $this->ref_cod_biblioteca); -*/ - $get_escola = 1; - $escola_obrigatorio = false; - $get_biblioteca = 1; - $instituicao_obrigatorio = true; - $biblioteca_obrigatorio = true; - include("include/pmieducar/educar_campo_lista.php"); // text $this->campoTexto( "nm_motivo_baixa", "Motivo Baixa", $this->nm_motivo_baixa, 30, 255, true ); $this->campoMemo( "descricao", "Descrição", $this->descricao, 60, 5, false ); @@ -208,4 +189,4 @@ $miolo = new indice(); $pagina->addForm( $miolo ); // gera o html $pagina->MakeAll(); -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/educar_motivo_suspensao_cad.php b/ieducar/intranet/educar_motivo_suspensao_cad.php index 98a8269..a496c4c 100644 --- a/ieducar/intranet/educar_motivo_suspensao_cad.php +++ b/ieducar/intranet/educar_motivo_suspensao_cad.php @@ -95,30 +95,10 @@ class indice extends clsCadastro { // primary keys $this->campoOculto( "cod_motivo_suspensao", $this->cod_motivo_suspensao ); - - /*$obj_pessoa_bib = new clsPmieducarBibliotecaUsuario(); - $lst_pessoa_bib = $obj_pessoa_bib->lista(null, $this->pessoa_logada); - $opcoes = array("" => "Selecione"); - if(is_array($lst_pessoa_bib)) - { - foreach ($lst_pessoa_bib as $bib) - { - $obj_biblioteca = new clsPmieducarBiblioteca($bib['ref_cod_biblioteca']); - $det_biblioteca = $obj_biblioteca->detalhe(); - - $opcoes[$det_biblioteca['cod_biblioteca']] = $det_biblioteca['nm_biblioteca']; - } - } - $this->campoLista("ref_cod_biblioteca", "Biblioteca", $opcoes, $this->ref_cod_biblioteca);*/ - - $get_escola = 1; - $escola_obrigatorio = false; - $get_biblioteca = 1; - $instituicao_obrigatorio = true; - $biblioteca_obrigatorio = true; - include("include/pmieducar/educar_campo_lista.php"); - + //foreign keys + $this->inputsHelper()->dynamic(array('instituicao', 'escola', 'biblioteca')); + // text $this->campoTexto( "nm_motivo", "Motivo Suspensão", $this->nm_motivo, 30, 255, true ); $this->campoMemo( "descricao", "Descrição", $this->descricao, 60, 5, false ); @@ -208,4 +188,4 @@ $miolo = new indice(); $pagina->addForm( $miolo ); // gera o html $pagina->MakeAll(); -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/educar_situacao_cad.php b/ieducar/intranet/educar_situacao_cad.php index f25fc9a..9c045cc 100644 --- a/ieducar/intranet/educar_situacao_cad.php +++ b/ieducar/intranet/educar_situacao_cad.php @@ -216,15 +216,8 @@ class indice extends clsCadastro $obj_permissoes = new clsPermissoes(); $obj_permissoes->permissao_cadastra( 602, $this->pessoa_logada, 11, "educar_situacao_lst.php" ); - if ($this->situacao_padrao == 'on') - $this->situacao_padrao = 1; - else - $this->situacao_padrao = 0; - - if ($this->situacao_emprestada == 'on') - $this->situacao_emprestada = 1; - else - $this->situacao_emprestada = 0; + $this->situacao_padrao = is_null($this->situacao_padrao) ? 0 : 1; + $this->situacao_emprestada = is_null($this->situacao_emprestada) ? 0 : 1; $obj = new clsPmieducarSituacao( null, null, $this->pessoa_logada, $this->nm_situacao, $this->permite_emprestimo, $this->descricao, $this->situacao_padrao, $this->situacao_emprestada, null, null, 1, $this->ref_cod_biblioteca ); $cadastrou = $obj->cadastra(); @@ -250,15 +243,8 @@ class indice extends clsCadastro $obj_permissoes = new clsPermissoes(); $obj_permissoes->permissao_cadastra( 602, $this->pessoa_logada, 11, "educar_situacao_lst.php" ); - if ($this->situacao_padrao == 'on') - $this->situacao_padrao = 1; - else - $this->situacao_padrao = 0; - - if ($this->situacao_emprestada == 'on') - $this->situacao_emprestada = 1; - else - $this->situacao_emprestada = 0; + $this->situacao_padrao = is_null($this->situacao_padrao) ? 0 : 1; + $this->situacao_emprestada = is_null($this->situacao_emprestada) ? 0 : 1; $obj = new clsPmieducarSituacao($this->cod_situacao, $this->pessoa_logada, null, $this->nm_situacao, $this->permite_emprestimo, $this->descricao, $this->situacao_padrao, $this->situacao_emprestada, null, null, 1, $this->ref_cod_biblioteca); $editou = $obj->edita(); @@ -375,4 +361,4 @@ function valida() document.forms[0].submit(); } - \ No newline at end of file + diff --git a/ieducar/intranet/include/pmieducar/clsPmieducarAcervo.inc.php b/ieducar/intranet/include/pmieducar/clsPmieducarAcervo.inc.php index 831d882..051b9ff 100644 --- a/ieducar/intranet/include/pmieducar/clsPmieducarAcervo.inc.php +++ b/ieducar/intranet/include/pmieducar/clsPmieducarAcervo.inc.php @@ -120,13 +120,13 @@ class clsPmieducarAcervo * * @return object */ - function clsPmieducarAcervo( $cod_acervo = null, $ref_cod_exemplar_tipo = null, $ref_cod_acervo = null, $ref_usuario_exc = null, $ref_usuario_cad = null, $ref_cod_acervo_colecao = null, $ref_cod_acervo_idioma = null, $ref_cod_acervo_editora = null, $titulo = null, $sub_titulo = null, $cdu = null, $cutter = null, $volume = null, $num_edicao = null, $ano = null, $num_paginas = null, $isbn = null, $data_cadastro = null, $data_exclusao = null, $ativo = null, $ref_cod_biblioteca = null ) + function clsPmieducarAcervo( $cod_acervo = null, $ref_cod_exemplar_tipo = null, $ref_cod_acervo = null, $ref_usuario_exc = null, $ref_usuario_cad = null, $ref_cod_acervo_colecao = null, $ref_cod_acervo_idioma = null, $ref_cod_acervo_editora = null, $titulo = null, $sub_titulo = null, $cdu = null, $cutter = null, $volume = null, $num_edicao = null, $ano = null, $num_paginas = null, $isbn = null, $data_cadastro = null, $data_exclusao = null, $ativo = null, $ref_cod_biblioteca = null, $cdd = null, $estante = null ) { $db = new clsBanco(); $this->_schema = "pmieducar."; $this->_tabela = "{$this->_schema}acervo"; - $this->_campos_lista = $this->_todos_campos = "a.cod_acervo, a.ref_cod_exemplar_tipo, a.ref_cod_acervo, a.ref_usuario_exc, a.ref_usuario_cad, a.ref_cod_acervo_colecao, a.ref_cod_acervo_idioma, a.ref_cod_acervo_editora, a.titulo, a.sub_titulo, a.cdu, a.cutter, a.volume, a.num_edicao, a.ano, a.num_paginas, a.isbn, a.data_cadastro, a.data_exclusao, a.ativo, a.ref_cod_biblioteca"; + $this->_campos_lista = $this->_todos_campos = "a.cod_acervo, a.ref_cod_exemplar_tipo, a.ref_cod_acervo, a.ref_usuario_exc, a.ref_usuario_cad, a.ref_cod_acervo_colecao, a.ref_cod_acervo_idioma, a.ref_cod_acervo_editora, a.titulo, a.sub_titulo, a.cdu, a.cutter, a.volume, a.num_edicao, a.ano, a.num_paginas, a.isbn, a.data_cadastro, a.data_exclusao, a.ativo, a.ref_cod_biblioteca, a.cdd, a.estante"; if( is_numeric( $ref_cod_biblioteca ) ) { @@ -411,6 +411,8 @@ class clsPmieducarAcervo $this->ativo = $ativo; } + $this->cdd = $cdd; + $this->estante = $estante; } /** @@ -524,6 +526,7 @@ class clsPmieducarAcervo $campos .= "{$gruda}ativo"; $valores .= "{$gruda}'1'"; $gruda = ", "; + if( is_numeric( $this->ref_cod_biblioteca ) ) { $campos .= "{$gruda}ref_cod_biblioteca"; @@ -531,6 +534,19 @@ class clsPmieducarAcervo $gruda = ", "; } + if( is_string( $this->cdd ) ) + { + $campos .= "{$gruda}cdd"; + $valores .= "{$gruda}'{$this->cdd}'"; + $gruda = ", "; + } + + if( is_string( $this->estante ) ) + { + $campos .= "{$gruda}estante"; + $valores .= "{$gruda}'{$this->estante}'"; + $gruda = ", "; + } $db->Consulta( "INSERT INTO {$this->_tabela} ( $campos ) VALUES( $valores )" ); return $db->InsertId( "{$this->_tabela}_cod_acervo_seq"); @@ -649,6 +665,17 @@ class clsPmieducarAcervo $gruda = ", "; } + if( is_string( $this->cdd ) ) + { + $set .= "{$gruda}cdd = '{$this->cdd}'"; + $gruda = ", "; + } + + if( is_string( $this->estante ) ) + { + $set .= "{$gruda}estante = '{$this->estante}'"; + $gruda = ", "; + } if( $set ) { @@ -853,7 +880,7 @@ class clsPmieducarAcervo return false; } - + function listaAcervoBiblioteca($int_ref_cod_biblioteca = null, $str_titulo = null, $ativo = null, $int_ref_cod_acervo_colecao = null, $int_ref_cod_exemplar_tipo = null, $int_ref_cod_acervo_editora = null) { $sql = "SELECT {$this->_campos_lista} FROM {$this->_tabela} a"; @@ -870,7 +897,7 @@ class clsPmieducarAcervo $filtros .= "{$whereAnd} ref_cod_biblioteca = '{$int_ref_cod_biblioteca}'"; $whereAnd = " AND "; } - + if(is_string($str_titulo)) { $filtros .= "{$whereAnd} titulo LIKE '%{$str_titulo}%'"; @@ -896,11 +923,11 @@ class clsPmieducarAcervo $filtros .= "{$whereAnd} ref_cod_acervo_editora = {$int_ref_cod_acervo_editora}"; $whereAnd = " AND "; } - + $sql .= $filtros . $this->getOrderby() . $this->getLimite(); $db = new clsBanco(); $this->_total = $db->CampoUnico( "SELECT COUNT(0) FROM {$this->_tabela} a {$filtros}" ); - + $db->Consulta( $sql ); $countCampos = count( explode( ",", $this->_campos_lista ) ); $resultado = array(); @@ -929,7 +956,7 @@ class clsPmieducarAcervo } return false; } - + /** * Retorna um array com os dados de um registro * @@ -940,7 +967,7 @@ class clsPmieducarAcervo if( is_numeric( $this->cod_acervo ) ) { $db = new clsBanco(); - $db->Consulta( "SELECT {$this->_todos_campos} FROM {$this->_tabela} a WHERE a.cod_acervo = '{$this->cod_acervo}'" ); + $db->Consulta( "SELECT {$this->_todos_campos} FROM {$this->_tabela} a WHERE a.cod_acervo = '{$this->cod_acervo}'" ); $db->ProximoRegistro(); return $db->Tupla(); } @@ -1069,4 +1096,4 @@ class clsPmieducarAcervo } } -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/include/pmieducar/clsPmieducarAcervoEditora.inc.php b/ieducar/intranet/include/pmieducar/clsPmieducarAcervoEditora.inc.php index 9502b66..b47f458 100644 --- a/ieducar/intranet/include/pmieducar/clsPmieducarAcervoEditora.inc.php +++ b/ieducar/intranet/include/pmieducar/clsPmieducarAcervoEditora.inc.php @@ -208,6 +208,7 @@ class clsPmieducarAcervoEditora } } } + if( is_string( $ref_sigla_uf ) ) { if( class_exists( "clsUf" ) ) @@ -298,10 +299,8 @@ class clsPmieducarAcervoEditora * * @return bool */ - function cadastra() - { - if( is_numeric( $this->ref_usuario_cad ) && is_string( $this->ref_idtlog ) && is_string( $this->ref_sigla_uf ) && is_string( $this->nm_editora ) && is_numeric( $this->cep ) && is_string( $this->cidade ) && is_string( $this->bairro ) && is_string( $this->logradouro ) && is_numeric($this->ref_cod_biblioteca) ) - { + function cadastra() { + if(is_numeric($this->ref_usuario_cad ) && is_string( $this->nm_editora ) && is_numeric($this->ref_cod_biblioteca)) { $db = new clsBanco(); $campos = ""; @@ -417,16 +416,25 @@ class clsPmieducarAcervoEditora $set .= "{$gruda}ref_usuario_exc = '{$this->ref_usuario_exc}'"; $gruda = ", "; } - if( is_string( $this->ref_idtlog ) ) - { - $set .= "{$gruda}ref_idtlog = '{$this->ref_idtlog}'"; - $gruda = ", "; - } - if( is_string( $this->ref_sigla_uf ) ) - { - $set .= "{$gruda}ref_sigla_uf = '{$this->ref_sigla_uf}'"; - $gruda = ", "; - } + + if(is_string($this->ref_idtlog )){ + $set .= "{$gruda}ref_idtlog = '{$this->ref_idtlog}'"; + $gruda = ", "; + } + else { + $set .= "{$gruda}ref_idtlog = null"; + $gruda = ", "; + } + + if(is_string($this->ref_sigla_uf)){ + $set .= "{$gruda}ref_sigla_uf = '{$this->ref_sigla_uf}'"; + $gruda = ", "; + } + else { + $set .= "{$gruda}ref_sigla_uf = null"; + $gruda = ", "; + } + if( is_string( $this->nm_editora ) ) { $set .= "{$gruda}nm_editora = '{$this->nm_editora}'"; @@ -790,4 +798,4 @@ class clsPmieducarAcervoEditora } } -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/include/pmieducar/clsPmieducarCliente.inc.php b/ieducar/intranet/include/pmieducar/clsPmieducarCliente.inc.php index cf5a18c..42fe8f4 100644 --- a/ieducar/intranet/include/pmieducar/clsPmieducarCliente.inc.php +++ b/ieducar/intranet/include/pmieducar/clsPmieducarCliente.inc.php @@ -478,6 +478,7 @@ class clsPmieducarCliente $resultado[] = $tupla[$this->_campos_lista]; } } + if( count( $resultado ) ) { return $resultado; @@ -499,99 +500,8 @@ class clsPmieducarCliente $int_cod_cliente_tipo = NULL, $int_cod_escola = NULL, $int_cod_biblioteca = NULL, $int_cod_instituicao = NULL) { - $tab_adicional = ''; - $condicao = ''; - $camp_adicional = ''; - - // Executa filtragem por clientes suspensos somente quando houver registros na tabela - $clienteSuspenso = new clsPmieducarClienteSuspensao(); $db = new clsBanco(); - // Se suspenso não for nulo e existirem cliente suspensos, seleciona-os - // quando ainda estiverem no prazo de suspensão - if ($db->doCountFromObj($clienteSuspenso) > 0) { - if (!is_null($str_suspenso)) { - $camp_adicional .= ', pmieducar.cliente_suspensao cs '; - $condicao .= ' AND c.cod_cliente = cs.ref_cod_cliente AND - (cs.data_suspensao < current_date - cs.dias)'; - } - else { - $camp_adicional .= ', pmieducar.cliente_suspensao cs '; - $condicao .= ' AND (c.cod_cliente <> cs.ref_cod_cliente OR - (cs.data_suspensao > current_date - cs.dias))'; - } - } - - $sql1 = " - SELECT - c.cod_cliente, - c.ref_idpes, - c.ref_usuario_cad, - c.login, - p.nome, - ct.nm_tipo, - ct.cod_cliente_tipo, - b.nm_biblioteca, - b.cod_biblioteca, - e.cod_escola as cod_escola, - i.cod_instituicao, - (SELECT 'S'::text - FROM pmieducar.cliente_suspensao cs - WHERE cs.ref_cod_cliente = c.cod_cliente - AND cs.data_liberacao IS NULL) AS id_suspensao - FROM - pmieducar.cliente c, - pmieducar.cliente_tipo_cliente ctc, - pmieducar.cliente_tipo ct, - pmieducar.biblioteca b, - pmieducar.escola e, - pmieducar.instituicao i, - cadastro.pessoa p{$camp_adicional} - WHERE - c.cod_cliente = ctc.ref_cod_cliente - AND ct.cod_cliente_tipo = ctc.ref_cod_cliente_tipo - AND b.cod_biblioteca = ct.ref_cod_biblioteca - AND e.cod_escola = b.ref_cod_escola - AND i.cod_instituicao = b.ref_cod_instituicao - AND e.ref_cod_instituicao = i.cod_instituicao{$condicao} - AND p.idpes = c.ref_idpes - AND c.ativo = '{$int_ativo}' - AND ctc.ativo = '{$int_ativo}'"; - - $sql2 = " - SELECT - c.cod_cliente, - c.ref_idpes, - c.ref_usuario_cad, - c.login, - p.nome, - ct.nm_tipo, - ct.cod_cliente_tipo, - b.nm_biblioteca, - b.cod_biblioteca, - null as cod_escola, - i.cod_instituicao, - (SELECT 'S'::text - FROM pmieducar.cliente_suspensao cs - WHERE cs.ref_cod_cliente = c.cod_cliente - AND cs.data_liberacao IS NULL) AS id_suspensao - FROM - pmieducar.cliente c, - pmieducar.cliente_tipo_cliente ctc, - pmieducar.cliente_tipo ct, - pmieducar.biblioteca b, - pmieducar.instituicao i, - cadastro.pessoa p{$camp_adicional} - WHERE c.cod_cliente = ctc.ref_cod_cliente - AND ct.cod_cliente_tipo = ctc.ref_cod_cliente_tipo - AND b.cod_biblioteca = ct.ref_cod_biblioteca - AND i.cod_instituicao = b.ref_cod_instituicao - AND b.ref_cod_escola IS NULL - AND ct.ref_cod_biblioteca = b.cod_biblioteca{$condicao} - AND p.idpes = c.ref_idpes - AND c.ativo = '{$int_ativo}' - AND ctc.ativo = '{$int_ativo}'"; - $filtros = ''; $whereAnd = ' AND '; @@ -685,46 +595,65 @@ class clsPmieducarCliente $whereAnd = " AND "; } - if (is_string($str_suspenso)) { - $filtros .= "{$whereAnd} cs.data_liberacao IS NULL"; - $whereAnd = " AND "; + // se S(suspenso) ou R(egular), filtra por tal situacao + if(in_array($str_suspenso, array('S', 'R'))) { + $existencia = $str_suspenso == 'R' ? 'not' : ''; + $condicaoSuspenso = " AND $existencia exists (select 1 from pmieducar.cliente_suspensao where ref_cod_cliente = c.cod_cliente and data_liberacao is null and data_suspensao + (dias||' day')::interval >= now())"; } $db = new clsBanco(); $resultado = array(); - $sql1 .= $filtros; - $sql2 .= $filtros; - - if (is_numeric($int_cod_escola)) { - $this->_total = $db->CampoUnico("SELECT count(0) FROM ({$sql1}) AS SUBQUERY"); - } - else { - $this->_total = $db->CampoUnico("SELECT count(0) FROM (" . $sql1 . " UNION " . $sql2 . ") AS SUBQUERY"); - } - - // Aplica ordenação e limite - $sql2 .= $this->getOrderby() . $this->getLimite(); - - if (is_numeric($int_cod_escola)) { - $sql = $sql1; - } - else { - $sql = $sql1 . ' UNION ' . $sql2; - } + $sql = " + SELECT + c.cod_cliente, + c.ref_idpes, + c.ref_usuario_cad, + c.login, + p.nome, + ct.nm_tipo, + ct.cod_cliente_tipo, + b.nm_biblioteca, + b.cod_biblioteca, + e.cod_escola as cod_escola, + i.cod_instituicao, + (SELECT 'S'::text + FROM pmieducar.cliente_suspensao cs + WHERE cs.ref_cod_cliente = c.cod_cliente + AND cs.data_liberacao IS NULL) AS id_suspensao + FROM + pmieducar.cliente c, + pmieducar.cliente_tipo_cliente ctc, + pmieducar.cliente_tipo ct, + pmieducar.biblioteca b, + pmieducar.escola e, + pmieducar.instituicao i, + cadastro.pessoa p + WHERE + c.cod_cliente = ctc.ref_cod_cliente + AND ct.cod_cliente_tipo = ctc.ref_cod_cliente_tipo + AND b.cod_biblioteca = ct.ref_cod_biblioteca + AND e.cod_escola = b.ref_cod_escola + AND i.cod_instituicao = b.ref_cod_instituicao + AND e.ref_cod_instituicao = i.cod_instituicao{$condicaoSuspenso} + AND p.idpes = c.ref_idpes + AND c.ativo = '{$int_ativo}' + AND ctc.ativo = '{$int_ativo}' + $filtros"; + $sql .= $this->getOrderby() . $this->getLimite(); $db->Consulta($sql); + $this->_total = 0; + while ($db->ProximoRegistro()) { $tupla = $db->Tupla(); - - $tupla["_total"] = $this->_total; $resultado[] = $tupla; + $this->_total += 1; } - if (count($resultado) > 0) { + if (count($resultado) > 0) return $resultado; - } return FALSE; } @@ -1020,4 +949,4 @@ class clsPmieducarCliente return false; } -} \ No newline at end of file +} diff --git a/ieducar/intranet/include/pmieducar/clsPmieducarExemplar.inc.php b/ieducar/intranet/include/pmieducar/clsPmieducarExemplar.inc.php index 64f5c1a..519985e 100644 --- a/ieducar/intranet/include/pmieducar/clsPmieducarExemplar.inc.php +++ b/ieducar/intranet/include/pmieducar/clsPmieducarExemplar.inc.php @@ -480,6 +480,11 @@ class clsPmieducarExemplar $gruda = ", "; } + if(is_numeric($this->tombo)) + { + $set .= "{$gruda}tombo = '{$this->tombo}'"; + $gruda = ", "; + } if( $set ) { @@ -673,18 +678,28 @@ class clsPmieducarExemplar } return false; } - - function retorna_tombo_maximo() { - $sql = "SELECT MAX(tombo) as tombo_max FROM pmieducar.exemplar WHERE ativo = 1"; + + function retorna_tombo_maximo($bibliotecaId, $exceptExemplarId = null) { + if (empty($bibliotecaId)) + throw new Exception("Deve ser enviado um argumento '\$bibliotecaId' ao método 'retorna_tombo_maximo'"); + + // sem esta regra ao editar o ultimo exemplar sem informar o tombo, seria pego o proprio tombo. + if (! empty($exceptExemplarId)) + $exceptExemplar = " and exemplar.cod_exemplar != $exceptExemplarId"; + else + $exceptExemplar = ''; + + $sql = "SELECT MAX(tombo) as tombo_max FROM pmieducar.exemplar, pmieducar.acervo WHERE exemplar.ativo = 1 and exemplar.ref_cod_acervo = acervo.cod_acervo and acervo.ref_cod_biblioteca = $bibliotecaId $exceptExemplar"; + $db = new clsBanco(); return $db->CampoUnico($sql); } - + /** * Retorna uma lista filtrados de acordo com os parametros * * @return array - */ + */ function lista_com_acervos( $int_cod_exemplar = null, $int_ref_cod_fonte = null, $int_ref_cod_motivo_baixa = null, $int_ref_cod_acervo = null, $int_ref_cod_situacao = null, $int_ref_usuario_exc = null, $int_ref_usuario_cad = null, $int_permite_emprestimo = null, $int_preco = null, $date_data_cadastro_ini = null, $date_data_cadastro_fim = null, $date_data_exclusao_ini = null, $date_data_exclusao_fim = null, $int_ativo = null, $date_data_aquisicao_ini = null, $date_data_aquisicao_fim = null, $int_ref_exemplar_tipo = null, $str_titulo_livro = null,$int_ref_cod_biblioteca = null, $str_titulo = null, $int_ref_cod_instituicao = null, $int_ref_cod_escola = null, $int_ref_cod_acervo_colecao = null, $int_ref_cod_acervo_editora = null) { $sql = "SELECT {$this->_campos_lista}, a.ref_cod_biblioteca, a.titulo FROM {$this->_tabela} e, {$this->_schema}acervo a, {$this->_schema}biblioteca b"; @@ -1009,4 +1024,4 @@ class clsPmieducarExemplar } } -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/include/pmieducar/clsPmieducarMotivoSuspensao.inc.php b/ieducar/intranet/include/pmieducar/clsPmieducarMotivoSuspensao.inc.php index 87747f8..2163615 100644 --- a/ieducar/intranet/include/pmieducar/clsPmieducarMotivoSuspensao.inc.php +++ b/ieducar/intranet/include/pmieducar/clsPmieducarMotivoSuspensao.inc.php @@ -433,16 +433,15 @@ class clsPmieducarMotivoSuspensao } return false; } - + function listaClienteBiblioteca($int_cod_cliente) { if(is_numeric($int_cod_cliente)) { $db = new clsBanco(); $db->Consulta(" - SELECT - cod_motivo_suspensao - , nm_motivo + SELECT + cod_motivo_suspensao, nm_motivo, descricao FROM pmieducar.motivo_suspensao WHERE @@ -605,4 +604,4 @@ class clsPmieducarMotivoSuspensao } } -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/include/pmieducar/clsPmieducarReservas.inc.php b/ieducar/intranet/include/pmieducar/clsPmieducarReservas.inc.php index ddf3233..635885d 100644 --- a/ieducar/intranet/include/pmieducar/clsPmieducarReservas.inc.php +++ b/ieducar/intranet/include/pmieducar/clsPmieducarReservas.inc.php @@ -390,7 +390,7 @@ class clsPmieducarReservas * * @return array */ - function lista( $int_cod_reserva = null, $int_ref_usuario_libera = null, $int_ref_usuario_cad = null, $int_ref_cod_cliente = null, $date_data_reserva_ini = null, $date_data_reserva_fim = null, $date_data_prevista_disponivel_ini = null, $date_data_prevista_disponivel_fim = null, $date_data_retirada_ini = null, $date_data_retirada_fim = null, $int_ref_cod_exemplar = null, $int_ativo = null, $int_ref_cod_biblioteca = null, $int_ref_cod_instituicao = null, $int_ref_cod_escola = null ) + function lista( $int_cod_reserva = null, $int_ref_usuario_libera = null, $int_ref_usuario_cad = null, $int_ref_cod_cliente = null, $date_data_reserva_ini = null, $date_data_reserva_fim = null, $date_data_prevista_disponivel_ini = null, $date_data_prevista_disponivel_fim = null, $date_data_retirada_ini = null, $date_data_retirada_fim = null, $int_ref_cod_exemplar = null, $int_ativo = null, $int_ref_cod_biblioteca = null, $int_ref_cod_instituicao = null, $int_ref_cod_escola = null, $data_retirada_null = false ) { $sql = "SELECT {$this->_campos_lista}, a.ref_cod_biblioteca, b.ref_cod_instituicao, b.ref_cod_escola FROM {$this->_tabela} r, {$this->_schema}exemplar e, {$this->_schema}acervo a, {$this->_schema}biblioteca b"; @@ -478,6 +478,11 @@ class clsPmieducarReservas $whereAnd = " AND "; } + if($data_retirada_null) + { + $filtros .= "{$whereAnd} r.data_retirada is null"; + $whereAnd = " AND "; + } $db = new clsBanco(); $countCampos = count( explode( ",", $this->_campos_lista ) ); @@ -713,4 +718,4 @@ class clsPmieducarReservas return false; } } -?> \ No newline at end of file +?> diff --git a/ieducar/modules/Biblioteca/Assets/Javascripts/Emprestimo.js b/ieducar/modules/Biblioteca/Assets/Javascripts/Emprestimo.js new file mode 100644 index 0000000..dd704c1 --- /dev/null +++ b/ieducar/modules/Biblioteca/Assets/Javascripts/Emprestimo.js @@ -0,0 +1,208 @@ +var PAGE_URL_BASE = 'emprestimo'; +var API_URL_BASE = 'emprestimoApi'; +var RESOURCE_NAME = 'exemplar'; +var RESOURCES_NAME = 'exemplares'; +var POST_LABEL = 'Emprestar'; +var DELETE_LABEL = 'Devolver'; +var SEARCH_ORIENTATION = ''; + +var onClickSelectAllEvent = false; +var onClickDeleteEvent = false; + +var onClickActionEvent = function(event){ + var $this = $j(this) + var $firstChecked = getFirstCheckboxChecked($this); + + if ($firstChecked){ + $j('.disable-on-apply-changes').attr('disabled', 'disabled'); + $this.val('Aguarde emprestando exemplar...'); + postEmprestimo($firstChecked); + } +}; + +var postDevolucao = function ($resourceCheckbox) { + var options = { + url : postResourceUrlBuilder.buildUrl(API_URL_BASE, 'devolucao'), + dataType : 'json', + data : { + instituicao_id : $j('#instituicao_id').val(), + escola_id : $j('#escola_id').val(), + biblioteca_id : $j('#biblioteca_id').val(), + cliente_id : $j('#cliente_id').val(), + exemplar_id : $resourceCheckbox.data('exemplar_id'), + tombo_exemplar : $j('#tombo_exemplar').val() + }, + + success : function(dataResponse){ + afterChangeResource($resourceCheckbox); + handlePost(dataResponse); + } + }; + + beforeChangeResource($resourceCheckbox); + postResource(options); +}; + +var postEmprestimo = function ($resourceCheckbox) { + var options = { + url : postResourceUrlBuilder.buildUrl(API_URL_BASE, 'emprestimo'), + dataType : 'json', + data : { + instituicao_id : $j('#instituicao_id').val(), + escola_id : $j('#escola_id').val(), + biblioteca_id : $j('#biblioteca_id').val(), + cliente_id : $j('#cliente_id').val(), + exemplar_id : $resourceCheckbox.data('exemplar_id'), + tombo_exemplar : $j('#tombo_exemplar').val() + }, + + success : function(dataResponse){ + afterChangeResource($resourceCheckbox); + handlePost(dataResponse); + } + }; + + beforeChangeResource($resourceCheckbox); + postResource(options); +}; + +var handlePost = function(dataResponse){ + if (dataResponse.exemplar) + var $targetElement = $j('#exemplar-' + dataResponse.exemplar.id).closest('tr').first(); + else + var $targetElement = undefined; + + handleMessages(dataResponse.msgs, $targetElement); + updateResourceRow(dataResponse.exemplar); +}; + + +function setTableSearchDetails($tableSearchDetails, dataDetails){ + $j('').html('Emprestimo exemplares').appendTo($tableSearchDetails); + + //set headers table + var $linha = $j(''); + $j('').html('Cliente').appendTo($linha); + $j('').html('Obra').appendTo($linha); + $j('').html('Tombo exemplar').appendTo($linha); + $j('').html('Biblioteca').appendTo($linha); + + $linha.appendTo($tableSearchDetails); + + var $linha = $j('').addClass('even'); + + $j('').html($j('#nome_cliente').val()).appendTo($linha); + $j('').html('').attr('id', 'titulo_obra').appendTo($linha); + $j('').html($j('#tombo_exemplar').val()).appendTo($linha); + + var $htmlBibliotecaField = $j('#biblioteca_id').children("[selected='selected']").html() || + $j('#tr_biblioteca_nome span:last').html(); + + $j('').html(safeToUpperCase($htmlBibliotecaField)).appendTo($linha); + + $linha.appendTo($tableSearchDetails); + $tableSearchDetails.show(); + + $tableSearchDetails.data('details', dataDetails); +} + + +function handleSearch($resultTable, dataResponse) { + var $linha = $j(''); + $j('').html('Selecionar').addClass('center').appendTo($linha); + $j('').html('Id').addClass('center').appendTo($linha); + $j('').html('Situação').addClass('center').appendTo($linha); + $j('').html('Cliente').appendTo($linha); + $j('').html('Data emprestimo').addClass('center').appendTo($linha); + $j('').html('Data prevista devolução').addClass('center').appendTo($linha); + //$j('').html('Ação').addClass('center').appendTo($linha); + $linha.appendTo($resultTable); + + var setTituloObra = true; + + //set rows + $j.each(dataResponse[RESOURCES_NAME], function(index, value){ + + if(setTituloObra) + $j('#titulo_obra').html(value.acervo.titulo); + + var $checkbox = $j('') + .attr('type', 'checkbox') + .attr('name', 'exemplar') + .attr('value', 'sim') + .attr('id', 'exemplar-' + value.id) + .attr('class', 'exemplar disable-on-apply-changes') + .data('exemplar_id', value.id); + + var situacoesEmprestimoPermitida = ['disponivel', 'emprestado', 'reservado', 'emprestado_e_reservado']; + + if ($j.inArray(value.situacao.flag, situacoesEmprestimoPermitida) < 0) + $checkbox.attr('disabled', 'disabled').removeClass('disable-on-apply-changes'); + + var $linha = $j(''); + $j('').html($checkbox).addClass('center').appendTo($linha); + $j('').html(value.id).addClass('center').appendTo($linha); + + var $colSituacoes = $j('').attr('id', 'situacoes-' + value.id).addClass('situacoes center'); + var $colClientes = $j('').attr('id', 'clientes-' + value.id); + var $colDatas = $j('').attr('id', 'datas-' + value.id).addClass('center'); + var $colDatasPrevistaDisponivel = $j('').attr('id', 'datas-prevista-disponivel-' + value.id).addClass('center'); + //var $colAcoes = $j('').attr('id', 'acoes-' + value.id).addClass('center'); + + $colSituacoes.appendTo($linha); + $colClientes.appendTo($linha); + $colDatas.appendTo($linha); + $colDatasPrevistaDisponivel.appendTo($linha); + //$colAcoes.appendTo($linha); + + $linha.appendTo($resultTable); + updateResourceRow(value); + });// each + + $resultTable.find('tr:even').addClass('even'); + $resultTable.addClass('styled').find('checkbox:first').focus(); + + var $checkboxes = $resultTable.find("input[type='checkbox']"); + $checkboxes.change(function(){ + $checkboxes.not(this).removeAttr('checked'); + }); +} + + +function updateResourceRow(exemplar){ + var $colSituacoes = $j('#situacoes-' + exemplar.id).html(''); + var $colClientes = $j('#clientes-' + exemplar.id).html(''); + var $colDatas = $j('#datas-' + exemplar.id).html(''); + var $colDatasPrevistaDisponivel = $j('#datas-prevista-disponivel-' + exemplar.id).html(''); + var $colAcoes = $j('#acoes-' + exemplar.id).html(''); + + if ($j.isArray(exemplar.pendencias)) { + $j.each(exemplar.pendencias, function(index, value){ + $j('

').html(value.situacao.label || '-').appendTo($colSituacoes); + $j('

').html(value.nome_cliente || '-').appendTo($colClientes); + $j('

').html(value.data || '-').appendTo($colDatas); + $j('

').html(value.data_prevista_disponivel || '-').appendTo($colDatasPrevistaDisponivel); + + if (value.situacao.flag == 'emprestimodo' && value.cliente && value.cliente.id == $j('#cliente_id').val()) { + var $linkToDelete = $j("Cancelar emprestimo").click(onClickCancelEvent).data('exemplar_id', exemplar.id).data('emprestimo_id', value.emprestimo_id); + $j('

').html($linkToDelete).appendTo($colAcoes); + } + else + $j('

').html('-').appendTo($colAcoes); + }); + + if (exemplar.pendencias.length < 1) + $j('

').html(exemplar.situacao.label || '-').appendTo($colSituacoes); + } + + $colSituacoes.data('situacao', exemplar.situacao_exemplar); +} + +function canSearch() { + if ($j('#nome_cliente').val() == '') { + alert('Selecione um cliente para continuar.'); + return false; + } + + return true; +} \ No newline at end of file diff --git a/ieducar/modules/Biblioteca/Assets/Javascripts/Reserva.js b/ieducar/modules/Biblioteca/Assets/Javascripts/Reserva.js new file mode 100644 index 0000000..a246841 --- /dev/null +++ b/ieducar/modules/Biblioteca/Assets/Javascripts/Reserva.js @@ -0,0 +1,221 @@ +var PAGE_URL_BASE = 'reserva'; +var API_URL_BASE = 'reservaApi'; +var RESOURCE_NAME = 'exemplar'; +var RESOURCES_NAME = 'exemplares'; +var POST_LABEL = 'Reservar'; +var DELETE_LABEL = 'Cancelar'; +var SEARCH_ORIENTATION = ''; + +var onClickSelectAllEvent = false; +var onClickDeleteEvent = false; + +var onClickActionEvent = function(event){ + var $this = $j(this); + var $firstChecked = $j('input.exemplar:checked:first'); + + if ($firstChecked.length < 1) + handleMessages([{type : 'error', msg : 'Selecione algum exemplar.'}], $this, true); + else{ + $j('.disable-on-apply-changes').attr('disabled', 'disabled'); + $this.val('Aguarde reservando...'); + postReserva($firstChecked); + } +}; + +var postReserva = function ($resourceCheckbox) { + var options = { + url : postResourceUrlBuilder.buildUrl(API_URL_BASE, 'reserva'), + dataType : 'json', + data : { + ref_cod_instituicao : $j('#ref_cod_instituicao').val(), + ref_cod_escola : $j('#ref_cod_escola').val(), + ref_cod_biblioteca : $j('#ref_cod_biblioteca').val(), + ref_cod_cliente : $j('#ref_cod_cliente').val(), + ref_cod_acervo : $j('#ref_cod_acervo').val(), + exemplar_id : $resourceCheckbox.data('exemplar_id') + }, + + success : function(dataResponse){ + afterChangeResource($resourceCheckbox); + handlePost(dataResponse); + } + }; + + beforeChangeResource($resourceCheckbox); + postResource(options); +}; + +var handlePost = function(dataResponse){ + var $targetElement = $j('#exemplar-'+dataResponse.id).closest('tr').first(); + handleMessages(dataResponse.msgs, $targetElement); + updateResourceRow(dataResponse); +}; + +var onClickCancelEvent = function(event) { + if (confirm("Confirma cancelamento da reserva?")) { + var $this = $j(this); + + //var $checkbox = $this.closest('tr').find("input[type='checkbox']").first(); + deleteReserva($this); + } +} + +var deleteReserva = function($deleteLink) { + var options = { + url : deleteResourceUrlBuilder.buildUrl(API_URL_BASE, 'reserva', { + ref_cod_instituicao : $j('#ref_cod_instituicao').val(), + ref_cod_escola : $j('#ref_cod_escola').val(), + ref_cod_biblioteca : $j('#ref_cod_biblioteca').val(), + ref_cod_cliente : $j('#ref_cod_cliente').val(), + ref_cod_acervo : $j('#ref_cod_acervo').val(), + exemplar_id : $deleteLink.data('exemplar_id'), + reserva_id : $deleteLink.data('reserva_id') + }), + dataType : 'json', + data : { + }, + success : function(dataResponse){ + afterChangeResource($deleteLink); + handleDeleteReserva(dataResponse); + } + }; + + beforeChangeResource($deleteLink); + deleteResource(options); +} + +var handleDeleteReserva = function(dataResponse) { + safeLog(dataResponse); + + //try{ + var $targetElement = $j('#exemplar-' + dataResponse.id).closest('tr').first(); + handleMessages(dataResponse.msgs, $targetElement); + updateResourceRow(dataResponse); + //} + //catch(error){ + //showNewSearchButton(); + //handleMessages([{type : 'error', msg : 'Ocorreu um erro ao remover o recurso, por favor tente novamente, detalhes: ' + error}], ''); + + //safeLog(dataResponse); + //} +} + +function setTableSearchDetails($tableSearchDetails, dataDetails){ + $j('').html('Reserva exemplares').appendTo($tableSearchDetails); + + //set headers table + var $linha = $j(''); + $j('').html('Cliente').appendTo($linha); + $j('').html('Obra').appendTo($linha); + $j('').html('Biblioteca').appendTo($linha); + $j('').html('Escola').appendTo($linha); + + $linha.appendTo($tableSearchDetails); + + var $linha = $j('').addClass('even'); + + $j('').html($j('#nome_cliente').val()).appendTo($linha); + $j('').html($j('#titulo_obra').val()).appendTo($linha); + + //field biblioteca pode ser diferente de select caso usuario comum + var $htmlBibliotecaField = $j('#ref_cod_biblioteca').children("[selected='selected']").html() || + $j('#tr_nm_biblioteca span:last').html(); + $j('').html(safeToUpperCase($htmlBibliotecaField)).appendTo($linha); + + //field escola pode ser diferente de select caso usuario comum + var $htmlEscolaField = $j('#ref_cod_escola').children("[selected='selected']").html() || + $j('#tr_nm_escola span:last').html(); + $j('').html(safeToUpperCase($htmlEscolaField)).appendTo($linha); + + $linha.appendTo($tableSearchDetails); + $tableSearchDetails.show(); + + $tableSearchDetails.data('details', dataDetails); +} + + +function handleSearch($resultTable, dataResponse) { + var $linha = $j(''); + $j('').html('Selecionar').addClass('center').appendTo($linha); + $j('').html('Id').addClass('center').appendTo($linha); + $j('').html('Situação').addClass('center').appendTo($linha); + $j('').html('Cliente').appendTo($linha); + $j('').html('Data').addClass('center').appendTo($linha); + $j('').html('Data prevista disponível').addClass('center').appendTo($linha); + $j('').html('Ação').addClass('center').appendTo($linha); + $linha.appendTo($resultTable); + + //set rows + $j.each(dataResponse[RESOURCES_NAME], function(index, value){ + + var $checkbox = $j('') + .attr('type', 'checkbox') + .attr('name', 'reservar-exempar') + .attr('value', 'sim') + .attr('id', 'exemplar-' + value.id) + .attr('class', 'exemplar disable-on-apply-changes') + .data('exemplar_id', value.id); + + var situacoesReservaPermitida = ['disponivel', 'emprestado', 'reservado', 'emprestado_e_reservado']; + + if ($j.inArray(value.situacao.flag, situacoesReservaPermitida) < 0) + $checkbox.attr('disabled', 'disabled').removeClass('disable-on-apply-changes'); + + var $linha = $j(''); + $j('').html($checkbox).addClass('center').appendTo($linha); + $j('').html(value.id).addClass('center').appendTo($linha); + + var $colSituacoes = $j('').attr('id', 'situacoes-' + value.id).addClass('situacoes center'); + var $colClientes = $j('').attr('id', 'clientes-' + value.id); + var $colDatas = $j('').attr('id', 'datas-' + value.id).addClass('center'); + var $colDatasPrevistaDisponivel = $j('').attr('id', 'datas-prevista-disponivel-' + value.id).addClass('center'); + var $colAcoes = $j('').attr('id', 'acoes-' + value.id).addClass('center'); + + $colSituacoes.appendTo($linha); + $colClientes.appendTo($linha); + $colDatas.appendTo($linha); + $colDatasPrevistaDisponivel.appendTo($linha); + $colAcoes.appendTo($linha); + + $linha.appendTo($resultTable); + updateResourceRow(value); + });// each + + $resultTable.find('tr:even').addClass('even'); + $resultTable.addClass('styled').find('checkbox:first').focus(); + + var $checkboxes = $resultTable.find("input[type='checkbox']"); + $checkboxes.change(function(){ + $checkboxes.not(this).removeAttr('checked'); + }); +} + + +function updateResourceRow(exemplar){ + var $colSituacoes = $j('#situacoes-' + exemplar.id).html(''); + var $colClientes = $j('#clientes-' + exemplar.id).html(''); + var $colDatas = $j('#datas-' + exemplar.id).html(''); + var $colDatasPrevistaDisponivel = $j('#datas-prevista-disponivel-' + exemplar.id).html(''); + var $colAcoes = $j('#acoes-' + exemplar.id).html(''); + + if ($j.isArray(exemplar.pendencias)) { + $j.each(exemplar.pendencias, function(index, value){ + $j('

').html(value.situacao.label || '-').appendTo($colSituacoes); + $j('

').html(value.nome_cliente || '-').appendTo($colClientes); + $j('

').html(value.data || '-').appendTo($colDatas); + $j('

').html(value.data_prevista_disponivel || '-').appendTo($colDatasPrevistaDisponivel); + + if (value.situacao.flag == 'reservado' && value.cliente && value.cliente.id == $j('#ref_cod_cliente').val()) { + var $linkToDelete = $j("Cancelar reserva").click(onClickCancelEvent).data('exemplar_id', exemplar.id).data('reserva_id', value.reserva_id); + $j('

').html($linkToDelete).appendTo($colAcoes); + } + else + $j('

').html('-').appendTo($colAcoes); + }); + + if (exemplar.pendencias.length < 1) + $j('

').html(exemplar.situacao.label || '-').appendTo($colSituacoes); + } + + $colSituacoes.data('situacao', exemplar.situacao_exemplar); +} diff --git a/ieducar/modules/Biblioteca/Model/TipoExemplar.php b/ieducar/modules/Biblioteca/Model/TipoExemplar.php new file mode 100644 index 0000000..2e31a2e --- /dev/null +++ b/ieducar/modules/Biblioteca/Model/TipoExemplar.php @@ -0,0 +1,96 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÃFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package ComponenteCurricular + * @subpackage Modules + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'CoreExt/Entity.php'; +require_once 'App/Model/IedFinder.php'; +require_once 'CoreExt/Validate/Email.php'; + +/** + * ComponenteCurricular_Model_Componente class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package ComponenteCurricular + * @subpackage Modules + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Biblioteca_Model_TipoExemplar extends CoreExt_Entity +{ + protected $_data = array( + 'cod_exemplar_tipo' => NULL, + 'ref_cod_biblioteca' => NULL, + 'ref_usuario_exc' => NULL, + 'ref_usuario_cad' => NULL, + 'nm_tipo' => NULL, + 'descricao' => NULL, + 'data_cadastro' => NULL, + 'data_exclusao' => NULL, + 'ativo' => NULL + ); + + + protected $_dataTypes = array( + 'nm_tipo' => 'string' + ); + + + protected $_references = array( + ); + + + public function getDataMapper() + { + if (is_null($this->_dataMapper)) { + require_once 'Biblioteca/Model/TipoExemplarDataMapper.php'; + $this->setDataMapper(new Biblioteca_Model_TipoExemplarDataMapper()); + } + return parent::getDataMapper(); + } + + + public function getDefaultValidatorCollection() + { + return array(); + } + + + protected function _createIdentityField() + { + $id = array('cod_exemplar_tipo' => NULL); + $this->_data = array_merge($id, $this->_data); + return $this; + } +} diff --git a/ieducar/modules/Biblioteca/Model/TipoExemplarDataMapper.php b/ieducar/modules/Biblioteca/Model/TipoExemplarDataMapper.php new file mode 100644 index 0000000..0352082 --- /dev/null +++ b/ieducar/modules/Biblioteca/Model/TipoExemplarDataMapper.php @@ -0,0 +1,79 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÃFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Usuario + * @subpackage Modules + * @since Arquivo disponível desde a versão 1.1.0 + * @version $Id$ + */ + +require_once 'CoreExt/DataMapper.php'; +require_once 'Biblioteca/Model/TipoExemplar.php'; + +/** + * Usuario_Model_TipoExemplarDataMapper class. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Usuario + * @subpackage Modules + * @since Classe disponível desde a versão 1.1.0 + * @version @@package_version@@ + */ +class Biblioteca_Model_TipoExemplarDataMapper extends CoreExt_DataMapper +{ + protected $_entityClass = 'Biblioteca_Model_TipoExemplar'; + protected $_tableName = 'exemplar_tipo'; + protected $_tableSchema = 'pmieducar'; + + + protected $_attributeMap = array( + 'cod_exemplar_tipo' => 'cod_exemplar_tipo', + 'ref_cod_biblioteca' => 'ref_cod_biblioteca', + 'ref_usuario_exc' => 'ref_usuario_exc', + 'ref_usuario_cad' => 'ref_usuario_cad', + 'nm_tipo' => 'nm_tipo', + 'descricao' => 'descricao', + 'data_cadastro' => 'data_cadastro', + 'data_exclusao' => 'data_exclusao', + 'ativo' => 'ativo' + ); + + + protected $_notPersistable = array(); + + + protected $_primaryKey = array('cod_exemplar_tipo'); + + + protected function _getFindStatment($pkey) + { + if (!is_array($pkey)) + $pkey = array("cod_exemplar_tipo" => $pkey); + + return parent::_getFindStatment($pkey); + } +} diff --git a/ieducar/modules/Biblioteca/Views/EmprestimoApiController.php b/ieducar/modules/Biblioteca/Views/EmprestimoApiController.php new file mode 100644 index 0000000..024f487 --- /dev/null +++ b/ieducar/modules/Biblioteca/Views/EmprestimoApiController.php @@ -0,0 +1,640 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÃFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Biblioteca + * @subpackage Modules + * @since Arquivo disponível desde a versão ? + * @version $Id$ + */ + +require_once 'lib/Portabilis/Controller/ApiCoreController.php'; +require_once 'include/pmieducar/clsPmieducarExemplar.inc.php'; +require_once 'lib/Portabilis/Array/Utils.php'; + +class EmprestimoApiController extends ApiCoreController +{ + protected $_nivelAcessoOption = App_Model_NivelAcesso::SOMENTE_BIBLIOTECA; + + // validadores regras negócio + + protected function validatesExistenceOfExemplar() { + $valid = true; + + $exemplares = $this->loadExemplar($reload = true); + + if (! is_array($exemplares) || count($exemplares) < 1) { + $id = $this->getRequest()->exemplar_id; + $tombo = $this->getRequest()->tombo_exemplar; + + $this->messenger->append("Aparentemente não existe um exemplar com id $id e/ou tombo $tombo, para a biblioteca informada."); + $valid = false; + } + + return $valid; + } + + + protected function validatesExistenceOfCliente() { + $valid = true; + + if (! $this->loadCliente()) { + $this->messenger->append("Não existe um cliente com id '{$this->getRequest()->cliente_id}'."); + $valid = false; + } + + return $valid; + } + + + protected function validatesClienteIsNotSuspenso() { + $cliente = $this->loadCliente(); + + if($cliente['suspenso']) { + $this->messenger->append("Operação não pode ser realizada, pois o cliente esta suspenso.", 'error'); + return false; + } + + return true; + } + + + protected function validatesSituacaoExemplarIsIn($expectedSituacoes) { + if (! is_array($expectedSituacoes)) + $expectedSituacoes = array($expectedSituacoes); + + $situacao = $this->getSituacaoExemplar(); + $situacao = $situacao['flag']; + $msg = "Operação não realizada, pois a situação atual do exemplar é $situacao quando deveria ser " . implode(' ou ', $expectedSituacoes) . "."; + + return $this->validator->validatesValueInSetOf($situacao, $expectedSituacoes, 'situação', false, $msg); + } + + + protected function canAcceptRequest() { + return parent::canAcceptRequest() + + && $this->validatesPresenceOf(array('instituicao_id', + 'escola_id', + 'biblioteca_id', + 'cliente_id', + 'tombo_exemplar')) + + && $this->validatesIsNumeric('tombo_exemplar') + && $this->validatesExistenceOfExemplar() + && $this->validatesExistenceOfCliente(); + } + + + protected function canPostEmprestimo() { + return $this->validatesPresenceOf(array('exemplar_id')) + && $this->validatesExistenceOfExemplar() + && $this->validatesClienteIsNotSuspenso() + && $this->validatesSituacaoExemplarIsIn('disponivel'); + + /* + #TODO validar: + qtd emprestimos em aberto do cliente <= limite biblioteca + valor R$ multas em aberto do cliente <= limite biblioteca + + não existe outro exemplar mesma obra emprestado para cliente + validates situacao exemplar is disponivel or is reservado cliente + */ + } + + + protected function canPostDevolucao() { + return $this->validatesPresenceOf(array('exemplar_id')) + && $this->validatesExistenceOfExemplar() + && $this->validatesSituacaoExemplarIsIn(array('emprestado', 'emprestado_e_reservado')); + } + + + /* metódos auxiliares resposta operação / recurso + metódos iniciados com load consultam informação no banco de dados + metódos iniciados com get consultam informação em objetos + */ + + protected function loadCliente($id = null) { + if (! $id) + $id = $this->getRequest()->cliente_id; + + // load cliente + $cliente = new clsPmieducarCliente($id); + $cliente = $cliente->detalhe(); + + if ($cliente) { + $cliente = Portabilis_Array_Utils::filter($cliente, array('cod_cliente' => 'id', + 'ref_idpes' => 'pessoa_id')); + + // load pessoa + $pessoa = new clsPessoa_($cliente['pessoa_id']); + $pessoa = $pessoa->detalhe(); + $cliente['nome'] = $this->toUtf8($pessoa["nome"]); + + // load suspensao + $sql = "select 1 from pmieducar.cliente_suspensao where ref_cod_cliente = $1 and data_liberacao is null and data_suspensao + (dias||' day')::interval >= now()"; + $suspenso = $this->fetchPreparedQuery($sql, $params = array($id), true, 'first-field'); + + $cliente['suspenso'] = $suspenso == '1'; + } + + return $cliente; + } + + + protected function loadQtdDiasEmprestimoForExemplar($exemplar = null) { + $acervo = $this->loadAcervo($exemplar['acervo']['id']); + $exemplarTipoId = $acervo['exemplar_tipo_id']; + + // obtem id tipo de cliente + $clienteTipoCliente = new clsPmieducarClienteTipoCliente(); + $clienteTipoCliente = $clienteTipoCliente->lista(null, + $this->getRequest()->cliente_id, + null, + null, + null, + null, + null, + null, + $this->getRequest()->biblioteca_id); + + $clienteTipoId = $clienteTipoCliente[0]['ref_cod_cliente_tipo']; + + // obtem quantidade dias emprestimo + $clienteTipoExemplarTipo = new clsPmieducarClienteTipoExemplarTipo($clienteTipoId, $exemplarTipoId); + $clienteTipoExemplarTipo = $clienteTipoExemplarTipo->detalhe(); + + if (! $clienteTipoExemplarTipo || ! is_numeric($clienteTipoExemplarTipo["dias_emprestimo"])) + throw new CoreExt_Exception("Aparentemente não foi definido a quantidade de dias de emprestimo para o tipo de cliente '$clienteTipoId' e tipo de exemplar '$exemplarTipoId'."); + + return $clienteTipoExemplarTipo["dias_emprestimo"]; + } + + + protected function getDataPrevistaDisponivelForExemplar($exemplar, $dataInicio, $format = 'd/m/Y') { + $qtdDiasEmprestimo = $this->loadQtdDiasEmprestimoForExemplar($exemplar); + + // reformada data dd/mm/aaaa => mm/dd/aaaa + $_format = explode('/', $format); + + if (count($_format) > 0 && $_format[0] == 'd') { + list($diaInicio, $mesInicio, $anoInicio) = explode("/", $dataInicio); + $dataInicio = "$mesInicio/$diaInicio/$anoInicio"; + } + + + // #TODO se data cair em feriado ou dia de não trabalho somar +1 dia ? + // soma dias emprestimo + $date = date($format, strtotime("+$qtdDiasEmprestimo days", strtotime($dataInicio))); + + return $date; + } + + + protected function loadReservasForExemplar($exemplar, $clienteId = null, $reload = false) { + if ($reload || ! isset($this->_reservas)) { + $reservas = new clsPmieducarReservas(); + $reservas = $reservas->lista(null, + null, + null, + $clienteId, + null, + null, + null, + null, + null, + null, + $exemplar['cod_exemplar'], + 1, + $this->getRequest()->biblioteca_id, + $this->getRequest()->instituicao_id, + $this->getRequest()->escola_id, + $data_retirada_null = true); + + if($reservas) { + $reservas = Portabilis_Array_Utils::filterSet($reservas, array('cod_reserva' => 'id', + 'data_reserva' => 'data', + 'ref_cod_cliente' => 'cliente_id', + 'data_prevista_disponivel')); + + // adicionada informaçoes adicionais a cada reserva + foreach($reservas as $index => $reserva) { + $cliente = $this->loadCliente($reserva["cliente_id"]); + + $reserva['cliente'] = $cliente; + $reserva['nome_cliente'] = $cliente['id'] . ' - ' . $cliente['nome']; + $reserva['data'] = date('d/m/Y', strtotime($reserva['data'])); + $reserva['situacao'] = $this->getSituacaoForFlag('reservado'); + + /* para o cliente da reserva: considera a data prevista disponivel gravada na reserva. + para outros considera a data prevista disponivel da reserva + a quantidade de dias de emprestimo do exemplar + */ + if ($this->getRequest()->cliente_id == $cliente['id']) + $reserva['data_prevista_disponivel'] = date('d/m/Y', strtotime($reserva['data_prevista_disponivel'])); + + else + $reserva['data_prevista_disponivel'] = $this->getDataPrevistaDisponivelForExemplar($exemplar, $reserva['data_prevista_disponivel'], 'd/m/Y'); + } //fim for each + } + + $this->_reservas = $reservas; + } + + return $this->_reservas; + } + + + protected function loadEmprestimoForExemplar($exemplar = null) { + if(is_null($exemplar)) + $exemplar = $this->loadExemplar(); + + $emprestimo = new clsPmieducarExemplarEmprestimo(); + + $emprestimo = $emprestimo->lista(null, + null, + null, + null, + $exemplar['id'], + null, + null, + null, + null, + null, + $devolvido = false, + $this->getRequest()->biblioteca_id, + null, + $this->getRequest()->instituicao_id, + $this->getRequest()->escola_id); + + if($emprestimo) { + $emprestimo = array_shift($emprestimo); + $emprestimo = Portabilis_Array_Utils::filter($emprestimo, array('cod_emprestimo' => 'id', + 'data_retirada' => 'data', + 'ref_cod_cliente' => 'cliente_id')); + // adiciona informações adicionais ao emprestimo + $cliente = $this->loadCliente($emprestimo["cliente_id"]); + + $emprestimo['cliente'] = $cliente; + $emprestimo['nome_cliente'] = $cliente['id'] . ' - ' . $cliente['nome']; + $emprestimo['situacao'] = $this->getSituacaoForFlag('emprestado'); + + $emprestimo['data'] = date('d/m/Y', strtotime($emprestimo['data'])); + $emprestimo['data_prevista_disponivel'] = $this->getDataPrevistaDisponivelForExemplar($exemplar, $emprestimo['data'], 'd/m/Y'); + } + + return $emprestimo; + } + + + protected function existsReservaForExemplar($exemplar = null, $clienteId = null) { + $reservas = $this->loadReservasForExemplar($exemplar, $clienteId, $reload = true); + return is_array($reservas) && count($reservas) > 0; + } + + + protected function getSituacaoForFlag($flag) { + $situacoes = array( + 'indisponivel' => array('flag' => 'indisponivel', 'label' => 'Indisponível'), + 'disponivel' => array('flag' => 'disponivel' , 'label' => 'Disponível' ), + 'emprestado' => array('flag' => 'emprestado' , 'label' => 'Emprestado' ), + 'reservado' => array('flag' => 'reservado' , 'label' => 'Reservado' ), + 'emprestado_e_reservado' => array('flag' => 'emprestado_e_reservado', + 'label' => 'Emprestado e reservado' ), + 'invalida' => array('flag' => 'invalida' , 'label' => 'Inválida' ) + ); + + return $situacoes[$flag]; + } + + + protected function loadSituacaoForExemplar($exemplar) { + + $situacao = new clsPmieducarSituacao($exemplar["situacao_id"]); + $situacao = $situacao->detalhe(); + + $reservado = $this->existsReservaForExemplar($exemplar); + $emprestado = $situacao["situacao_emprestada"] == 1; + + $situacaoPermiteEmprestimo = $situacao["permite_emprestimo"] == 2; + $exemplarPermiteEmprestimo = $exemplar["permite_emprestimo"] == 2; + + if ($emprestado && $reservado) + $flagSituacaoExemplar = 'emprestado_e_reservado'; + elseif ($emprestado) + $flagSituacaoExemplar = 'emprestado'; + elseif ($reservado) + $flagSituacaoExemplar = 'reservado'; + elseif ($situacaoPermiteEmprestimo && $exemplarPermiteEmprestimo) + $flagSituacaoExemplar = 'disponivel'; + elseif (! $situacaoPermiteEmprestimo || ! $exemplarPermiteEmprestimo) + $flagSituacaoExemplar = 'indisponivel'; + else + $flagSituacaoExemplar = 'invalida'; + + return $this->getSituacaoForFlag($flagSituacaoExemplar); + } + + + protected function getSituacaoExemplar($exemplar = null) { + if (is_null($exemplar)) + $exemplar = $this->loadExemplar(); + + return $exemplar['situacao']; + } + + + protected function getPendenciasForExemplar($exemplar) { + if (! isset($exemplar['situacao'])) + throw new CoreExt_Exception("Exemplar deve possuir uma chave 'situacao' para getPendenciasForExemplar."); + + $situacaoExemplar = $exemplar['situacao']; + $pendencias = array(); + + // get emprestimo + if (strpos($situacaoExemplar['flag'], 'emprestado') > -1) { + $emprestimo = $this->loadEmprestimoForExemplar($exemplar); + + if($emprestimo != false) + $pendencias[] = $emprestimo; + } + + // get reservas + if (strpos($situacaoExemplar['flag'], 'reservado') > -1) { + $reservas = $this->loadReservasForExemplar($exemplar); + + if ($reservas != false) + $pendencias = array_merge($pendencias, $reservas); + } + + return $pendencias; + } + + + protected function loadAcervo($id = '', $reload = false) { + if (empty($id)) + $id = $this->getRequest()->acervo_id; + + if ($reload || ! isset($this->_acervos)) + $this->_acervos = array(); + + if (! isset($this->_acervos[$id])) { + $acervo = new clsPmieducarAcervo($id); + $acervo = $acervo->detalhe(); + + if ($acervo) { + $acervo = Portabilis_Array_Utils::filter($acervo, array('cod_acervo' => 'id', + 'ref_cod_exemplar_tipo' => 'exemplar_tipo_id', + 'ref_cod_acervo' => 'acervo_referencia_id', + 'ref_cod_acervo_colecao' => 'colecao_id', + 'ref_cod_acervo_idioma' => 'idioma_id', + 'ref_cod_acervo_editora' => 'editora_id', + 'ref_cod_biblioteca' => 'biblioteca_id', + 'titulo', + 'sub_titulo', + 'cdu', + 'cutter', + 'volume', + 'num_edicao', + 'ano', + 'num_paginas', + 'isbn', + 'data_cadastro')); + } + + + $this->_acervos[$id] = $acervo; + } + + return $this->_acervos[$id]; + } + + + protected function loadExemplares($reload = false, $id = null) { + if ($reload || ! isset($this->_exemplares)) { + $exemplares = new clsPmieducarExemplar(); + + // filtra por acervo_id e/ou tombo_exemplar (caso tenha recebido tais parametros) + $exemplares = $exemplares->lista($id, + null, + null, + $this->getRequest()->acervo_id, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + $this->getRequest()->biblioteca_id, + null, + $this->getRequest()->instituicao_id, + $this->getRequest()->escola_id, + $this->getRequest()->tombo_exemplar); + + if ($exemplares) { + $exemplares = Portabilis_Array_Utils::filterSet($exemplares, array('cod_exemplar' => 'id', + 'ref_cod_fonte' => 'fonte_id', + 'ref_cod_motivo_baixa' => 'motivo_baixa_id', + 'ref_cod_acervo' => 'acervo_id', + 'ref_cod_biblioteca' => 'biblioteca_id', + 'ref_cod_situacao' => 'situacao_id', + 'permite_emprestimo', + 'tombo')); + // adiciona situacao e pendencias de cada exemplar + foreach($exemplares as $index => $exemplar) { + $acervo = $this->loadAcervo($exemplar['acervo_id']); + $exemplares[$index]['acervo'] = array(); + $exemplares[$index]['acervo']['id'] = $exemplar['acervo_id']; + $exemplares[$index]['acervo']['titulo'] = $acervo['titulo']; + $exemplares[$index]['acervo']['exemplar_tipo_id'] = $acervo['exemplar_tipo_id']; + + $exemplares[$index]['exemplar_tipo_id'] = $acervo['exemplar_tipo_id']; + + $exemplares[$index]['situacao'] = $this->loadSituacaoForExemplar($exemplares[$index]); + $exemplares[$index]['pendencias'] = $this->getPendenciasForExemplar($exemplares[$index]); + } + } + + $this->_exemplares = $exemplares; + } + + return $this->_exemplares; + } + + + protected function loadExemplar($reload = false, $id = null) { + if (! $id) + $id = $this->getRequest()->exemplar_id; + + return array_shift($this->loadExemplares($reload, $id)); + } + + + /* metódos resposta operação / recurso + metódos nomeados no padrão operaçãoRecurso */ + + protected function getExemplares() { + $this->appendResponse('exemplares', $this->loadExemplares($reload = true)); + } + + + protected function loadSituacaoExemplar($permiteEmprestimo = true, $padrao = true, $emprestada = false){ + $permiteEmprestimo = $permiteEmprestimo == true ? 2 : 1; + $emprestada = $emprestada == true ? 1 : 0; + + if (! is_null($padrao)) + $padrao = $padrao == true ? 1 : 0; + + $situacao = new clsPmieducarSituacao(); + $situacao = $situacao->lista(null, + null, + null, + null, + $permiteEmprestimo, + null, + $padrao, + $emprestada, + null, + null, + null, + null, + 1, + $this->getRequest()->biblioteca_id, + $this->getRequest()->instituicao_id, + $this->getRequest()->escola_id); + + if ($situacao) { + $situacao = Portabilis_Array_Utils::filter($situacao[0], array('cod_situacao' => 'id', + 'ref_cod_biblioteca' => 'biblioteca_id', + 'nm_situacao' => 'label', + 'situacao_padrao' => 'padrao', + 'situacao_emprestada' => 'emprestada', + 'permite_emprestimo', + 'descricao')); + } + + return $situacao; + } + + + protected function updateSituacaoExemplar($newSituacao){ + if (! $newSituacao) + throw new CoreExt_Exception('$newSituacao não pode ser falso em updateSituacaoExemplar.'); + + $exemplar = new clsPmieducarExemplar(); + $exemplar->cod_exemplar = $this->getRequest()->exemplar_id; + $exemplar->ref_cod_acervo = $this->getRequest()->acervo_id; + $exemplar->ref_cod_situacao = $newSituacao['id']; + $exemplar->ref_usuario_exc = $this->getSession()->id_pessoa; + + return $exemplar->edita(); + } + + + protected function postEmprestimo() { + if ($this->canPostEmprestimo()) { + // altera situacao exemplar para emprestado + $situacaoEmprestimo = $this->loadSituacaoExemplar($permiteEmprestimo = false, $padrao = null, $emprestada = true); + + if($situacaoEmprestimo && ! $this->updateSituacaoExemplar($situacaoEmprestimo)) + $this->messenger->append("Aparentemente a situação do exemplar não foi alterada para emprestado.", 'error'); + elseif(! $situacaoEmprestimo) + $this->messenger->append("Não foi encontrado uma situação cadastrada para emprestimo.", 'error'); + + // grava emprestimo + if(! $this->messenger->hasMsgWithType('error')) { + $emprestimo = new clsPmieducarExemplarEmprestimo(); + $emprestimo->ref_usuario_cad = $this->getSession()->id_pessoa; + $emprestimo->ref_cod_cliente = $this->getRequest()->cliente_id; + $emprestimo->ref_cod_exemplar = $this->getRequest()->exemplar_id; + + if ($emprestimo->cadastra()) + $this->messenger->append("Emprestimo realizado com sucesso.", 'success'); + else + $this->messenger->append("Aparentemente o realizado não foi cadastrado, por favor, tente novamente.", 'error'); + } + } + + $this->appendResponse('exemplar', $this->loadExemplar($reload = true)); + } + + + protected function postDevolucao() { + + if ($this->canPostDevolucao()) { + // altera situacao exemplar para disponivel + $situacaoDisponivel = $this->loadSituacaoExemplar($permiteEmprestimo = true, $padrao = true, $emprestada = false); + + if($situacaoDisponivel && ! $this->updateSituacaoExemplar($situacaoDisponivel)) + $this->messenger->append("Aparentemente a situação do exemplar não foi alterada para disponivel.", 'error'); + elseif(! $situacaoDisponivel) + $this->messenger->append("Não foi encontrado uma situação padrão cadastrada para exemplar disponivel.", 'error'); + + // grava emprestimo + if(! $this->messenger->hasMsgWithType('error')) { + + $_emprestimo = $this->loadEmprestimoForExemplar(); + $emprestimo = new clsPmieducarExemplarEmprestimo(); + $emprestimo->cod_emprestimo = $_emprestimo['id']; + $emprestimo->ref_usuario_devolucao = $this->getSession()->id_pessoa; + $emprestimo->data_devolucao = date("Y-m-d"); + + // TODO calcular / setar valor multa (se) devolução atrasada? + + if ($emprestimo->edita()) + $this->messenger->append("Devolução realizada com sucesso.", 'success'); + else + $this->messenger->append("Aparentemente a devolução não foi cadastrada, por favor, tente novamente.", 'error'); + } + } + + $this->appendResponse('exemplar', $this->loadExemplar($reload = true)); + } + + + public function Gerar() { + if ($this->isRequestFor('get', 'exemplares')) + $this->getExemplares(); + + elseif ($this->isRequestFor('post', 'emprestimo')) + $this->postEmprestimo(); + + elseif ($this->isRequestFor('post', 'devolucao')) + $this->postDevolucao(); + + else + $this->notImplementedOperationError(); + } +} diff --git a/ieducar/modules/Biblioteca/Views/EmprestimoController.php b/ieducar/modules/Biblioteca/Views/EmprestimoController.php new file mode 100644 index 0000000..aab962e --- /dev/null +++ b/ieducar/modules/Biblioteca/Views/EmprestimoController.php @@ -0,0 +1,58 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÃFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Biblioteca + * @subpackage Modules + * @since Arquivo disponível desde a versão ? + * @version $Id$ + */ + +require_once 'Portabilis/Controller/Page/ListController.php'; + +class EmprestimoController extends Portabilis_Controller_Page_ListController +{ + protected $_dataMapper = ''; + protected $_titulo = 'Emprestimo'; + protected $_formMap = array(); + protected $_processoAp = 610; + + public function Gerar() { + // inputs + $this->inputsHelper()->dynamic('instituicao', array('id' => 'instituicao_id')); + $this->inputsHelper()->dynamic('escola', array('id' => 'escola_id')); + $this->inputsHelper()->dynamic('biblioteca', array('id' => 'biblioteca_id')); + $this->campoNumero('tombo_exemplar', 'Tombo exemplar', '', 13, 13, true); + + $helperOptions = array('hiddenInputOptions' => array('id' => 'cliente_id')); + $this->inputsHelper()->dynamic('bibliotecaPesquisaCliente', array(), $helperOptions); + + // assets + $this->loadResourceAssets($this->getDispatcher()); + } +} +?> diff --git a/ieducar/modules/Biblioteca/Views/ReservaApiController.php b/ieducar/modules/Biblioteca/Views/ReservaApiController.php new file mode 100644 index 0000000..d03c509 --- /dev/null +++ b/ieducar/modules/Biblioteca/Views/ReservaApiController.php @@ -0,0 +1,597 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÃFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Biblioteca + * @subpackage Modules + * @since Arquivo disponível desde a versão ? + * @version $Id$ + */ + +require_once 'lib/Portabilis/Controller/ApiCoreController.php'; +require_once 'include/pmieducar/clsPmieducarExemplar.inc.php'; + +// TODO migrar novo padrao api controller + +class ReservaApiController extends ApiCoreController +{ + protected $_nivelAcessoOption = App_Model_NivelAcesso::SOMENTE_BIBLIOTECA; + + // validadores especificos reserva + + protected function validatesPresenceOfRefCodInstituicao(){ + return $this->validator->validatesPresenceOf($this->getRequest()->ref_cod_instituicao, 'ref_cod_instituicao'); + } + + + protected function validatesPresenceOfRefCodEscola(){ + return $this->validator->validatesPresenceOf($this->getRequest()->ref_cod_escola, 'ref_cod_escola'); + } + + + protected function validatesPresenceOfRefCodBiblioteca(){ + return $this->validator->validatesPresenceOf($this->getRequest()->ref_cod_biblioteca, 'ref_cod_biblioteca'); + } + + + protected function validatesPresenceOfRefCodCliente(){ + return $this->validator->validatesPresenceOf($this->getRequest()->ref_cod_cliente, 'ref_cod_cliente'); + } + + + protected function validatesPresenceOfRefCodAcervo(){ + return $this->validator->validatesPresenceOf($this->getRequest()->ref_cod_acervo, 'ref_cod_acervo'); + } + + + protected function validatesPresenceOfExemplarId(){ + return $this->validator->validatesPresenceOf($this->getRequest()->exemplar_id, 'exemplar_id'); + } + + protected function validatesPresenceOfReservaId(){ + return $this->validator->validatesPresenceOf($this->getRequest()->reserva_id, 'reserva_id'); + } + + + // validações negócio + + protected function canAcceptRequest() { + return parent::canAcceptRequest() && + $this->validatesPresenceOfRefCodInstituicao() && + $this->validatesPresenceOfRefCodEscola() && + $this->validatesPresenceOfRefCodBiblioteca() && + $this->validatesPresenceOfRefCodCliente() && + $this->validatesPresenceOfRefCodAcervo(); + // TODO validar se cliente da biblioteca + } + + + protected function canPostReserva() { + return $this->validatesClienteIsNotSuspenso() && + $this->validatesPresenceOfExemplarId() && + + $this->validatesSituacaoExemplarIsIn(array('disponivel', + 'emprestado', + 'reservado', + 'emprestado_e_reservado')) && + + $this->validatesNotExistsReservaEmAbertoForCliente(); + + // TODO validar ? + // qtd reservas em aberto do cliente <= limite biblioteca + // valor R$ multas em aberto do cliente <= limite biblioteca + } + + + protected function canDeleteReserva() { + return $this->validatesPresenceOfExemplarId() && + $this->validatesPresenceOfReservaId() && + + $this->validatesSituacaoExemplarIsIn(array('reservado', + 'emprestado_e_reservado')) && + + $this->validatesExistsReservaEmAbertoForCliente(); + } + + + protected function validatesSituacaoExemplarIsIn($situacoes) { + if (! is_array($situacoes)) + $situacoes = array($situacoes); + + $situacaoAtual = $this->getSituacaoExemplar(); + $situacaoAtual = $situacaoAtual['flag']; + $msg = "Situação do exemplar deve estar em (" . implode(', ', $situacoes) . ") porem atualmente é $situacaoAtual."; + + return $this->validator->validatesValueInSetOf($situacaoAtual, $situacoes, 'situação', false, $msg); + } + + + protected function validatesClienteIsNotSuspenso() { + $cliente = $this->loadCliente(); + + if($cliente['suspenso']) { + $this->messenger->append("O cliente esta suspenso", 'error'); + return false; + } + + return true; + } + + + protected function validatesNotExistsReservaEmAbertoForCliente() { + if ($this->existsReservaEmAbertoForCliente()) { + $this->messenger->append("Este cliente já possui uma reserva em aberto para um exemplar desta obra.", 'error'); + return false; + } + + return true; + } + + + protected function validatesExistsReservaEmAbertoForCliente() { + if (! $this->existsReservaEmAbertoForCliente()) { + $this->messenger->append("O cliente não possui reserva em aberto para este exemplar.", 'error'); + return false; + } + + return true; + } + + + // subscreve metódo super classe + + protected function getAvailableOperationsForResources() { + return array('exemplares' => array('get'), + 'reserva' => array('post') + ); + } + + + /* metódos auxiliares resposta operação / recurso + metódos iniciados com load consultam informação no banco de dados + metódos iniciados com get consultam informação em objetos + */ + + protected function loadExemplar($id = '', $reload = false) { + if ($reload || ! isset($this->_exemplar)) { + + if (empty($id)) + $id = $this->getRequest()->exemplar_id; + + $exemplar = new clsPmieducarExemplar($id); + $exemplar = $exemplar->detalhe(); + + $situacaoExemplar = $this->loadSituacaoForExemplar($exemplar); + $this->_exemplar = array('id' => $exemplar['cod_exemplar'], + 'situacao' => $situacaoExemplar, + 'pendencias' => $this->getPendenciasForExemplar($exemplar, $situacaoExemplar) + ); + } + + return $this->_exemplar; + } + + + protected function getPendenciasForExemplar($exemplar, $situacaoExemplar = '') { + if (empty($situacaoExemplar)) + $situacaoExemplar = $exemplar['situacao']; + + $pendencias = array(); + + if (strpos($situacaoExemplar['flag'], 'emprestado') > -1) + $pendencias[] = $this->loadEmprestimoForExemplar($exemplar); + + if (strpos($situacaoExemplar['flag'], 'reservado') > -1) + $pendencias = array_merge($pendencias, $this->loadReservasForExemplar($exemplar)); + + return $pendencias; + } + + + protected function loadSituacaoForExemplar($exemplar) { + $situacao = new clsPmieducarSituacao($exemplar["ref_cod_situacao"]); + $situacao = $situacao->detalhe(); + + $reservado = $this->existsReservaForExemplar($exemplar); + $emprestado = $situacao["situacao_emprestada"] == 1; + + $situacaoPermiteEmprestimo = $situacao["permite_emprestimo"] == 2; + $exemplarPermiteEmprestimo = $exemplar["permite_emprestimo"] == 2; + + if ($emprestado && $reservado) + $flagSituacaoExemplar = 'emprestado_e_reservado'; + elseif ($emprestado) + $flagSituacaoExemplar = 'emprestado'; + elseif ($reservado) + $flagSituacaoExemplar = 'reservado'; + elseif ($situacaoPermiteEmprestimo && $exemplarPermiteEmprestimo) + $flagSituacaoExemplar = 'disponivel'; + elseif (! $situacaoPermiteEmprestimo || ! $exemplarPermiteEmprestimo) + $flagSituacaoExemplar = 'indisponivel'; + else + $flagSituacaoExemplar = 'invalida'; + + return $this->getSituacaoForFlag($flagSituacaoExemplar); + } + + + protected function getSituacaoForFlag($flag) { + $situacoes = array( + 'indisponivel' => array('flag' => 'indisponivel', 'label' => 'Indisponível'), + 'disponivel' => array('flag' => 'disponivel' , 'label' => 'Disponível' ), + 'emprestado' => array('flag' => 'emprestado' , 'label' => 'Emprestado' ), + 'reservado' => array('flag' => 'reservado' , 'label' => 'Reservado' ), + 'emprestado_e_reservado' => array('flag' => 'emprestado_e_reservado', + 'label' => 'Emprestado e reservado' ), + 'invalida' => array('flag' => 'invalida' , 'label' => 'Inválida' ) + ); + + return $situacoes[$flag]; + } + + + protected function getSituacaoExemplar($exemplar = null) { + if (is_null($exemplar)) + $exemplar = $this->loadExemplar(); + + return $exemplar['situacao']; + } + + + protected function getAcervo($id = '') { + if (empty($id)) + $id = $this->getRequest()->ref_cod_acervo; + + $acervo = new clsPmieducarAcervo($id); + return $acervo->detalhe(); + } + + + protected function loadEmprestimoForExemplar($exemplar = null) { + if (is_null($exemplar)) + $exemplar = $this->loadExemplar(); + + $_emprestimo = array('cliente' => null, + 'nome_cliente' => '', + 'data' => '', + 'data_prevista_disponivel' => '', + 'exists' => false, + 'situacao' => $this->getSituacaoForFlag('emprestado') + ); + + $emprestimo = new clsPmieducarExemplarEmprestimo(); + + $emprestimo = $emprestimo->lista(null, + null, + null, + null, + $exemplar['cod_exemplar'], + null, + null, + null, + null, + null, + $devolvido = false, + $this->getRequest()->ref_cod_biblioteca, + null, + $this->getRequest()->ref_cod_instituicao, + $this->getRequest()->ref_cod_escola); + + if(is_array($emprestimo) && ! empty($emprestimo)) { + $emprestimo = array_shift($emprestimo); + $cliente = $this->loadCliente($emprestimo["ref_cod_cliente"]); + + $_emprestimo['exists'] = true; + $_emprestimo['data'] = date('d/m/Y', strtotime($emprestimo['data_retirada'])); + + $_emprestimo['data_prevista_disponivel'] = $this->getDataPrevistaDisponivelForExemplar($emprestimo['data_retirada'], 'd/m/Y', $exemplar); + $_emprestimo['cliente'] = $cliente; + $_emprestimo['nome_cliente'] = $cliente['id'] . ' - ' . $cliente['nome']; + } + + return $_emprestimo; + } + + + protected function existsReservaForExemplar($exemplar = null, $clienteId = null) { + $reservas = $this->loadReservasForExemplar($exemplar, $clienteId, $reload = true); + return ! empty($reservas) && $reservas[0]['exists']; + } + + protected function existsReservaEmAbertoForCliente() { + $clienteId = $this->getRequest()->ref_cod_cliente; + $exemplares = $this->loadExemplares(); + + foreach($exemplares as $exemplar) { + if ($this->existsReservaForExemplar($exemplar, $clienteId)) + return true; + } + + return false; + } + + protected function loadReservasForExemplar($exemplar = null, $clienteId = null, $reload = false) { + + if ($reload || ! isset($this->_reservas)) { + if (is_null($exemplar)) + $exemplar = $this->loadExemplar(); + + $this->_reservas = array(); + + $reservas = new clsPmieducarReservas(); + $reservas = $reservas->lista(null, + null, + null, + $clienteId, + null, + null, + null, + null, + null, + null, + $exemplar['cod_exemplar'], + 1, + $this->getRequest()->ref_cod_biblioteca, + $this->getRequest()->ref_cod_instituicao, + $this->getRequest()->ref_cod_escola, + $data_retirada_null = true); + + foreach ($reservas as $reserva) { + $_reserva = array(); + $cliente = $this->loadCliente($reserva["ref_cod_cliente"]); + + $_reserva['exists'] = true; + $_reserva['reserva_id'] = $reserva['cod_reserva']; + $_reserva['data'] = date('d/m/Y', strtotime($reserva['data_reserva'])); + + /* caso seja o mesmo cliente da reserva: considera a data prevista disponivel gravada na reserva + senão considera a data prevista disponivel da reserva + a quantidade de dias de emprestimo do exemplar */ + if ($this->getRequest()->ref_cod_escola == $cliente['id']) + $_reserva['data_prevista_disponivel'] = date('d/m/Y', strtotime($reserva['data_prevista_disponivel'])); + else + $_reserva['data_prevista_disponivel'] = $this->getDataPrevistaDisponivelForExemplar($reserva['data_prevista_disponivel'], 'd/m/Y', $exemplar); + + $_reserva['cliente'] = $cliente; + $_reserva['nome_cliente'] = $cliente['id'] . ' - ' . $cliente['nome']; + $_reserva['situacao'] = $this->getSituacaoForFlag('reservado'); + + $this->_reservas[] = $_reserva; + } + } + + return $this->_reservas; + } + + + protected function loadCliente($id = '') { + + if (empty($id)) + $id = $this->getRequest()->ref_cod_cliente; + + $_cliente = array('id' => $id); + + $cliente = new clsPmieducarCliente($id); + $cliente = $cliente->detalhe(); + + $_cliente['pessoaId'] = $cliente["ref_idpes"]; + + $pessoa = new clsPessoa_($_cliente['pessoaId']); + $pessoa = $pessoa->detalhe(); + + $_cliente['nome'] = $pessoa["nome"]; + + $sql = "select 1 from pmieducar.cliente_suspensao where ref_cod_cliente = $1 and data_liberacao is null and data_suspensao + (dias||' day')::interval >= now()"; + $suspenso = $this->fetchPreparedQuery($sql, $params = array($id), true, 'first-field'); + + $_cliente['suspenso'] = $suspenso == '1'; + + return $_cliente; + } + + + protected function getDataPrevistaDisponivelForExemplar($dataInicio, $format = 'd/m/Y', $exemplar = null) { + if (is_null($exemplar)) + $exemplar = $this->loadExemplar(); + + $qtdDiasEmprestimo = $this->loadQtdDiasEmprestimoForExemplar($exemplar); + $date = date($format, strtotime("+$qtdDiasEmprestimo days", strtotime($dataInicio))); + + // #TODO se data cair em feriado ou dia de não trabalho somar +1 dia ? + + return $date; + } + + + protected function loadQtdDiasEmprestimoForExemplar($exemplar = null) { + if (is_null($exemplar)) + $exemplar = $this->loadExemplar(); + + $acervo = $this->getAcervo($exemplar['ref_cod_acervo']); + $exemplarTipoId = $acervo['ref_cod_exemplar_tipo']; + + $clienteTipoCliente = new clsPmieducarClienteTipoCliente(); + + $clienteTipoCliente = $clienteTipoCliente->lista(null, + $this->getRequest()->ref_cod_cliente, + null, + null, + null, + null, + null, + null, + $this->getRequest()->ref_cod_biblioteca, + 1); + + $clienteTipoId = $clienteTipoCliente[0]['ref_cod_cliente_tipo']; + + $clienteTipoExemplarTipo = new clsPmieducarClienteTipoExemplarTipo($clienteTipoId, + $exemplarTipoId); + + $clienteTipoExemplarTipo = $clienteTipoExemplarTipo->detalhe(); + + return $clienteTipoExemplarTipo["dias_emprestimo"]; + } + + + protected function getDataPrevistaDisponivelForExemplarAfterLastPendencia($exemplar = null) { + if (is_null($exemplar)) + $exemplar = $this->loadExemplar(); + + if (! empty($exemplar['pendencias'])) { + $lastPendencia = end($exemplar['pendencias']); + $dataPrevistaDisponivel = $this->getDataPrevistaDisponivelForExemplar($lastPendencia['data_prevista_disponivel'], 'Y-m-d', $exemplar); + } + else + $dataPrevistaDisponivel = date("Y-m-d"); + + return $dataPrevistaDisponivel; + } + + + protected function loadExemplares($reload = false) { + if ($reload || ! isset($this->_exemplares)) { + $this->_exemplares = new clsPmieducarExemplar(); + $this->_exemplares = $this->_exemplares->lista(null, + null, + null, + $this->getRequest()->ref_cod_acervo, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + $this->getRequest()->ref_cod_biblioteca, + null, + $this->getRequest()->ref_cod_instituicao, + $this->getRequest()->ref_cod_escola); + } + + return $this->_exemplares; + } + + /* metódos resposta operação / recurso + metódos nomeados no padrão operaçãoRecurso */ + + protected function getExemplares() { + $exemplares = $this->loadExemplares(); + $_exemplares = array(); + + foreach($exemplares as $exemplar) { + $_exemplares[] = $this->loadExemplar($exemplar['cod_exemplar'], $reload = true); + } + + return $_exemplares; + } + + + protected function postReserva() { + if ($this->canPostReserva()) { + $exemplar = $this->loadExemplar(); + $dataPrevistaDisponivel = $this->getDataPrevistaDisponivelForExemplarAfterLastPendencia($exemplar); + + $reserva = new clsPmieducarReservas(null, + null, + $this->getSession()->id_pessoa, + $this->getRequest()->ref_cod_cliente, + null, + $dataPrevistaDisponivel, + null, + $this->getRequest()->exemplar_id, + 1); + + if($reserva->cadastra()) + $this->messenger->append("Reserva realizada com sucesso.", 'success'); + else + $this->messenger->append("Aparentemente a reserva não foi cadastrada, por favor, tente novamente.", 'error'); + } + + $this->appendResponse($this->loadExemplar($this->getRequest()->exemplar_id, $reload = true)); + } + + protected function deleteReserva() { + + if ($this->canDeleteReserva()) { + $exemplar = $this->loadExemplar(); + + // chamado list para assegurar que esta excluindo a reserva do cliente, biblioteca, instituicao e escola + $reservas = new clsPmieducarReservas(); + $reservas = $reservas->lista($this->getRequest()->reserva_id, + null, + null, + $this->getRequest()->ref_cod_cliente, + null, + null, + null, + null, + null, + null, + $this->getRequest()->exemplar_id, + 1, + $this->getRequest()->ref_cod_biblioteca, + $this->getRequest()->ref_cod_instituicao, + $this->getRequest()->ref_cod_escola, + $data_retirada_null = true); + + foreach ($reservas as $reserva) { + $_reserva = new clsPmieducarReservas($this->getRequest()->reserva_id); + + if($_reserva->excluir()) + $this->messenger->append("Reserva cancelada com sucesso.", 'success'); + else + $this->messenger->append("Aparentemente a reserva não foi cancelada, por favor, tente novamente.", 'error'); + } + + if(empty($reservas)) + $this->messenger->append("Não foi encontrado uma reserva com os parâmetros recebidos.", 'error'); + } + + $this->appendResponse($this->loadExemplar($this->getRequest()->exemplar_id, $reload = true)); + } + + public function Gerar() { + if ($this->isRequestFor('get', 'exemplares')) + $this->appendResponse('exemplares', $this->getExemplares()); + + elseif ($this->isRequestFor('post', 'reserva')) + $this->postReserva(); + + elseif ($this->isRequestFor('delete', 'reserva')) + $this->deleteReserva(); + + else + $this->notImplementedOperationError(); + } +} diff --git a/ieducar/modules/Biblioteca/Views/ReservaController.php b/ieducar/modules/Biblioteca/Views/ReservaController.php new file mode 100644 index 0000000..0090a61 --- /dev/null +++ b/ieducar/modules/Biblioteca/Views/ReservaController.php @@ -0,0 +1,53 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÃFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Biblioteca + * @subpackage Modules + * @since Arquivo disponível desde a versão ? + * @version $Id$ + */ + +require_once 'Portabilis/Controller/Page/ListController.php'; + +class ReservaController extends Portabilis_Controller_Page_ListController +{ + protected $_dataMapper = ''; #Avaliacao_Model_NotaAlunoDataMapper'; + protected $_titulo = 'Reserva'; + protected $_formMap = array(); + protected $_processoAp = 609; + + public function Gerar() { + // inputs + $inputs = array('instituicao', 'escola', 'biblioteca', 'bibliotecaPesquisaCliente', 'bibliotecaPesquisaObra'); + $this->inputsHelper()->dynamic($inputs); + + // assets + $this->loadResourceAssets($this->getDispatcher()); + } +} +?> -- libgit2 0.21.2