From 1c55fb8f4e7103719764fdcb9f9000a499f85ca1 Mon Sep 17 00:00:00 2001 From: Alex Arnaud <alex.arnaud@biblibre.com> Date: Thu, 9 Jul 2015 14:08:47 +0200 Subject: [PATCH] dev #24821 - Users are notified of the documents that are waiting to be pulled --- library/Class/Users.php | 14 +++++++++- library/Class/WebService/SIGB/Reservation.php | 2 ++ tests/library/Class/UsersTest.php | 28 ++++++++++++++++++- 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/library/Class/Users.php b/library/Class/Users.php index 74186575e3f..6ae2bb51906 100644 --- a/library/Class/Users.php +++ b/library/Class/Users.php @@ -1129,6 +1129,11 @@ class Class_Users extends Storm_Model_Abstract { } + public function countWaitingToBePulled() { + return count($this->getEmprunteur()->getHoldsWaitingToBePulled()); + } + + public function getFicheSigb($user = null) { if ($user === null) $user = $this; // compatibilité @@ -1547,7 +1552,14 @@ class Class_Users extends Storm_Model_Abstract { '', 'Vous avez %d document en retard.', 'Vous avez %d documents en retard.', - $this->getNbEmpruntsRetard())); + $this->getNbEmpruntsRetard())) + ->_notifyOn($notifiable, + $this->countWaitingToBePulled(), + $this->_plural($this->countWaitingToBePulled(), + '', + 'Vous avez %d document en attente de retrait.', + 'Vous avez %d documents en attente de retrait.', + $this->countWaitingToBePulled())); } diff --git a/library/Class/WebService/SIGB/Reservation.php b/library/Class/WebService/SIGB/Reservation.php index 70d981d4e5b..642faf7b6e7 100644 --- a/library/Class/WebService/SIGB/Reservation.php +++ b/library/Class/WebService/SIGB/Reservation.php @@ -53,6 +53,7 @@ class Class_WebService_SIGB_Reservation extends Class_WebService_SIGB_Exemplaire public function setPickupLocationLabel($pickup_location_label) { $this->pickup_location_label = $pickup_location_label; + return $this; } @@ -75,6 +76,7 @@ class Class_WebService_SIGB_Reservation extends Class_WebService_SIGB_Exemplaire public function setWaitingToBePulled() { $this->waiting_to_be_pulled = true; + return $this; } diff --git a/tests/library/Class/UsersTest.php b/tests/library/Class/UsersTest.php index 13d7f722d01..ea28a37f0ce 100644 --- a/tests/library/Class/UsersTest.php +++ b/tests/library/Class/UsersTest.php @@ -645,6 +645,14 @@ class UsersFicheAbonneTest extends ModelTestCase { ->beAbonneSIGB() ->setDateFin('2020-02-02'); + $this->laurent = Class_Users::getLoader() + ->newInstanceWithId(77) + ->setLogin('laurent') + ->setIdSite(5) + ->setIdabon(124) + ->beAbonneSIGB() + ->setDateFin('2016-12-31'); + $this->pret_potter = Class_WebService_SIGB_Emprunt::newInstanceWithEmptyExemplaire() ->setTitre('Harry Potter') ->setDateRetour('23/05/2022'); @@ -658,18 +666,36 @@ class UsersFicheAbonneTest extends ModelTestCase { ->setDateRetour('23/05/2002'); $this->reservation_alien = Class_WebService_SIGB_Reservation::newInstanceWithEmptyExemplaire()->setTitre('Alien'); + $this->reservation_guerre_et_paix = Class_WebService_SIGB_Reservation::newInstanceWithEmptyExemplaire()->setTitre('Guerre et paix') + ->setPickupLocationLabel('my location') + ->setWaitingToBePulled(); + $this->reservation_autre_histoire = Class_WebService_SIGB_Reservation::newInstanceWithEmptyExemplaire()->setTitre('Une autre histoire') + ->setPickupLocationLabel('other location') + ->setWaitingToBePulled(); $this->webservice ->whenCalled('getEmprunteur') ->with($this->amadou) ->answers(Class_WebService_SIGB_Emprunteur::newInstance() ->empruntsAddAll(array($this->pret_potter, $this->pret_alice, $this->pret_alien)) - ->reservationsAddAll(array($this->reservation_alien))); + ->reservationsAddAll(array($this->reservation_alien))) + ->whenCalled('getEmprunteur') + ->with($this->laurent) + ->answers(Class_WebService_SIGB_Emprunteur::newInstance() + ->reservationsAddAll(array($this->reservation_alien, $this->reservation_guerre_et_paix, $this->reservation_autre_histoire))); } + /** @test */ + public function laurentNotificationShouldContainsVousAvez2DocumentEnAttente() { + $this->laurent->registerNotificationsOn($this->_notifiable); + $this->assertEquals(['Vous avez 2 documents en attente de retrait.'], + $this->_notifications); + } + + /** @test */ public function patrickNotificationsShouldContainsAbonnementExpireDans1Jour() { $this->patrick->setDateFin(date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')))); -- GitLab