Bug 12178: Update serial status to "claimed" when exporting to CSV
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Tue, 28 Apr 2015 15:00:44 +0000 (17:00 +0200)
committerKyle M Hall <kyle@bywatersolutions.com>
Fri, 15 Jul 2016 14:07:40 +0000 (14:07 +0000)
On the same way as late issues, the serial status should be updated to
'claimed' when the issues as exported as csv.

QA note: The updateClaim and UpdateClaimdateIssues subroutine did almost the
same thing, I kick the second on off to centralize the code.

Test plan:
1/ Export some late issues as CSV (serials/claims.pl).
2/ Refresh the page (the export does not do it) and confirm that the
status, the claim date and the claim count have been updated.
3/ Select some others issues, select a notice and send the notification.
Confirm that the behavior is the same.

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

C4/Serials.pm
serials/claims.pl
t/db_dependent/Serials.t
t/db_dependent/Serials/Claims.t

index 02349a4..35d62c9 100644 (file)
@@ -77,7 +77,6 @@ BEGIN {
       &GetSerialInformation                   &AddItem2Serial
       &PrepareSerialsData &GetNextExpected    &ModNextExpected
 
-      &UpdateClaimdateIssues
       &GetSuppliersWithLateIssues             &getsupplierbyserialid
       &GetDistributedTo   &SetDistributedTo
       &getroutinglist     &delroutingmember   &addroutingmember
@@ -261,34 +260,6 @@ sub AddItem2Serial {
     return $rq->rows;
 }
 
-=head2 UpdateClaimdateIssues
-
-UpdateClaimdateIssues($serialids,[$date]);
-
-Update Claimdate for issues in @$serialids list with date $date
-(Take Today if none)
-
-=cut
-
-sub UpdateClaimdateIssues {
-    my ( $serialids, $date ) = @_;
-
-    return unless ($serialids);
-
-    my $dbh = C4::Context->dbh;
-    $date = strftime( "%Y-%m-%d", localtime ) unless ($date);
-    my $query = "
-        UPDATE serial
-        SET claimdate = ?,
-            status = ?,
-            claims_count = claims_count + 1
-        WHERE  serialid in (" . join( ",", map { '?' } @$serialids ) . ")
-    ";
-    my $rq = $dbh->prepare($query);
-    $rq->execute($date, CLAIMED, @$serialids);
-    return $rq->rows;
-}
-
 =head2 GetSubscription
 
 $subs = GetSubscription($subscriptionid)
@@ -1895,15 +1866,19 @@ called from claims.pl file
 =cut
 
 sub updateClaim {
-    my ($serialid) = @_;
-    my $dbh        = C4::Context->dbh;
-    $dbh->do(q|
+    my ($serialids) = @_;
+    return unless $serialids;
+    unless ( ref $serialids ) {
+        $serialids = [ $serialids ];
+    }
+    my $dbh = C4::Context->dbh;
+    return $dbh->do(q|
         UPDATE serial
         SET claimdate = NOW(),
-            claims_count = claims_count + 1
-        WHERE serialid = ?
-    |, {}, $serialid );
-    return;
+            claims_count = claims_count + 1,
+            status = ?
+        WHERE serialid in (| . join( q|,|, (q|?|) x @$serialids ) . q|)|,
+        {}, CLAIMED, @$serialids );
 }
 
 =head2 getsupplierbyserialid
index 1a0c5cf..3c5f738 100755 (executable)
@@ -73,7 +73,7 @@ if (@serialnums) { # i.e. they have been flagged to generate claims
     eval {
         $err = SendAlerts('claimissues',\@serialnums,$input->param("letter_code"));
         if ( not ref $err or not exists $err->{error} ) {
-           UpdateClaimdateIssues(\@serialnums);
+            C4::Serials::updateClaim( \@serialnums );
         }
     };
     if ( $@ ) {
index b053681..a144ec9 100755 (executable)
@@ -15,7 +15,7 @@ use C4::Bookseller;
 use C4::Biblio;
 use C4::Budgets;
 use Koha::DateUtils;
-use Test::More tests => 48;
+use Test::More tests => 46;
 
 BEGIN {
     use_ok('C4::Serials');
@@ -151,7 +151,6 @@ if ($old_frequency) {
 
 # Test calling subs without parameters
 is(C4::Serials::AddItem2Serial(), undef, 'test adding item to serial');
-is(C4::Serials::UpdateClaimdateIssues(), undef, 'test updating claim date');
 is(C4::Serials::GetFullSubscription(), undef, 'test getting full subscription');
 is(C4::Serials::PrepareSerialsData(), undef, 'test preparing serial data');
 is(C4::Serials::GetSubscriptionsFromBiblionumber(), undef, 'test getting subscriptions form biblio number');
@@ -182,8 +181,6 @@ is(C4::Serials::HasSubscriptionExpired(), undef, 'test if the subscriptions has
 
 is(C4::Serials::GetLateOrMissingIssues(), undef, 'test getting last or missing issues');
 
-is(C4::Serials::updateClaim(),undef, 'test updating claim');
-
 is(C4::Serials::getsupplierbyserialid(),undef, 'test getting supplier idea');
 
 is(C4::Serials::check_routing(), undef, 'test checking route');
index 622f910..b887d78 100644 (file)
@@ -1,5 +1,5 @@
 use Modern::Perl;
-use Test::More tests => 13;
+use Test::More tests => 17;
 
 use C4::Acquisition;
 use C4::Bookseller;
@@ -135,6 +135,7 @@ is( exists $late_or_missing_issues[0]->{claimdate}, 1, 'GetLateOrMissingIssues r
 is( exists $late_or_missing_issues[0]->{claims_count}, 1, 'GetLateOrMissingIssues returns claims_count' );
 is( $late_or_missing_issues[0]->{claims_count}, 0, 'The issues should not habe been claimed yet' );
 
+is( updateClaim(), undef, 'updateClaim should return undef if not param passed' );
 my $serialid_to_claim = $late_or_missing_issues[0]->{serialid};
 updateClaim( $serialid_to_claim );
 
@@ -144,6 +145,17 @@ is( scalar(@late_or_missing_issues), 2, 'supplier 2 should have 2 issues in late
 my ( $serial_claimed ) = grep { ($_->{serialid} == $serialid_to_claim) ? $_ : () } @late_or_missing_issues;
 is( $serial_claimed->{claims_count}, 1, 'The serial should have been claimed' );
 
+my @serials_to_claim = map { $_->{serialid} } @late_or_missing_issues;
+updateClaim( \@serials_to_claim );
+@late_or_missing_issues = GetLateOrMissingIssues( $supplier_id2);
+is( scalar(@late_or_missing_issues), 2, 'supplier 2 should have 2 issues in late' );
+
+( $serial_claimed ) = grep { ($_->{serialid} == $serials_to_claim[0]) ? $_ : () } @late_or_missing_issues;
+is( $serial_claimed->{claims_count}, 2, 'The serial should have been claimed' );
+( $serial_claimed ) = grep { ($_->{serialid} == $serials_to_claim[1]) ? $_ : () } @late_or_missing_issues;
+is( $serial_claimed->{claims_count}, 1, 'The serial should have been claimed' );
+
+
 my $today = output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
 # FIXME: This test should pass. The GetLateOrMissingIssues should not deal with date format!
 #is( $serial_claimed->{claimdate}, $today, 'The serial should have been claimed today' );