use C4::Debug;
use C4::Serials::Frequency;
use C4::Serials::Numberpattern;
-use Koha::AdditionalField;
+use Koha::AdditionalFieldValues;
use Koha::DateUtils;
use Koha::Serial;
use Koha::Subscriptions;
use Koha::Subscription::Histories;
+use Koha::SharedContent;
use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
&GetPreviousSerialid
&GetSuppliersWithLateIssues
- &GetDistributedTo &SetDistributedTo
&getroutinglist &delroutingmember &addroutingmember
&reorder_members
&check_routing &updateClaim
&CountIssues
HasItems
- &GetSubscriptionsFromBorrower
&subscriptionCurrentlyOnOrder
);
return $results;
}
-=head2 GetSerialStatusFromSerialId
-
-$sth = GetSerialStatusFromSerialId();
-this function returns a statement handle
-After this function, don't forget to execute it by using $sth->execute($serialid)
-return :
-$sth = $dbh->prepare($query).
-
-=cut
-
-sub GetSerialStatusFromSerialId {
- my $dbh = C4::Context->dbh;
- my $query = qq|
- SELECT status
- FROM serial
- WHERE serialid = ?
- |;
- return $dbh->prepare($query);
-}
-
=head2 GetSerialInformation
$data = GetSerialInformation($serialid);
$sth->execute($subscriptionid);
my $subscription = $sth->fetchrow_hashref;
+ return unless $subscription;
+
$subscription->{cannotedit} = not can_edit_subscription( $subscription );
- # Add additional fields to the subscription into a new key "additional_fields"
- my $additional_field_values = Koha::AdditionalField->fetch_all_values({
- tablename => 'subscription',
- record_id => $subscriptionid,
- });
- $subscription->{additional_fields} = $additional_field_values->{$subscriptionid};
+ if ( my $mana_id = $subscription->{mana_id} ) {
+ my $mana_subscription = Koha::SharedContent::get_entity_by_id(
+ 'subscription', $mana_id, {usecomments => 1});
+ $subscription->{comments} = $mana_subscription->{data}->{comments};
+ }
return $subscription;
}
my $additional_fields = $args->{additional_fields} // [];
my $matching_record_ids_for_additional_fields = [];
if ( @$additional_fields ) {
- $matching_record_ids_for_additional_fields = Koha::AdditionalField->get_matching_record_ids({
- fields => $additional_fields,
- tablename => 'subscription',
- exact_match => 0,
- });
- return () unless @$matching_record_ids_for_additional_fields;
+ my @subscriptions = Koha::Subscriptions->filter_by_additional_fields($additional_fields);
+
+ return () unless @subscriptions;
+
+ $matching_record_ids_for_additional_fields = [ map {
+ $_->subscriptionid
+ } @subscriptions ];
}
my $query = q|
$subscription->{cannotedit} = not can_edit_subscription( $subscription );
$subscription->{cannotdisplay} = not can_show_subscription( $subscription );
- my $additional_field_values = Koha::AdditionalField->fetch_all_values({
- record_id => $subscription->{subscriptionid},
- tablename => 'subscription'
- });
- $subscription->{additional_fields} = $additional_field_values->{$subscription->{subscriptionid}};
+ my $subscription_object = Koha::Subscriptions->find($subscription->{subscriptionid});
+ $subscription->{additional_fields} = { map { $_->field->name => $_->value }
+ $subscription_object->additional_field_values->as_list };
+
}
return @$results;
return $return;
}
-
-
-=head2 GetDistributedTo
-
-$distributedto=GetDistributedTo($subscriptionid)
-This function returns the field distributedto for the subscription matching subscriptionid
-
-=cut
-
-sub GetDistributedTo {
- my $dbh = C4::Context->dbh;
- my $distributedto;
- my ($subscriptionid) = @_;
-
- return unless ($subscriptionid);
-
- my $query = "SELECT distributedto FROM subscription WHERE subscriptionid=?";
- my $sth = $dbh->prepare($query);
- $sth->execute($subscriptionid);
- return ($distributedto) = $sth->fetchrow;
-}
-
=head2 GetNextSeq
my (
$nextseq, $newlastvalue1, $newlastvalue2, $newlastvalue3,
$newinnerloop1, $newinnerloop2, $newinnerloop3
- ) = GetNextSeq( $subscription, $pattern, $planneddate );
+ ) = GetNextSeq( $subscription, $pattern, $frequency, $planneddate );
$subscription is a hashref containing all the attributes of the table
'subscription'.
$pattern is a hashref containing all the attributes of the table
'subscription_numberpatterns'.
+$frequency is a hashref containing all the attributes of the table 'subscription_frequencies'
$planneddate is a date string in iso format.
This function get the next issue for the subscription given on input arg
=cut
sub GetNextSeq {
- my ($subscription, $pattern, $planneddate) = @_;
+ my ($subscription, $pattern, $frequency, $planneddate) = @_;
return unless ($subscription and $pattern);
if(@irreg > 0) {
my $irregularities = {};
$irregularities->{$_} = 1 foreach(@irreg);
- my $issueno = GetFictiveIssueNumber($subscription, $planneddate) + 1;
+ my $issueno = GetFictiveIssueNumber($subscription, $planneddate, $frequency) + 1;
while($irregularities->{$issueno}) {
$count++;
$issueno++;
#calculate the date of the last issue.
for ( my $i = 1 ; $i <= $length ; $i++ ) {
- $enddate = GetNextDate( $subscription, $enddate );
+ $enddate = GetNextDate( $subscription, $enddate, $frequency );
}
} elsif ( $subscription->{monthlength} ) {
if ( $$subscription{startdate} ) {
if ( !$otherIssueExpected && $oldstatus == EXPECTED && $status != EXPECTED ) {
my $subscription = GetSubscription($subscriptionid);
my $pattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($subscription->{numberpattern});
+ my $frequency = C4::Serials::Frequency::GetSubscriptionFrequency($subscription->{periodicity});
# next issue number
my (
$newserialseq, $newlastvalue1, $newlastvalue2, $newlastvalue3,
$newinnerloop1, $newinnerloop2, $newinnerloop3
)
- = GetNextSeq( $subscription, $pattern, $publisheddate );
+ = GetNextSeq( $subscription, $pattern, $frequency, $publisheddate );
# next date (calculated from actual date & frequency parameters)
- my $nextpublisheddate = GetNextDate($subscription, $publisheddate, 1);
+ my $nextpublisheddate = GetNextDate($subscription, $publisheddate, $frequency, 1);
my $nextpubdate = $nextpublisheddate;
$query = "UPDATE subscription SET lastvalue1=?, lastvalue2=?, lastvalue3=?, innerloop1=?, innerloop2=?, innerloop3=?
WHERE subscriptionid = ?";
$biblionumber, $callnumber, $notes, $letter, $manualhistory,
$internalnotes, $serialsadditems, $staffdisplaycount, $opacdisplaycount,
$graceperiod, $location, $enddate, $subscriptionid, $skip_serialseq,
- $itemtype, $previousitemtype
+ $itemtype, $previousitemtype, $mana_id
) = @_;
my $dbh = C4::Context->dbh;
callnumber=?, notes=?, letter=?, manualhistory=?,
internalnotes=?, serialsadditems=?, staffdisplaycount=?,
opacdisplaycount=?, graceperiod=?, location = ?, enddate=?,
- skip_serialseq=?, itemtype=?, previousitemtype=?
+ skip_serialseq=?, itemtype=?, previousitemtype=?, mana_id=?
WHERE subscriptionid = ?";
my $sth = $dbh->prepare($query);
$letter, ($manualhistory ? $manualhistory : 0),
$internalnotes, $serialsadditems, $staffdisplaycount, $opacdisplaycount,
$graceperiod, $location, $enddate, $skip_serialseq,
- $itemtype, $previousitemtype,
+ $itemtype, $previousitemtype, $mana_id,
$subscriptionid
);
my $rows = $sth->rows;
$innerloop3, $status, $notes, $letter, $firstacquidate, $irregularity,
$numberpattern, $locale, $callnumber, $manualhistory, $internalnotes,
$serialsadditems, $staffdisplaycount, $opacdisplaycount, $graceperiod,
- $location, $enddate, $skip_serialseq, $itemtype, $previousitemtype
+ $location, $enddate, $skip_serialseq, $itemtype, $previousitemtype, $mana_id
) = @_;
my $dbh = C4::Context->dbh;
irregularity, numberpattern, locale, callnumber,
manualhistory, internalnotes, serialsadditems, staffdisplaycount,
opacdisplaycount, graceperiod, location, enddate, skip_serialseq,
- itemtype, previousitemtype)
- VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
+ itemtype, previousitemtype, mana_id)
+ VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?)
|;
my $sth = $dbh->prepare($query);
$sth->execute(
$firstacquidate, $irregularity, $numberpattern, $locale, $callnumber,
$manualhistory, $internalnotes, $serialsadditems, $staffdisplaycount,
$opacdisplaycount, $graceperiod, $location, $enddate, $skip_serialseq,
- $itemtype, $previousitemtype
+ $itemtype, $previousitemtype, $mana_id
);
my $subscriptionid = $dbh->{'mysql_insertid'};
# then create the 1st expected number
$query = qq(
INSERT INTO subscriptionhistory
- (biblionumber, subscriptionid, histstartdate)
- VALUES (?,?,?)
+ (biblionumber, subscriptionid, histstartdate, missinglist, recievedlist)
+ VALUES (?,?,?, '', '')
);
$sth = $dbh->prepare($query);
$sth->execute( $biblionumber, $subscriptionid, $startdate);
);
}
+ $numberlength ||= 0; # Should not we raise an exception instead?
+ $weeklength ||= 0;
+
# renew subscription
$query = qq|
UPDATE subscription
return 0; # Notice that you'll never get here.
}
-=head2 SetDistributedto
-
-SetDistributedto($distributedto,$subscriptionid);
-This function update the value of distributedto for a subscription given on input arg.
-
-=cut
-
-sub SetDistributedto {
- my ( $distributedto, $subscriptionid ) = @_;
- my $dbh = C4::Context->dbh;
- my $query = qq|
- UPDATE subscription
- SET distributedto=?
- WHERE subscriptionid=?
- |;
- my $sth = $dbh->prepare($query);
- $sth->execute( $distributedto, $subscriptionid );
- return;
-}
-
=head2 DelSubscription
DelSubscription($subscriptionid)
$dbh->do("DELETE FROM subscriptionhistory WHERE subscriptionid=?", undef, $subscriptionid);
$dbh->do("DELETE FROM serial WHERE subscriptionid=?", undef, $subscriptionid);
- my $afs = Koha::AdditionalField->all({tablename => 'subscription'});
- foreach my $af (@$afs) {
- $af->delete_values({record_id => $subscriptionid});
- }
+ Koha::AdditionalFieldValues->search({
+ 'field.tablename' => 'subscription',
+ 'me.record_id' => $subscriptionid,
+ }, { join => 'field' })->delete;
logaction( "SERIAL", "DELETE", $subscriptionid, "" ) if C4::Context->preference("SubscriptionLog");
}
}
$line->{"status".$line->{status}} = 1;
- my $additional_field_values = Koha::AdditionalField->fetch_all_values({
- record_id => $line->{subscriptionid},
- tablename => 'subscription'
- });
- %$line = ( %$line, additional_fields => $additional_field_values->{$line->{subscriptionid}} );
+ my $subscription_object = Koha::Subscriptions->find($line->{subscriptionid});
+ $line->{additional_fields} = { map { $_->field->name => $_->value }
+ $subscription_object->additional_field_values->as_list };
push @issuelist, $line;
}
my $expirationdate = GetExpirationDate($subscriptionid);
my ($res) = $dbh->selectrow_array('select max(planneddate) from serial where subscriptionid = ?', undef, $subscriptionid);
- my $nextdate = GetNextDate($subscription, $res);
+ my $nextdate = GetNextDate($subscription, $res, $frequency);
# only compare dates if both dates exist.
if ($nextdate and $expirationdate) {
return 0;
}
-sub in_array { # used in next sub down
- my ( $val, @elements ) = @_;
- foreach my $elem (@elements) {
- if ( $val == $elem ) {
- return 1;
- }
- }
- return 0;
-}
-
-=head2 GetSubscriptionsFromBorrower
-
-($count,@routinglist) = GetSubscriptionsFromBorrower($borrowernumber)
-
-this gets the info from subscriptionroutinglist for each $subscriptionid
-
-return :
-a count of the serial subscription routing lists to which a patron belongs,
-with the titles of those serial subscriptions as an array. Each element of the array
-contains a hash_ref with subscriptionID and title of subscription.
-
-=cut
-
-sub GetSubscriptionsFromBorrower {
- my ($borrowernumber) = @_;
- my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare(
- "SELECT subscription.subscriptionid, biblio.title
- FROM subscription
- JOIN biblio ON biblio.biblionumber = subscription.biblionumber
- JOIN subscriptionroutinglist USING (subscriptionid)
- WHERE subscriptionroutinglist.borrowernumber = ? ORDER BY title ASC
- "
- );
- $sth->execute($borrowernumber);
- my @routinglist;
- my $count = 0;
- while ( my $line = $sth->fetchrow_hashref ) {
- $count++;
- push( @routinglist, $line );
- }
- return ( $count, @routinglist );
-}
-
-
=head2 GetFictiveIssueNumber
-$issueno = GetFictiveIssueNumber($subscription, $publishedate);
+$issueno = GetFictiveIssueNumber($subscription, $publishedate, $frequency);
Get the position of the issue published at $publisheddate, considering the
first issue (at firstacquidate) is at position 1, the next is at position 2, etc...
=cut
sub GetFictiveIssueNumber {
- my ($subscription, $publisheddate) = @_;
+ my ($subscription, $publisheddate, $frequency) = @_;
- my $frequency = GetSubscriptionFrequency($subscription->{'periodicity'});
my $unit = $frequency->{unit} ? lc $frequency->{'unit'} : undef;
return if !$unit;
my $issueno;
=head2 GetNextDate
-$resultdate = GetNextDate($publisheddate,$subscription)
+$resultdate = GetNextDate($publisheddate,$subscription,$freqdata,$updatecount)
this function it takes the publisheddate and will return the next issue's date
and will skip dates if there exists an irregularity.
$publisheddate has to be an ISO date
-$subscription is a hashref containing at least 'periodicity', 'firstacquidate', 'irregularity', and 'countissuesperunit'
+$subscription is a hashref containing at least 'firstacquidate', 'irregularity', and 'countissuesperunit'
+$frequency is a hashref containing frequency informations
$updatecount is a boolean value which, when set to true, update the 'countissuesperunit' in database
- eg if periodicity is monthly and $publisheddate is 2007-02-10 but if March and April is to be
skipped then the returned date will be 2007-05-10
=cut
sub GetNextDate {
- my ( $subscription, $publisheddate, $updatecount ) = @_;
+ my ( $subscription, $publisheddate, $freqdata, $updatecount ) = @_;
return unless $subscription and $publisheddate;
- my $freqdata = GetSubscriptionFrequency($subscription->{'periodicity'});
if ($freqdata->{'unit'}) {
my ( $year, $month, $day ) = split /-/, $publisheddate;
# Get the 'fictive' next issue number
# It is used to check if next issue is an irregular issue.
- my $issueno = GetFictiveIssueNumber($subscription, $publisheddate) + 1;
+ my $issueno = GetFictiveIssueNumber($subscription, $publisheddate, $freqdata) + 1;
# Then get the next date
my $unit = lc $freqdata->{'unit'};
return $string;
}
-=head2 is_barcode_in_use
-
-Returns number of occurrences of the barcode in the items table
-Can be used as a boolean test of whether the barcode has
-been deployed as yet
-
-=cut
-
-sub is_barcode_in_use {
- my $barcode = shift;
- my $dbh = C4::Context->dbh;
- my $occurrences = $dbh->selectall_arrayref(
- 'SELECT itemnumber from items where barcode = ?',
- {}, $barcode
-
- );
-
- return @{$occurrences};
-}
-
=head2 CloseSubscription
Close a subscription given a subscriptionid