use Modern::Perl;
-use C4::Auth qw(haspermission);
+use C4::Auth qw( haspermission );
use C4::Context;
use DateTime;
-use Date::Calc qw(:all);
-use POSIX qw(strftime);
-use C4::Biblio;
-use C4::Log; # logaction
-use C4::Debug;
-use C4::Serials::Frequency;
+use Date::Calc qw(
+ Add_Delta_Days
+ Add_Delta_YM
+ check_date
+ Delta_Days
+ N_Delta_YMD
+ Today
+);
+use POSIX qw( strftime );
+use C4::Biblio qw( GetMarcFromKohaField ModBiblio );
+use C4::Log qw( logaction ); # logaction
+use C4::Serials::Frequency qw( GetSubscriptionFrequency );
use C4::Serials::Numberpattern;
use Koha::AdditionalFieldValues;
-use Koha::DateUtils;
+use Koha::Biblios;
use Koha::Serial;
use Koha::Subscriptions;
use Koha::Subscription::Histories;
use Koha::SharedContent;
-
-use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+use Scalar::Util qw( looks_like_number );
# Define statuses
use constant {
MISSING_LOST
);
+our (@ISA, @EXPORT_OK);
BEGIN {
require Exporter;
@ISA = qw(Exporter);
- @EXPORT = qw(
- &NewSubscription &ModSubscription &DelSubscription
- &GetSubscription &CountSubscriptionFromBiblionumber &GetSubscriptionsFromBiblionumber
- &SearchSubscriptions
- &GetFullSubscriptionsFromBiblionumber &GetFullSubscription &ModSubscriptionHistory
- &HasSubscriptionStrictlyExpired &HasSubscriptionExpired &GetExpirationDate &abouttoexpire
- &GetSubscriptionHistoryFromSubscriptionId
-
- &GetNextSeq &GetSeq &NewIssue &GetSerials
- &GetLatestSerials &ModSerialStatus &GetNextDate &GetSerials2
- &ReNewSubscription &GetLateOrMissingIssues
- &GetSerialInformation &AddItem2Serial
- &PrepareSerialsData &GetNextExpected &ModNextExpected
- &GetPreviousSerialid
-
- &GetSuppliersWithLateIssues
- &getroutinglist &delroutingmember &addroutingmember
- &reorder_members
- &check_routing &updateClaim
- &CountIssues
+ @EXPORT_OK = qw(
+ NewSubscription ModSubscription DelSubscription
+ GetSubscription CountSubscriptionFromBiblionumber GetSubscriptionsFromBiblionumber
+ SearchSubscriptions
+ GetFullSubscriptionsFromBiblionumber GetFullSubscription ModSubscriptionHistory
+ HasSubscriptionStrictlyExpired HasSubscriptionExpired GetExpirationDate abouttoexpire
+ GetFictiveIssueNumber
+ GetSubscriptionHistoryFromSubscriptionId
+
+ GetNextSeq GetSeq NewIssue GetSerials
+ GetLatestSerials ModSerialStatus GetNextDate
+ CloseSubscription ReopenSubscription
+ subscriptionCurrentlyOnOrder
+ can_claim_subscription can_edit_subscription can_show_subscription
+ GetSerials2
+ GetSubscriptionLength ReNewSubscription GetLateOrMissingIssues
+ GetSerialInformation AddItem2Serial
+ PrepareSerialsData GetNextExpected ModNextExpected
+ GetSubscriptionIrregularities
+ GetPreviousSerialid
+
+ GetSuppliersWithLateIssues
+ getroutinglist delroutingmember addroutingmember
+ reorder_members
+ check_routing updateClaim
+ CountIssues
HasItems
- &subscriptionCurrentlyOnOrder
+
+ findSerialsByStatus
);
}
#It is ASSUMED that GetMarcItem ALWAYS WORK...
#Maybe GetMarcItem should return values on failure
- $debug and warn "itemnumber :$itemnum->[0], bibnum :" . $data->{'biblionumber'};
my $itemprocessed = C4::Items::PrepareItemrecordDisplay( $data->{'biblionumber'}, $itemnum->[0], $data );
$itemprocessed->{'itemnumber'} = $itemnum->[0];
$itemprocessed->{'itemid'} = $itemnum->[0];
subscriptionhistory.*,
aqbooksellers.name AS aqbooksellername,
biblio.title AS bibliotitle,
+ biblio.subtitle AS bibliosubtitle,
subscription.biblionumber as bibnum
FROM subscription
LEFT JOIN subscriptionhistory ON subscription.subscriptionid=subscriptionhistory.subscriptionid
WHERE subscription.subscriptionid = ?
);
- $debug and warn "query : $query\nsubsid :$subscriptionid";
my $sth = $dbh->prepare($query);
$sth->execute($subscriptionid);
my $subscription = $sth->fetchrow_hashref;
serial.publisheddatetext,
serial.status,
serial.notes as notes,
- year(IF(serial.publisheddate="00-00-0000",serial.planneddate,serial.publisheddate)) as year,
+ year(IF(serial.publisheddate IS NULL,serial.planneddate,serial.publisheddate)) as year,
aqbooksellers.name as aqbooksellername,
biblio.title as bibliotitle,
subscription.branchcode AS branchcode,
LEFT JOIN biblio on biblio.biblionumber=subscription.biblionumber
WHERE serial.subscriptionid = ?
ORDER BY year DESC,
- IF(serial.publisheddate="00-00-0000",serial.planneddate,serial.publisheddate) DESC,
+ IF(serial.publisheddate IS NULL,serial.planneddate,serial.publisheddate) DESC,
serial.subscriptionid
|;
- $debug and warn "GetFullSubscription query: $query";
my $sth = $dbh->prepare($query);
$sth->execute($subscriptionid);
my $subscriptions = $sth->fetchall_arrayref( {} );
- my $cannotedit = not can_edit_subscription( $subscriptions->[0] ) if scalar @$subscriptions;
- for my $subscription ( @$subscriptions ) {
- $subscription->{cannotedit} = $cannotedit;
+ if (scalar @$subscriptions) {
+ my $cannotedit = not can_edit_subscription( $subscriptions->[0] );
+ for my $subscription ( @$subscriptions ) {
+ $subscription->{cannotedit} = $cannotedit;
+ }
}
+
return $subscriptions;
}
my $year;
my @res;
my $startdate;
- my $aqbooksellername;
- my $bibliotitle;
- my @loopissues;
my $first;
my $previousnote = "";
foreach my $subs (@{$lines}) {
- for my $datefield ( qw(publisheddate planneddate) ) {
- # handle 0000-00-00 dates
- if (defined $subs->{$datefield} and $subs->{$datefield} =~ m/^00/) {
- $subs->{$datefield} = undef;
- }
- }
$subs->{ "status" . $subs->{'status'} } = 1;
if ( grep { $_ == $subs->{status} } ( EXPECTED, LATE, MISSING_STATUSES, CLAIMED ) ) {
$subs->{"checked"} = 1;
$sth->execute($biblionumber);
my @res;
while ( my $subs = $sth->fetchrow_hashref ) {
- $subs->{startdate} = output_pref( { dt => dt_from_string( $subs->{startdate} ), dateonly => 1 } );
- $subs->{histstartdate} = output_pref( { dt => dt_from_string( $subs->{histstartdate} ), dateonly => 1 } );
- if ( defined $subs->{histenddate} ) {
- $subs->{histenddate} = output_pref( { dt => dt_from_string( $subs->{histenddate} ), dateonly => 1 } );
- } else {
- $subs->{histenddate} = "";
- }
- $subs->{opacnote} =~ s/\n/\<br\/\>/g;
- $subs->{missinglist} =~ s/\n/\<br\/\>/g;
- $subs->{recievedlist} =~ s/\n/\<br\/\>/g;
+ $subs->{opacnote} //= "";
$subs->{ "periodicity" . $subs->{periodicity} } = 1;
$subs->{ "numberpattern" . $subs->{numberpattern} } = 1;
$subs->{ "status" . $subs->{'status'} } = 1;
- if (not defined $subs->{enddate} ) {
- $subs->{enddate} = '';
- } else {
- $subs->{enddate} = output_pref( { dt => dt_from_string( $subs->{enddate}), dateonly => 1 } );
- }
$subs->{'abouttoexpire'} = abouttoexpire( $subs->{'subscriptionid'} );
$subs->{'subscriptionexpired'} = HasSubscriptionExpired( $subs->{'subscriptionid'} );
$subs->{cannotedit} = not can_edit_subscription( $subs );
serial.publisheddatetext,
serial.status,
serial.notes as notes,
- year(IF(serial.publisheddate="00-00-0000",serial.planneddate,serial.publisheddate)) as year,
+ year(IF(serial.publisheddate IS NULL,serial.planneddate,serial.publisheddate)) as year,
biblio.title as bibliotitle,
subscription.branchcode AS branchcode,
- subscription.subscriptionid AS subscriptionid
+ subscription.subscriptionid AS subscriptionid,
+ subscription.location AS location
FROM serial
LEFT JOIN subscription ON
(serial.subscriptionid=subscription.subscriptionid)
LEFT JOIN biblio on biblio.biblionumber=subscription.biblionumber
WHERE subscription.biblionumber = ?
ORDER BY year DESC,
- IF(serial.publisheddate="00-00-0000",serial.planneddate,serial.publisheddate) DESC,
+ IF(serial.publisheddate IS NULL,serial.planneddate,serial.publisheddate) DESC,
serial.subscriptionid
|;
my $sth = $dbh->prepare($query);
$sth->execute($biblionumber);
my $subscriptions = $sth->fetchall_arrayref( {} );
- my $cannotedit = not can_edit_subscription( $subscriptions->[0] ) if scalar @$subscriptions;
- for my $subscription ( @$subscriptions ) {
- $subscription->{cannotedit} = $cannotedit;
+ if (scalar @$subscriptions) {
+ my $cannotedit = not can_edit_subscription( $subscriptions->[0] );
+ for my $subscription ( @$subscriptions ) {
+ $subscription->{cannotedit} = $cannotedit;
+ }
}
+
return $subscriptions;
}
my $additional_fields = $args->{additional_fields} // [];
my $matching_record_ids_for_additional_fields = [];
if ( @$additional_fields ) {
- my @subscriptions = Koha::Subscriptions->filter_by_additional_fields($additional_fields);
+ my @subscriptions = Koha::Subscriptions->filter_by_additional_fields($additional_fields)->as_list;
return () unless @subscriptions;
subscription.*,
biblio.notes AS biblionotes,
biblio.title,
+ biblio.subtitle,
biblio.author,
biblio.biblionumber,
aqbooksellers.name AS vendorname,
publisheddatetext, planneddate,notes, routingnotes
FROM serial
WHERE subscriptionid = ? AND status NOT IN ( $statuses )
- ORDER BY IF(publisheddate<>'0000-00-00',publisheddate,planneddate) DESC";
+ ORDER BY IF(publisheddate IS NULL,planneddate,publisheddate) DESC";
my $sth = $dbh->prepare($query);
$sth->execute($subscriptionid);
while ( my $line = $sth->fetchrow_hashref ) {
$line->{ "status" . $line->{status} } = 1; # fills a "statusX" value, used for template status select list
- for my $datefield ( qw( planneddate publisheddate) ) {
- if ($line->{$datefield} && $line->{$datefield}!~m/^00/) {
- $line->{$datefield} = output_pref( { dt => dt_from_string( $line->{$datefield} ), dateonly => 1 } );
- } else {
- $line->{$datefield} = q{};
- }
- }
push @serials, $line;
}
FROM serial
WHERE subscriptionid = ?
AND status IN ( $statuses )
- ORDER BY IF(publisheddate<>'0000-00-00',publisheddate,planneddate) DESC
+ ORDER BY IF(publisheddate IS NULL,planneddate,publisheddate) DESC
";
$sth = $dbh->prepare($query);
$sth->execute($subscriptionid);
while ( ( my $line = $sth->fetchrow_hashref ) && $counter < $count ) {
$counter++;
$line->{ "status" . $line->{status} } = 1; # fills a "statusX" value, used for template status select list
- for my $datefield ( qw( planneddate publisheddate) ) {
- if ($line->{$datefield} && $line->{$datefield}!~m/^00/) {
- $line->{$datefield} = output_pref( { dt => dt_from_string( $line->{$datefield} ), dateonly => 1 } );
- } else {
- $line->{$datefield} = q{};
- }
- }
push @serials, $line;
}
. q|
ORDER BY publisheddate,serialid DESC
|;
- $debug and warn "GetSerials2 query: $query";
my $sth = $dbh->prepare($query);
$sth->execute( $subscription, @$statuses );
my @serials;
while ( my $line = $sth->fetchrow_hashref ) {
$line->{ "status" . $line->{status} } = 1; # fills a "statusX" value, used for template status select list
- # Format dates for display
- for my $datefield ( qw( planneddate publisheddate ) ) {
- if (!defined($line->{$datefield}) || $line->{$datefield} =~m/^00/) {
- $line->{$datefield} = q{};
- }
- else {
- $line->{$datefield} = output_pref( { dt => dt_from_string( $line->{$datefield} ), dateonly => 1 } );
- }
- }
push @serials, $line;
}
return @serials;
my @serials;
while ( my $line = $sth->fetchrow_hashref ) {
$line->{ "status" . $line->{status} } = 1; # fills a "statusX" value, used for template status select list
- $line->{planneddate} = output_pref( { dt => dt_from_string( $line->{planneddate} ), dateonly => 1 } );
- $line->{publisheddate} = output_pref( { dt => dt_from_string( $line->{publisheddate} ), dateonly => 1 } );
push @serials, $line;
}
#It is a usual serial
# 1st, get previous status :
my $dbh = C4::Context->dbh;
- my $query = "SELECT serial.subscriptionid,serial.status,subscription.periodicity
+ my $query = "SELECT serial.subscriptionid,serial.status,subscription.periodicity,serial.routingnotes
FROM serial, subscription
WHERE serial.subscriptionid=subscription.subscriptionid
AND serialid=?";
my $sth = $dbh->prepare($query);
$sth->execute($serialid);
- my ( $subscriptionid, $oldstatus, $periodicity ) = $sth->fetchrow;
+ my ( $subscriptionid, $oldstatus, $periodicity, $routingnotes ) = $sth->fetchrow;
my $frequency = GetSubscriptionFrequency($periodicity);
# change status & update subscriptionhistory
if ( $status == DELETED ) {
DelIssue( { 'serialid' => $serialid, 'subscriptionid' => $subscriptionid, 'serialseq' => $serialseq } );
} else {
-
my $query = '
UPDATE serial
SET serialseq = ?, publisheddate = ?, publisheddatetext = ?,
- planneddate = ?, status = ?, notes = ?
+ planneddate = ?, status = ?, notes = ?, routingnotes = ?
WHERE serialid = ?
';
$sth = $dbh->prepare($query);
$sth->execute( $serialseq, $publisheddate, $publisheddatetext,
- $planneddate, $status, $notes, $serialid );
+ $planneddate, $status, $notes, $routingnotes, $serialid );
$query = "SELECT * FROM subscription WHERE subscriptionid = ?";
$sth = $dbh->prepare($query);
$sth->execute($subscriptionid);
my ( $missinglist, $recievedlist ) = $sth->fetchrow;
if ( $status == ARRIVED || ($oldstatus == ARRIVED && $status != ARRIVED) ) {
- $recievedlist .= "; $serialseq"
- if ($recievedlist !~ /(^|;)\s*$serialseq(?=;|$)/);
+ $recievedlist = _handle_seqno($serialseq, $recievedlist);
}
# in case serial has been previously marked as missing
if (grep /$status/, (EXPECTED, ARRIVED, LATE, CLAIMED)) {
- $missinglist=~ s/(^|;)\s*$serialseq(?=;|$)//g;
+ $missinglist = _handle_seqno($serialseq, $missinglist, 'REMOVE');
}
- $missinglist .= "; $serialseq"
- if ( ( grep { $_ == $status } ( MISSING_STATUSES ) ) && ( $missinglist !~/(^|;)\s*$serialseq(?=;|$)/ ) );
- $missinglist .= "; not issued $serialseq"
- if ( $status == NOT_ISSUED && $missinglist !~ /(^|;)\s*$serialseq(?=;|$)/ );
+ $missinglist = _handle_seqno($serialseq, $missinglist) if grep { $_ == $status } MISSING_STATUSES;
+ $missinglist .= "; not issued $serialseq" if $status == NOT_ISSUED and not _handle_seqno($serialseq, $missinglist, 'CHECK');
$query = "UPDATE subscriptionhistory SET recievedlist=?, missinglist=? WHERE subscriptionid=?";
$sth = $dbh->prepare($query);
WHERE subscriptionid = ?";
$sth = $dbh->prepare($query);
$sth->execute( $newlastvalue1, $newlastvalue2, $newlastvalue3, $newinnerloop1, $newinnerloop2, $newinnerloop3, $subscriptionid );
-
- NewIssue( $newserialseq, $subscriptionid, $subscription->{'biblionumber'}, 1, $nextpubdate, $nextpubdate );
-
+ my $newnote = C4::Context->preference('PreserveSerialNotes') ? $notes : "";
+ NewIssue( $newserialseq, $subscriptionid, $subscription->{'biblionumber'}, 1, $nextpubdate, $nextpubdate, undef, $newnote, $routingnotes );
# check if an alert must be sent... (= a letter is defined & status became "arrived"
if ( $subscription->{letter} && $status == ARRIVED && $oldstatus != ARRIVED ) {
require C4::Letters;
return;
}
+sub _handle_seqno {
+# Adds or removes seqno from list when needed; returns list
+# Or checks and returns true when present
+
+ my ( $seq, $list, $op ) = @_; # op = ADD | REMOVE | CHECK (default: ADD)
+ my $seq_r = $seq;
+ $seq_r =~ s/([()])/\\$1/g; # Adjust disturbing parentheses for regex, maybe extend in future
+
+ if( !$op or $op eq 'ADD' ) {
+ $list .= "; $seq" if $list !~ /(^|;)\s*$seq_r(?=;|$)/;
+ } elsif( $op eq 'REMOVE' ) {
+ $list=~ s/(^|;)\s*(not issued )?$seq_r(?=;|$)//g;
+ } else { # CHECK
+ return $list =~ /(^|;)\s*$seq_r(?=;|$)/ ? 1 : q{};
+ }
+ return $list;
+}
+
=head2 GetNextExpected
$nextexpected = GetNextExpected($subscriptionid)
$nextissue = $sth->fetchrow_hashref;
}
foreach(qw/planneddate publisheddate/) {
- if ( !defined $nextissue->{$_} ) {
- # or should this default to 1st Jan ???
- $nextissue->{$_} = strftime( '%Y-%m-%d', localtime );
- }
- $nextissue->{$_} = ($nextissue->{$_} ne '0000-00-00')
- ? $nextissue->{$_}
- : undef;
+ # or should this default to 1st Jan ???
+ $nextissue->{$_} //= strftime( '%Y-%m-%d', localtime );
}
return $nextissue;
$biblionumber, $callnumber, $notes, $letter, $manualhistory,
$internalnotes, $serialsadditems, $staffdisplaycount, $opacdisplaycount,
$graceperiod, $location, $enddate, $subscriptionid, $skip_serialseq,
- $itemtype, $previousitemtype, $mana_id
+ $itemtype, $previousitemtype, $mana_id, $ccode
) = @_;
- my $dbh = C4::Context->dbh;
- my $query = "UPDATE subscription
- SET librarian=?, branchcode=?, aqbooksellerid=?, cost=?, aqbudgetid=?,
- startdate=?, periodicity=?, firstacquidate=?, irregularity=?,
- numberpattern=?, locale=?, numberlength=?, weeklength=?, monthlength=?,
- lastvalue1=?, innerloop1=?, lastvalue2=?, innerloop2=?,
- lastvalue3=?, innerloop3=?, status=?, biblionumber=?,
- callnumber=?, notes=?, letter=?, manualhistory=?,
- internalnotes=?, serialsadditems=?, staffdisplaycount=?,
- opacdisplaycount=?, graceperiod=?, location = ?, enddate=?,
- skip_serialseq=?, itemtype=?, previousitemtype=?, mana_id=?
- WHERE subscriptionid = ?";
-
- my $sth = $dbh->prepare($query);
- $sth->execute(
- $auser, $branchcode, $aqbooksellerid, $cost,
- $aqbudgetid, $startdate, $periodicity, $firstacquidate,
- $irregularity, $numberpattern, $locale, $numberlength,
- $weeklength, $monthlength, $lastvalue1, $innerloop1,
- $lastvalue2, $innerloop2, $lastvalue3, $innerloop3,
- $status, $biblionumber, $callnumber, $notes,
- $letter, ($manualhistory ? $manualhistory : 0),
- $internalnotes, $serialsadditems, $staffdisplaycount, $opacdisplaycount,
- $graceperiod, $location, $enddate, $skip_serialseq,
- $itemtype, $previousitemtype, $mana_id,
- $subscriptionid
- );
- my $rows = $sth->rows;
+ my $subscription = Koha::Subscriptions->find($subscriptionid);
+ $subscription->set(
+ {
+ librarian => $auser,
+ branchcode => $branchcode,
+ aqbooksellerid => $aqbooksellerid,
+ cost => $cost,
+ aqbudgetid => $aqbudgetid,
+ biblionumber => $biblionumber,
+ startdate => $startdate,
+ periodicity => $periodicity,
+ numberlength => $numberlength,
+ weeklength => $weeklength,
+ monthlength => $monthlength,
+ lastvalue1 => $lastvalue1,
+ innerloop1 => $innerloop1,
+ lastvalue2 => $lastvalue2,
+ innerloop2 => $innerloop2,
+ lastvalue3 => $lastvalue3,
+ innerloop3 => $innerloop3,
+ status => $status,
+ notes => $notes,
+ letter => $letter,
+ firstacquidate => $firstacquidate,
+ irregularity => $irregularity,
+ numberpattern => $numberpattern,
+ locale => $locale,
+ callnumber => $callnumber,
+ manualhistory => $manualhistory,
+ internalnotes => $internalnotes,
+ serialsadditems => $serialsadditems,
+ staffdisplaycount => $staffdisplaycount,
+ opacdisplaycount => $opacdisplaycount,
+ graceperiod => $graceperiod,
+ location => $location,
+ enddate => $enddate,
+ skip_serialseq => $skip_serialseq,
+ itemtype => $itemtype,
+ previousitemtype => $previousitemtype,
+ mana_id => $mana_id,
+ ccode => $ccode,
+ }
+ )->store;
+ # FIXME Must be $subscription->serials
+ # FIXME We shouldn't need serial.subscription (instead use serial->subscription->biblionumber)
+ Koha::Serials->search({ subscriptionid => $subscriptionid })->update({ biblionumber => $biblionumber });
logaction( "SERIAL", "MODIFY", $subscriptionid, "" ) if C4::Context->preference("SubscriptionLog");
- return $rows;
+
+ $subscription->discard_changes;
+ return $subscription;
}
=head2 NewSubscription
$innerloop3, $status, $notes, $letter, $firstacquidate, $irregularity,
$numberpattern, $locale, $callnumber, $manualhistory, $internalnotes,
$serialsadditems, $staffdisplaycount, $opacdisplaycount, $graceperiod,
- $location, $enddate, $skip_serialseq, $itemtype, $previousitemtype, $mana_id
+ $location, $enddate, $skip_serialseq, $itemtype, $previousitemtype, $mana_id, $ccode
) = @_;
my $dbh = C4::Context->dbh;
- $_ ||= undef # Set to undef for integer values, not empty string
- for (
- $aqbooksellerid, $lastvalue1, $innerloop1, $lastvalue2,
- $innerloop2, $lastvalue3, $innerloop3,
- );
- #save subscription (insert into database)
- my $query = qq|
- INSERT INTO subscription
- (librarian, branchcode, aqbooksellerid, cost, aqbudgetid,
- biblionumber, startdate, periodicity, numberlength, weeklength,
- monthlength, lastvalue1, innerloop1, lastvalue2, innerloop2,
- lastvalue3, innerloop3, status, notes, letter, firstacquidate,
- irregularity, numberpattern, locale, callnumber,
- manualhistory, internalnotes, serialsadditems, staffdisplaycount,
- opacdisplaycount, graceperiod, location, enddate, skip_serialseq,
- itemtype, previousitemtype, mana_id)
- VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?)
- |;
- my $sth = $dbh->prepare($query);
- $sth->execute(
- $auser, $branchcode, $aqbooksellerid, $cost, $aqbudgetid, $biblionumber,
- $startdate, $periodicity, $numberlength, $weeklength,
- $monthlength, $lastvalue1, $innerloop1, $lastvalue2, $innerloop2,
- $lastvalue3, $innerloop3, $status, $notes, $letter,
- $firstacquidate, $irregularity, $numberpattern, $locale, $callnumber,
- $manualhistory, $internalnotes, $serialsadditems, $staffdisplaycount,
- $opacdisplaycount, $graceperiod, $location, $enddate, $skip_serialseq,
- $itemtype, $previousitemtype, $mana_id
- );
-
- my $subscriptionid = $dbh->{'mysql_insertid'};
+ my $subscription = Koha::Subscription->new(
+ {
+ librarian => $auser,
+ branchcode => $branchcode,
+ aqbooksellerid => $aqbooksellerid,
+ cost => $cost,
+ aqbudgetid => $aqbudgetid,
+ biblionumber => $biblionumber,
+ startdate => $startdate,
+ periodicity => $periodicity,
+ numberlength => $numberlength,
+ weeklength => $weeklength,
+ monthlength => $monthlength,
+ lastvalue1 => $lastvalue1,
+ innerloop1 => $innerloop1,
+ lastvalue2 => $lastvalue2,
+ innerloop2 => $innerloop2,
+ lastvalue3 => $lastvalue3,
+ innerloop3 => $innerloop3,
+ status => $status,
+ notes => $notes,
+ letter => $letter,
+ firstacquidate => $firstacquidate,
+ irregularity => $irregularity,
+ numberpattern => $numberpattern,
+ locale => $locale,
+ callnumber => $callnumber,
+ manualhistory => $manualhistory,
+ internalnotes => $internalnotes,
+ serialsadditems => $serialsadditems,
+ staffdisplaycount => $staffdisplaycount,
+ opacdisplaycount => $opacdisplaycount,
+ graceperiod => $graceperiod,
+ location => $location,
+ enddate => $enddate,
+ skip_serialseq => $skip_serialseq,
+ itemtype => $itemtype,
+ previousitemtype => $previousitemtype,
+ mana_id => $mana_id,
+ ccode => $ccode
+ }
+ )->store;
+ $subscription->discard_changes;
+ my $subscriptionid = $subscription->subscriptionid;
+ my ( $query, $sth );
unless ($enddate) {
$enddate = GetExpirationDate( $subscriptionid, $startdate );
$query = qq|
$sth->execute( $biblionumber, $subscriptionid, $startdate);
# reread subscription to get a hash (for calculation of the 1st issue number)
- my $subscription = GetSubscription($subscriptionid);
+ $subscription = GetSubscription($subscriptionid); # We should not do that
my $pattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($subscription->{numberpattern});
# calculate issue number
#set serial flag on biblio if not already set.
my $biblio = Koha::Biblios->find( $biblionumber );
if ( $biblio and !$biblio->serial ) {
- my $record = GetMarcBiblio({ biblionumber => $biblionumber });
- my ( $tag, $subf ) = GetMarcFromKohaField( 'biblio.serial', $biblio->frameworkcode );
+ my $record = $biblio->metadata->record;
+ my ( $tag, $subf ) = GetMarcFromKohaField( 'biblio.serial' );
if ($tag) {
eval { $record->field($tag)->update( $subf => 1 ); };
}
return $subscriptionid;
}
+=head2 GetSubscriptionLength
+
+my ($numberlength, $weeklength, $monthlength) = GetSubscriptionLength( $subtype, $sublength );
+
+This function calculates the subscription length.
+
+=cut
+
+sub GetSubscriptionLength {
+ my ($subtype, $length) = @_;
+
+ return unless looks_like_number($length);
+
+ return
+ (
+ $subtype eq 'issues' ? $length : 0,
+ $subtype eq 'weeks' ? $length : 0,
+ $subtype eq 'months' ? $length : 0,
+ );
+}
+
+
=head2 ReNewSubscription
-ReNewSubscription($subscriptionid,$user,$startdate,$numberlength,$weeklength,$monthlength,$note)
+ReNewSubscription($params);
+
+$params is a hashref with the following keys: subscriptionid, user, startdate, numberlength, weeklength, monthlength, note, branchcode
this function renew a subscription with values given on input args.
=cut
sub ReNewSubscription {
- my ( $subscriptionid, $user, $startdate, $numberlength, $weeklength, $monthlength, $note ) = @_;
+ my ( $params ) = @_;
+ my $subscriptionid = $params->{subscriptionid};
+ my $user = $params->{user};
+ my $startdate = $params->{startdate};
+ my $numberlength = $params->{numberlength};
+ my $weeklength = $params->{weeklength};
+ my $monthlength = $params->{monthlength};
+ my $note = $params->{note};
+ my $branchcode = $params->{branchcode};
+
my $dbh = C4::Context->dbh;
my $subscription = GetSubscription($subscriptionid);
my $query = qq|
'title' => $subscription->{bibliotitle},
'author' => $biblio->{author},
'publishercode' => $biblio->{publishercode},
- 'note' => $biblio->{note},
- 'biblionumber' => $subscription->{biblionumber}
+ 'note' => $note,
+ 'biblionumber' => $subscription->{biblionumber},
+ 'branchcode' => $branchcode,
}
);
}
$sth = $dbh->prepare($query);
$sth->execute( $startdate, $numberlength, $weeklength, $monthlength, $subscriptionid );
my $enddate = GetExpirationDate($subscriptionid);
- $debug && warn "enddate :$enddate";
$query = qq|
UPDATE subscription
SET enddate=?
=head2 NewIssue
-NewIssue($serialseq,$subscriptionid,$biblionumber,$status, $planneddate, $publisheddate, $notes)
+NewIssue($serialseq,$subscriptionid,$biblionumber,$status, $planneddate, $publisheddate, $notes, $routingnotes)
Create a new issue stored on the database.
Note : we have to update the recievedlist and missinglist on subscriptionhistory for this subscription.
sub NewIssue {
my ( $serialseq, $subscriptionid, $biblionumber, $status, $planneddate,
- $publisheddate, $publisheddatetext, $notes ) = @_;
+ $publisheddate, $publisheddatetext, $notes, $routingnotes ) = @_;
### FIXME biblionumber CAN be provided by subscriptionid. So Do we STILL NEED IT ?
return unless ($subscriptionid);
publisheddate => $publisheddate,
publisheddatetext => $publisheddatetext,
notes => $notes,
+ routingnotes => $routingnotes
}
)->store();
### Would use substr and index But be careful to previous presence of ()
$recievedlist .= "; $serialseq" unless ( index( $recievedlist, $serialseq ) > 0 );
}
- if ( grep { /^$status$/ } (MISSING_STATUSES) ) {
+ if ( grep { $_ eq $status } (MISSING_STATUSES) ) {
$missinglist .= "; $serialseq" unless ( index( $missinglist, $serialseq ) > 0 );
}
my ($subscriptionid) = @_;
my $dbh = C4::Context->dbh;
$dbh->do("DELETE FROM subscription WHERE subscriptionid=?", undef, $subscriptionid);
- $dbh->do("DELETE FROM subscriptionhistory WHERE subscriptionid=?", undef, $subscriptionid);
- $dbh->do("DELETE FROM serial WHERE subscriptionid=?", undef, $subscriptionid);
Koha::AdditionalFieldValues->search({
'field.tablename' => 'subscription',
serialid, aqbooksellerid, name,
biblio.title, biblioitems.issn, planneddate, serialseq,
serial.status, serial.subscriptionid, claimdate, claims_count,
- subscription.branchcode
+ subscription.branchcode, serial.publisheddate
FROM serial
LEFT JOIN subscription ON serial.subscriptionid=subscription.subscriptionid
LEFT JOIN biblio ON subscription.biblionumber=biblio.biblionumber
serialid, aqbooksellerid, name,
biblio.title, planneddate, serialseq,
serial.status, serial.subscriptionid, claimdate, claims_count,
- subscription.branchcode
+ subscription.branchcode, serial.publisheddate
FROM serial
LEFT JOIN subscription ON serial.subscriptionid=subscription.subscriptionid
LEFT JOIN biblio ON subscription.biblionumber=biblio.biblionumber
$sth->execute( EXPECTED, LATE, CLAIMED );
my @issuelist;
while ( my $line = $sth->fetchrow_hashref ) {
-
- if ($line->{planneddate} && $line->{planneddate} !~/^0+\-/) {
- $line->{planneddateISO} = $line->{planneddate};
- $line->{planneddate} = output_pref( { dt => dt_from_string( $line->{"planneddate"} ), dateonly => 1 } );
- }
- if ($line->{claimdate} && $line->{claimdate} !~/^0+\-/) {
- $line->{claimdateISO} = $line->{claimdate};
- $line->{claimdate} = output_pref( { dt => dt_from_string( $line->{"claimdate"} ), dateonly => 1 } );
- }
$line->{"status".$line->{status}} = 1;
my $subscription_object = Koha::Subscriptions->find($line->{subscriptionid});
}
}
- } elsif ($subscription->{numberlength}>0) {
+ } elsif ( $subscription->{numberlength} && $subscription->{numberlength}>0) {
return (countissuesfrom($subscriptionid,$subscription->{'startdate'}) >=$subscription->{numberlength}-1);
}
locale => $locale,
);
$string = $num_type =~ /^monthname$/
- ? $dt->strftime("%B")
+ ? $dt->format_cldr( "LLLL" )
: $dt->strftime("%b");
} elsif ( $num_type =~ /^season$/ ) {
my @seasons= qw( Spring Summer Fall Winter );