Skip to content
Snippets Groups Projects
Commit 77109c42 authored by efalcy's avatar efalcy
Browse files

Webservice Pergame : Refacto de la reservation pour pouvoir faire des prets...

Webservice Pergame : Refacto de la reservation pour pouvoir faire des prets dans toutes les mediatheques d'un reseau
parent 95f05e40
Branches
Tags
No related merge requests found
......@@ -207,28 +207,32 @@ class Class_Systeme_PergameService
//------------------------------------------------------------------------------------------------------
// Ecrire une réservation
//------------------------------------------------------------------------------------------------------
public function ReserverExemplaire($id_bib,$id_origine, $code_annexe)
public function ReserverExemplairePergame($id_bib,$exemplaire, $code_annexe)
{
// Controle connexion
if(!$this->user->ID_USER) $ret["erreur"]="Vous devez être connecté pour réserver un document";
else if(!$this->user->IDABON) $ret["erreur"]="Vous devez être connecté en tant qu'abonné pour réserver un document";
if($ret["erreur"]) return $ret;
// Lire exemplaire et notice
$ex=fetchEnreg("select * from exemplaires where id_origine='$id_origine' and id_bib=$id_bib");
if(!$ex) return array("erreur"=>"Une erreur s'est produite lors de la lecture de la notice.");
$id_notice=$ex["id_notice"];
$support=fetchOne("select type_doc from notices where id_notice=$id_notice");
if(!$exemplaire) return array("erreur"=>"Une erreur s'est produite lors de la lecture de la notice.");
$notice= $exemplaire->getNotice();
$support=$notice->getTypeDoc();
// Controle si deja réservé par l'abonné
$ret=null;
$id_abon=$this->user->IDABON;
$ordre_abon=$this->user->ORDREABON;
$resa=fetchEnreg("select * from reservations where ID_NOTICE_ORIGINE='$id_origine' and ID_SITE=$id_bib and IDABON='$id_abon' and ORDREABON=$ordre_abon");
$id_origine=$exemplaire->getIdOrigine();
$resa = Class_Reservation::findAllBy(['id_notice_origine' => $id_origine,
'id_site' => $id_bib,
'idabon' => $id_abon,
'ordreabon'=> $ordre_abon]);
if($resa) $ret["erreur"]="Vous avez déjà réservé ce document le ".formatDate($resa["DATE_RESA"], 1);
if($ret["erreur"]) return $ret;
// lecture des regles de reservations
$regles=$this->getReglesReservation($ex["id_bib"]);
$regles=$this->getReglesReservation($exemplaire->getIdBib());
// controle quota par carte
$nb=fetchOne("select count(*) from reservations where IDABON=$id_abon");
......@@ -343,11 +347,11 @@ class Class_Systeme_PergameService
//------------------------------------------------------------------------------------------------------
// Lire les regles de réservation
//------------------------------------------------------------------------------------------------------
private function getReglesReservation($id_bib)
public function getReglesReservation($id_bib)
{
if(!$id_bib) return false;
$data=fetchOne("select comm_params from int_bib where id_bib=$id_bib");
$data=unserialize($data);
$bib= Class_IntBib::find($id_bib);
$data=$bib->getCommParamsAsArray();
if(!isset($data["Max_par_carte"])) $data["Max_par_carte"]=3;
if(!isset($data["Max_par_document"])) $data["Max_par_document"]=3;
return $data;
......
......@@ -87,6 +87,7 @@ class Class_WebService_SIGB_Pergame_Service extends Class_WebService_SIGB_Abstra
public function getReservationsOf($emprunteur) {
$user = Class_Users::getLoader()->find($emprunteur->getId());
$reservations_db = Class_Reservation::getLoader()->findAllBy(array('IDABON' => $user->getIdabon(),
'ORDREABON' => $user->getOrdreabon()));
......@@ -104,8 +105,9 @@ class Class_WebService_SIGB_Pergame_Service extends Class_WebService_SIGB_Abstra
public function reserverExemplaire($user, $exemplaire, $code_annexe) {
return $this->getLegacyService()->reserverExemplaire($this->_id_bib,
$exemplaire->getIdOrigine(),
xdebug_break();
return $this->getLegacyService()->reserverExemplairePergame($this->_id_bib,
$exemplaire,
$code_annexe);
}
......
......@@ -20,12 +20,15 @@
*/
/** Tests de non régression sur requetes avec IDABON non entier */
class PergameServiceTest extends PHPUnit_Framework_TestCase {
class PergameServiceUserTest extends ModelTestCase {
public function setUp() {
$user = Class_Users::getLoader()
->newInstanceWithId(3)
->setIdabon('A-02')
->setOrdreabon(2);
parent::setUp();
$user = $this->fixture('Class_Users', ['id'=>3,
'login' => 'gaz',
'password' => 'toto',
'id_abon'=>'A-01',
'ordreabon' => 2]);
$this->pergame = new Class_Systeme_PergameService($user);
}
......@@ -54,9 +57,52 @@ class PergameServiceTest extends PHPUnit_Framework_TestCase {
/** @test */
function getReservationsShouldNotFail() {
$this->pergame->getReservations();
function getReservationsShouldReturnResa() {
$this->assertEquals([],$this->pergame->getReservations());
}
}
class PergameServiceReserverExemplaireTest extends ModelTestCase {
protected $pergame;
public function setUp() {
parent::setUp();
$user = $this->fixture('Class_Users', ['id'=>3,
'login' => 'gaz',
'password' => 'toto',
'id_abon'=>'A-01',
'ordreabon' => 2]);
$this->pergame = new Class_Systeme_PergameService($user);
$data='a:8:{s:26:"Autoriser_docs_disponibles";s:1:"1";s:13:"Max_par_carte";s:1:"3";s:16:"Max_par_document";s:1:"4";s:23:"Autoriser_prolongations";s:0:"";s:24:"Interdire_si_reservation";s:0:"";s:23:"Nombre_max_par_document";s:0:"";s:14:"Duree_en_jours";s:0:"";s:24:"Anteriorite_max_en_jours";s:0:"";}';
$this->mock_sql = Storm_Test_ObjectWrapper::mock();
Zend_Registry::set('sql', $this->mock_sql);
$this->mock_sql
->whenCalled('fetchOne')
->answers($data);
$this->fixture('Class_IntBib', ['id' => 2,
'comm_params'=> $data]);
}
/** @test */
function getReglesReservationShouldReturnFalseIfBibIsEmpty() {
$this->assertFalse( $this->pergame->getReglesReservation(''));
}
/** @test */
function getReglesReservationShouldReturnReglesMaxParDoc4() {
$this->assertEquals( 4,$this->pergame->getReglesReservation(2)["Max_par_document"]);
}
/** @test */
function getReglesReservationShouldReturnReglesMaxParCarteDefault() {
$this->assertEquals( 3,$this->pergame->getReglesReservation(2)["Max_par_carte"]);
}
}
?>
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment