From 9c3908a18c28967373e24ad716c242bb946b322e Mon Sep 17 00:00:00 2001
From: Kyle M Hall <kyle@bywatersolutions.com>
Date: Thu, 5 Jun 2014 11:26:40 -0400
Subject: [PATCH] Bug 12375 [4] - Replace use of DBI with Koha::Database in C4::Serials::NewIssue

Currently, all serials enumeration data is stored in conglomerated
fashion in serial.serialseq. This makes it extremely difficult to do any
reporting based on the individual sequence values due to this fact. In
addition to the formatted version of the sequence, we should be storing
the individual values as well.

Test Plan:
1) Apply this patch
2) Run updatedatabase.pl
3) Create a new subscription, and add serials to it. The new x y and
   z fields should be populated with the same data the replaces {X} {Y} and
   {Z} in the enumeration field.
4) Inspect some existing serials. The update script will have made a
   best effort to recover the existing enumeration data to store in
   separate fields.

Signed-off-by: Paul Landers <paul.landers@ttuhsc.edu>
---
 C4/Serials.pm |   37 ++++++++++++++++---------------------
 1 files changed, 16 insertions(+), 21 deletions(-)

diff --git a/C4/Serials.pm b/C4/Serials.pm
index 45fea56..7ce3888 100644
--- a/C4/Serials.pm
+++ b/C4/Serials.pm
@@ -1630,36 +1630,31 @@ sub NewIssue {
         }
     );
 
-    my $dbh   = C4::Context->dbh;
     my $serialid = $serial->serialid();
 
-    my $query = qq|
-        SELECT missinglist,recievedlist
-        FROM   subscriptionhistory
-        WHERE  subscriptionid=?
-    |;
-    my $sth = $dbh->prepare($query);
-    $sth->execute($subscriptionid);
-    my ( $missinglist, $recievedlist ) = $sth->fetchrow;
+    my $subscription_history = $schema->resultset('Subscriptionhistory')->find($subscriptionid);
+    my $missinglist = $subscription_history->missinglist();
+    my $recievedlist = $subscription_history->recievedlist();
 
     if ( $status == 2 ) {
-      ### TODO Add a feature that improves recognition and description.
-      ### As such count (serialseq) i.e. : N18,2(N19),N20
-      ### Would use substr and index But be careful to previous presence of ()
-        $recievedlist .= "; $serialseq" unless (index($recievedlist,$serialseq)>0);
+        ### TODO Add a feature that improves recognition and description.
+        ### As such count (serialseq) i.e. : N18,2(N19),N20
+        ### Would use substr and index But be careful to previous presence of ()
+        $recievedlist .= "; $serialseq"
+          unless ( index( $recievedlist, $serialseq ) > 0 );
     }
     if ( $status == 4 ) {
-        $missinglist .= "; $serialseq" unless (index($missinglist,$serialseq)>0);
+        $missinglist .= "; $serialseq"
+          unless ( index( $missinglist, $serialseq ) > 0 );
     }
-    $query = qq|
-        UPDATE subscriptionhistory
-        SET    recievedlist=?, missinglist=?
-        WHERE  subscriptionid=?
-    |;
-    $sth = $dbh->prepare($query);
+
     $recievedlist =~ s/^; //;
     $missinglist  =~ s/^; //;
-    $sth->execute( $recievedlist, $missinglist, $subscriptionid );
+
+    $subscription_history->recievedlist($recievedlist);
+    $subscription_history->missinglist($missinglist);
+    $subscription_history->update();
+
     return $serialid;
 }
 
-- 
1.7.2.5