diff --git a/library/Class/CommSigb.php b/library/Class/CommSigb.php index 34b12516455e75883de3304fb15efc6939a54356..a7bd2e2616cbb587d12974e43555076ef79903ae 100644 --- a/library/Class/CommSigb.php +++ b/library/Class/CommSigb.php @@ -92,36 +92,48 @@ class Class_CommSigb { $exemplaires = array(); foreach ($exemplaires_to_check as $exemplaire) { - $exemplaire["dispo"] = "non connue"; - $exemplaire["reservable"]=false; - - $mode_comm=$this->getModeComm($exemplaire['id_bib']); - if ($sigb = $this->getSIGBComm($mode_comm)) { - $sigb_exemplaire = $sigb->getExemplaire($exemplaire["id_origine"], - $exemplaire["code_barres"]); - - if ($sigb_exemplaire->isPilonne() || !$sigb_exemplaire->isVisibleOPAC()) continue; - - if ($sigb_exemplaire->isValid()) { - $exemplaire["dispo"]=$sigb_exemplaire->getDisponibilite(); - $exemplaire["date_retour"]=$sigb_exemplaire->getDateRetour(); - $exemplaire["reservable"]=$sigb_exemplaire->isReservable(); - $exemplaire["id_exemplaire"]=$sigb_exemplaire->getId(); - //Cas Nanook pour la localisation de l'exemplaire en temps reel - if ($code_annexe = $sigb_exemplaire->getCodeAnnexe()) { - if (is_numeric($code_annexe)) - $exemplaire["id_bib"] = $code_annexe; - $exemplaire["annexe"] = $code_annexe; - } - } - } - - $exemplaires []= $exemplaire; + if ($dispo = $this->getDispoExemplaire($exemplaire["id_bib"], + $exemplaire["id_origine"], + $exemplaire["code_barres"])) + $exemplaires []= array_merge($exemplaire, $dispo); } return $exemplaires; } + public function getDispoExemplaire($id_bib, $id_origine, $code_barre) { + $exemplaire = ["dispo" => "non connue", + "reservable" => false]; + + $int_bib = Class_IntBib::find($id_bib); + if (! ($int_bib && ($sigb = $int_bib->getSIGBComm()))) + return $exemplaire; + + $sigb_exemplaire = $sigb->getExemplaire($id_origine, $code_barre); + + if ($sigb_exemplaire->isPilonne() || !$sigb_exemplaire->isVisibleOPAC()) + return null; + + if (!$sigb_exemplaire->isValid()) + return $exemplaire; + + $exemplaire["dispo"]=$sigb_exemplaire->getDisponibilite(); + $exemplaire["date_retour"]=$sigb_exemplaire->getDateRetour(); + $exemplaire["reservable"]=$sigb_exemplaire->isReservable(); + $exemplaire["id_exemplaire"]=$sigb_exemplaire->getId(); + + if (!$code_annexe = $sigb_exemplaire->getCodeAnnexe()) + return $exemplaire; + + //pour la localisation de l'exemplaire en temps reel + $exemplaire["annexe"] = $code_annexe; + if (is_numeric($code_annexe)) + $exemplaire["id_bib"] = $code_annexe; + + return $exemplaire; + } + + /** * @param Class_Users $user * @return array diff --git a/tests/library/Class/CommSigbTest.php b/tests/library/Class/CommSigbTest.php index ba63ccb48700f1d1b9c0b48ac9b03e8ce7f2ff85..3fd27185f715292ea291df7db4487ae240acff75 100644 --- a/tests/library/Class/CommSigbTest.php +++ b/tests/library/Class/CommSigbTest.php @@ -593,13 +593,16 @@ class CommSigbWithNotAbonneTest extends Storm_Test_ModelTestCase { /** @test */ public function getDispoExemplairesShouldReturnNonReservable() { - $this->assertEquals(array(array('id' => 2, - 'id_bib' => 0, - 'dispo' => 'non connue', - 'reservable' => false)), - $this->comm_sigb->getDispoExemplaires( - array(array('id' => 2, - 'id_bib' => 0)))); + $this->assertEquals([['id' => 2, + 'id_bib' => 0, + 'id_origine' => 0, + 'code_barres' => 0, + 'dispo' => 'non connue', + 'reservable' => false]], + $this->comm_sigb->getDispoExemplaires([['id' => 2, + 'id_origine' => 0, + 'code_barres' => 0, + 'id_bib' => 0]])); } }