From 4c8df433d570a9227c63b405665e130c9058a904 Mon Sep 17 00:00:00 2001 From: Laurent Laffont <llaffont@afi-sa.fr> Date: Wed, 27 May 2020 12:14:37 +0200 Subject: [PATCH] =?UTF-8?q?dev=20#111125=20drive=20SIGB=20compatibility:?= =?UTF-8?q?=20Orph=C3=A9e,=20V-Smart,=20Pergame?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VERSIONS_WIP/111125 | 1 + library/Class/CodifAnnexe.php | 11 ++++++-- library/Class/Reservation.php | 16 ++++++++++-- .../SIGB/Orphee/GetLstRsvResponseReader.php | 8 +++++- .../Class/WebService/SIGB/Pergame/Service.php | 4 ++- .../WebService/SIGB/VSmart/BorrowerReader.php | 19 +++++++++----- .../Class/WebService/SIGB/OrpheeFixtures.php | 12 ++++++--- .../WebService/SIGB/OrpheeServiceTest.php | 21 +++++++++++++++- .../Class/WebService/SIGB/PergameTest.php | 14 +++++++++++ .../Class/WebService/SIGB/VSmartTest.php | 25 ++++++++++++++++++- 10 files changed, 113 insertions(+), 18 deletions(-) create mode 100644 VERSIONS_WIP/111125 diff --git a/VERSIONS_WIP/111125 b/VERSIONS_WIP/111125 new file mode 100644 index 00000000000..d3c367cfbca --- /dev/null +++ b/VERSIONS_WIP/111125 @@ -0,0 +1 @@ + - ticket #111125 : compatibilité du module drive avec les SIGB: Orphée, V-Smart et Pergame \ No newline at end of file diff --git a/library/Class/CodifAnnexe.php b/library/Class/CodifAnnexe.php index d31aae4660b..0acb850fcef 100644 --- a/library/Class/CodifAnnexe.php +++ b/library/Class/CodifAnnexe.php @@ -29,13 +29,20 @@ class CodifAnnexeLoader extends Storm_Model_Loader { public function findLibelleByCode($code) { - return (($annexe = Class_CodifAnnexe::findFirstBy(['code' => $code])) - || ($annexe = Class_CodifAnnexe::findFirstBy(['id_origine' => $code]))) + return ($annexe = $this->findByCode($code)) ? $annexe->getLibelle() : ''; } + public function findByCode($code) { + if ($annexe = Class_CodifAnnexe::findFirstBy(['code' => $code])) + return $annexe; + + return Class_CodifAnnexe::findFirstBy(['id_origine' => $code]); + } + + public function getMultiOptions() { $annexes = Class_CodifAnnexe::findAllBy(['invisible' => 0, 'order' => 'libelle']); diff --git a/library/Class/Reservation.php b/library/Class/Reservation.php index be5ae832a45..40401e85dbf 100644 --- a/library/Class/Reservation.php +++ b/library/Class/Reservation.php @@ -59,14 +59,26 @@ class Class_Reservation extends Storm_Model_Abstract { if (isset($this->_notice)) return $this->_notice; - if ($exemplaire = Class_Exemplaire::findFirstBy(['id_origine' => $this->getIdNoticeOrigine(), - 'order' => 'zone995 desc'])) + if ($exemplaire = $this->getExemplaire()) return $this->_notice = $exemplaire->getNotice(); return null; } + public function getExemplaire() { + return Class_Exemplaire::findFirstBy(['id_origine' => $this->getIdNoticeOrigine(), + 'order' => 'zone995 desc']); + } + + + public function getCodeBarres() { + return ($item = $this->getExemplaire()) + ? $item->getCodeBarres() + : ''; + } + + public function getDynamicRank() { If ($this->getRang() > 0) return $this->getRang(); diff --git a/library/Class/WebService/SIGB/Orphee/GetLstRsvResponseReader.php b/library/Class/WebService/SIGB/Orphee/GetLstRsvResponseReader.php index 6c90e6c3c69..08bb473a21a 100644 --- a/library/Class/WebService/SIGB/Orphee/GetLstRsvResponseReader.php +++ b/library/Class/WebService/SIGB/Orphee/GetLstRsvResponseReader.php @@ -75,6 +75,7 @@ class Class_WebService_SIGB_Orphee_GetLstRsvResponseReader extends Class_WebServ public function endCb($data) { + $this->_current_reservation->setCodeBarre($data); $exemplaire_opac = Class_Exemplaire::getLoader()->findFirstBy(array('code_barres' => trim($data))); $this->_current_reservation->getExemplaire()->setExemplaireOPAC($exemplaire_opac); } @@ -127,7 +128,12 @@ class Class_WebService_SIGB_Orphee_GetLstRsvResponseReader extends Class_WebServ public function endAnx_Nxt($data) { - $this->_current_reservation->setBibliotheque(Class_CodifAnnexe::findLibelleByCode($data)); + if (!$annex = Class_CodifAnnexe::findByCode($data)) + return; + + $this->_current_reservation + ->setBibliotheque($annex->getLibelle()) + ->setLocationId($annex->getIdBib()); } } diff --git a/library/Class/WebService/SIGB/Pergame/Service.php b/library/Class/WebService/SIGB/Pergame/Service.php index 2ab21393823..8cd985eb4b2 100644 --- a/library/Class/WebService/SIGB/Pergame/Service.php +++ b/library/Class/WebService/SIGB/Pergame/Service.php @@ -109,7 +109,9 @@ class Class_WebService_SIGB_Pergame_Service extends Class_WebService_SIGB_Abstra ->setNoticeOPAC($reservation->getNotice()) ->setBibliotheque($bib ? $bib->getLibelle() : '') ->setRang($reservation->getDynamicRank()) - ->setEtat($reservation->getEtat()); + ->setEtat($reservation->getEtat()) + ->setCodeBarre($reservation->getCodeBarres()) + ->setLocationId($reservation->getIdSite()); if ($sigb_reservation->getEtat() === 'Disponible') $sigb_reservation->setWaitingToBePulled(); diff --git a/library/Class/WebService/SIGB/VSmart/BorrowerReader.php b/library/Class/WebService/SIGB/VSmart/BorrowerReader.php index 21f92cd17b3..0534293b766 100644 --- a/library/Class/WebService/SIGB/VSmart/BorrowerReader.php +++ b/library/Class/WebService/SIGB/VSmart/BorrowerReader.php @@ -56,9 +56,11 @@ class Class_WebService_SIGB_VSmart_BorrowerReader { */ public function getEmprunteurFromXML($xml) { $this->_emprunteur = Class_WebService_SIGB_Emprunteur::nullInstance(); - $this->_xml_parser = Class_WebService_XMLParser::newInstance() - ->setElementHandler($this) - ->parse($xml); + $this->_xml_parser = Class_WebService_XMLParser::newInstance(); + + $this->_xml_parser + ->setElementHandler($this) + ->parse($xml); return $this->_emprunteur; } @@ -198,10 +200,15 @@ class Class_WebService_SIGB_VSmart_BorrowerReader { public function _setExemplaireBib($data) { - if (!$libelle = Class_CodifAnnexe::findLibelleByCode(array_last(explode('/', $data)))) - $libelle = $data; + if (!$annexe = Class_CodifAnnexe::findByCode(array_last(explode('/', $data)))) + return $this->_current_exemplaire_operation->setBibliotheque($data); + + $this->_current_exemplaire_operation + ->setBibliotheque($annexe->getLibelle()); - $this->_current_exemplaire_operation->getExemplaire()->setBibliotheque($libelle); + if ($this->_xml_parser->inParents('Reservation')) + $this->_current_exemplaire_operation + ->setLocationId($annexe->getIdBib()); } } diff --git a/tests/library/Class/WebService/SIGB/OrpheeFixtures.php b/tests/library/Class/WebService/SIGB/OrpheeFixtures.php index a70b3eca6ef..36967eedc27 100644 --- a/tests/library/Class/WebService/SIGB/OrpheeFixtures.php +++ b/tests/library/Class/WebService/SIGB/OrpheeFixtures.php @@ -662,7 +662,7 @@ renouvellement --> <rang>1</rang> <!-- Rang du réservataire --> </document> <document> - <cb></cb> + <cb>678</cb> <no_ntc><![CDATA[975467778]]></no_ntc> <no_dmt><![CDATA[790]]></no_dmt> <date_fin><![CDATA[13/04/2019]]></date_fin> @@ -672,9 +672,10 @@ renouvellement --> <editeur><![CDATA[Gallimard]]></editeur> <lib_sit><![CDATA[affectée]]></lib_sit> <sit><![CDATA[2]]></sit> + <anx_nxt>A3</anx_nxt> </document> <document> - <cb></cb> + <cb>679</cb> <no_ntc><![CDATA[975467779]]></no_ntc> <no_dmt><![CDATA[791]]></no_dmt> <sup><![CDATA[Livre]]></sup> @@ -683,6 +684,7 @@ renouvellement --> <editeur><![CDATA[Gallimard]]></editeur> <lib_sit><![CDATA[affectée]]></lib_sit> <sit><![CDATA[2]]></sit> + <anx_nxt>A3</anx_nxt> </document> </documents> </datas> '; @@ -752,7 +754,7 @@ renouvellement --> </document> <document> - <cb></cb> + <cb>678</cb> <no_ntc><![CDATA[975467778]]></no_ntc> <no_dmt><![CDATA[790]]></no_dmt> <sup><![CDATA[Livre]]></sup> @@ -762,9 +764,10 @@ renouvellement --> <lib_sit><![CDATA[affectée]]></lib_sit> <date_fin><![CDATA[13/04/2019]]></date_fin> <sit><![CDATA[2]]></sit> + <anx_nxt>A3</anx_nxt> </document> <document> - <cb></cb> + <cb>679</cb> <no_ntc><![CDATA[975467779]]></no_ntc> <no_dmt><![CDATA[791]]></no_dmt> <sup><![CDATA[Livre]]></sup> @@ -773,6 +776,7 @@ renouvellement --> <editeur><![CDATA[Gallimard]]></editeur> <lib_sit><![CDATA[affectée]]></lib_sit> <sit><![CDATA[2]]></sit> + <anx_nxt>A3</anx_nxt> </document> </documents> </datas> '; diff --git a/tests/library/Class/WebService/SIGB/OrpheeServiceTest.php b/tests/library/Class/WebService/SIGB/OrpheeServiceTest.php index b81fe8c145c..e9fa5a4818b 100644 --- a/tests/library/Class/WebService/SIGB/OrpheeServiceTest.php +++ b/tests/library/Class/WebService/SIGB/OrpheeServiceTest.php @@ -893,7 +893,8 @@ class OrpheeServiceGetInfoUserCarteHenryDupontTest extends OrpheeServiceTestCase $this->fixture('Class_CodifAnnexe', ['id' => 3, 'id_origine' => 'A3', - 'libelle' => 'Annecy Bonlieu']); + 'libelle' => 'Annecy Bonlieu', + 'id_bib' => 3]); $this->fixture('Class_CodifAnnexe', ['id' => 4, 'id_origine' => 'R', @@ -924,6 +925,12 @@ class OrpheeServiceGetInfoUserCarteHenryDupontTest extends OrpheeServiceTestCase 'titre_principal' => 'Le Chemin', 'auteur_principal' => 'Kyo'])]); + $ex_singe_bleu = $this->fixture( + 'Class_Exemplaire', + ['id' => 33, + 'code_barres' => '678', + 'id_bib' => 3]); + $this->_search_client ->whenCalled('GetInfoUserCarte') @@ -967,6 +974,18 @@ class OrpheeServiceGetInfoUserCarteHenryDupontTest extends OrpheeServiceTestCase } + /** @test */ + public function firstWaitingToBePulledHoldShouldHaveLocationId3ForBonlieu() { + $this->assertEquals(3, $this->emprunteur->getHoldsWaitingToBePulled()[0]->getLocationId()); + } + + + /** @test */ + public function firstWaitingToBePulledHoldItemBarcodeShouldBe678() { + $this->assertEquals(678, $this->emprunteur->getHoldsWaitingToBePulled()[0]->getCodeBarre()); + } + + /** @test */ public function getIdShouldAnswer100753() { $this->assertEquals('100753', $this->emprunteur->getId()); diff --git a/tests/library/Class/WebService/SIGB/PergameTest.php b/tests/library/Class/WebService/SIGB/PergameTest.php index 28733de981d..bea15690a1f 100644 --- a/tests/library/Class/WebService/SIGB/PergameTest.php +++ b/tests/library/Class/WebService/SIGB/PergameTest.php @@ -231,6 +231,13 @@ class PergameServiceGetEmprunteurTest extends PergameTestCase { } + /** @test */ + public function firstReservationCodeBarreShouldBeC25() { + $this->assertEquals('C-25', $this->_first_reservation->getCodeBarre()); + } + + + /** @test */ public function firstReservationRangShouldBeTwo() { $this->assertEquals(2, $this->_first_reservation->getRang()); @@ -248,6 +255,13 @@ class PergameServiceGetEmprunteurTest extends PergameTestCase { $this->assertFalse($this->_first_reservation->isWaitingToBePulled()); } + + /** @test */ + public function firstReservationLocationIdShouldBeTwo() { + $this->assertEquals(2, $this->_first_reservation->getLocationId()); + } + + /** @test */ public function secondReservationEtatShouldBeDisponible() { $this->assertEquals('Disponible', diff --git a/tests/library/Class/WebService/SIGB/VSmartTest.php b/tests/library/Class/WebService/SIGB/VSmartTest.php index 4000fc706df..ff85655aca6 100644 --- a/tests/library/Class/WebService/SIGB/VSmartTest.php +++ b/tests/library/Class/WebService/SIGB/VSmartTest.php @@ -30,7 +30,12 @@ abstract class VSmartServiceTestCase extends ModelTestCase { $this->fixture('Class_CodifAnnexe', ['id' => 2, 'id_origine' => 'AVER', - 'libelle' => 'Avermes']); + 'libelle' => 'Avermes', + 'id_bib' => 3]); + + $this->fixture('Class_Bib', + ['id' => 3, + 'libelle' => 'Bib avermes']); } } @@ -408,6 +413,24 @@ class VSmartServiceWithEmprunteurFranckTest extends VSmartServiceTestCase { } + /** + * @depends reservationAtZero + * @test + */ + public function firstReservationLocationIdShouldBeThree($reservation) { + $this->assertEquals(3, $reservation->getLocationId()); + } + + + /** + * @depends reservationAtZero + * @test + */ + public function firstReservationBarCodeShouldBe32272073521608($reservation) { + $this->assertEquals(32272073521608, $reservation->getCodeBarre()); + } + + /** * @depends reservationAtZero * @test -- GitLab