-package C4::Frequency;
+package C4::Serials::Frequency;
-# Copyright 2000-2002 Biblibre SARL
+# Copyright 2011-2013 Biblibre SARL
#
# This file is part of Koha.
#
-# Koha is free software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
#
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
#
-# You should have received a copy of the GNU General Public License along
-# with Koha; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
use strict;
-#use warnings; FIXME - Bug 2505
+use warnings;
+
use C4::Context;
-use C4::SQLHelper qw<:all>;
-use C4::Debug;
-use vars qw($VERSION @ISA @EXPORT);
+use vars qw(@ISA @EXPORT);
BEGIN {
- # set the version for version checking
- $VERSION = 3.01;
- require Exporter;
- @ISA = qw(Exporter);
- @EXPORT = qw(
-
- &GetFrequencies
- &GetFrequency
- &new
- &all
- &AddFrequency
- &ModFrequency
- &DelFrequency
-
- );
+ require Exporter;
+ @ISA = qw(Exporter);
+ @EXPORT = qw(
+ GetSubscriptionFrequencies
+ GetSubscriptionFrequency
+ AddSubscriptionFrequency
+ ModSubscriptionFrequency
+ DelSubscriptionFrequency
+
+ GetSubscriptionsWithFrequency
+ );
}
-# -------------------------------------------------------------------
-my %count_issues_a_year=(
- day=>365,
- week=>52,
- month=>12,
- quarter=>4,
- year=>1
-);
-
-sub new {
- my ($class, $opts) = @_;
- bless $opts => $class;
-}
+=head1 NAME
-sub AddFrequency {
- my ($class,$frequency) = @_;
- return InsertInTable("subscription_frequency",$frequency);
-}
+C4::Serials::Frequency - Serials Frequency module
-sub GetExpectedissuesayear {
- my ($class,$unit,$issuesperunit,$unitperissues) = @_;
- return Int($count_issues_a_year{$unit}/$issuesperunit)*$unitperissues;
-}
+=head1 FUNCTIONS
+
+=head2 GetSubscriptionFrequencies
+
+=over 4
+
+=item C<@frequencies> = &GetSubscriptionFrequencies();
+
+gets frequencies restricted on filters
-# -------------------------------------------------------------------
-sub ModFrequency {
- my ($class,$frequency) = @_;
- return UpdateInTable("subscription_frequency",$frequency);
+=back
+
+=cut
+
+sub GetSubscriptionFrequencies {
+ my $dbh = C4::Context->dbh;
+ my $query = qq{
+ SELECT *
+ FROM subscription_frequencies
+ ORDER BY displayorder
+ };
+ my $sth = $dbh->prepare($query);
+ $sth->execute();
+
+ my $results = $sth->fetchall_arrayref( {} );
+ return @$results;
}
-# -------------------------------------------------------------------
-sub DelFrequency {
- my ($class,$frequency) = @_;
- return DeleteInTable("subscription_frequency",$frequency);
+=head2 GetSubscriptionFrequency
+
+=over 4
+
+=item $frequency = &GetSubscriptionFrequency($frequencyid);
+
+gets frequency where $frequencyid is the identifier
+
+=back
+
+=cut
+
+sub GetSubscriptionFrequency {
+ my ($frequencyid) = @_;
+
+ my $dbh = C4::Context->dbh;
+ my $query = qq{
+ SELECT *
+ FROM subscription_frequencies
+ WHERE id = ?
+ };
+ my $sth = $dbh->prepare($query);
+ $sth->execute($frequencyid);
+
+ return $sth->fetchrow_hashref;
}
-sub all {
- my ($class) = @_;
+=head2 AddSubscriptionFrequency
+
+=over 4
+
+=item C<$frequencyid> = &AddSubscriptionFrequency($frequency);
+
+Add a new frequency
+
+=item C<$frequency> is a hashref that can contains the following keys
+
+=over 2
+
+=item * description
+
+=item * unit
+
+=item * issuesperunit
+
+=item * unitsperissue
+
+=item * expectedissuesayear
+
+=item * displayorder
+
+=back
+
+Only description is mandatory.
+
+=back
+
+=cut
+
+sub AddSubscriptionFrequency {
+ my $frequency = shift;
+
+ unless(ref($frequency) eq 'HASH' && defined $frequency->{'description'} && $frequency->{'description'} ne '') {
+ return;
+ }
+
+ my @keys;
+ my @values;
+ foreach (qw/ description unit issuesperunit unitsperissue expectedissuesayear displayorder /) {
+ if(exists $frequency->{$_}) {
+ push @keys, $_;
+ push @values, $frequency->{$_};
+ }
+ }
+
my $dbh = C4::Context->dbh;
- return map { $class->new($_) } @{$dbh->selectall_arrayref(
- # The subscription_frequency table is small enough for
- # `SELECT *` to be harmless.
- "SELECT * FROM subscription_frequency ORDER BY description",
- { Slice => {} },
- )};
+ my $query = "INSERT INTO subscription_frequencies";
+ $query .= '(' . join(',', @keys) . ')';
+ $query .= ' VALUES (' . ('?,' x (scalar(@keys)-1)) . '?)';
+ my $sth = $dbh->prepare($query);
+ my $rv = $sth->execute(@values);
+
+ if(defined $rv) {
+ return $dbh->last_insert_id(undef, undef, "subscription_frequencies", undef);
+ }
+
+ return $rv;
}
-=head3 GetFrequency
+=head2 ModSubscriptionFrequency
=over 4
-&GetFrequency($freq_id);
+=item &ModSubscriptionFrequency($frequency);
+
+Modifies a frequency
+
+=item C<$frequency> is a hashref that can contains the following keys
+
+=over 2
+
+=item * id
+
+=item * description
+
+=item * unit
+
+=item * issuesperunit
+
+=item * unitsperissue
+
+=item * expectedissuesayear
-gets frequency where $freq_id is the identifier
+=item * displayorder
+
+=back
+
+Only id is mandatory.
=back
=cut
-# -------------------------------------------------------------------
-sub GetFrequency {
- my ($freq_id) = @_;
- return undef unless $freq_id;
- my $results= SearchInTable("subscription_frequency",{frequency_id=>$freq_id}, undef, undef,undef, undef, "wide");
- return undef unless ($results);
- return $$results[0];
+sub ModSubscriptionFrequency {
+ my $frequency = shift;
+
+ unless(
+ ref($frequency) eq 'HASH'
+ && defined $frequency->{'id'} && $frequency->{'id'} > 0
+ && (
+ (defined $frequency->{'description'}
+ && $frequency->{'description'} ne '')
+ || !defined $frequency->{'description'}
+ )
+ ) {
+ return;
+ }
+
+ my @keys;
+ my @values;
+ foreach (qw/ description unit issuesperunit unitsperissue expectedissuesayear displayorder /) {
+ if(exists $frequency->{$_}) {
+ push @keys, $_;
+ push @values, $frequency->{$_};
+ }
+ }
+
+ my $dbh = C4::Context->dbh;
+ my $query = "UPDATE subscription_frequencies";
+ $query .= ' SET ' . join(' = ?,', @keys) . ' = ?';
+ $query .= ' WHERE id = ?';
+ my $sth = $dbh->prepare($query);
+
+ return $sth->execute(@values, $frequency->{'id'});
}
-=head3 GetFrequencies
+=head2 DelSubscriptionFrequency
=over 4
-&GetFrequencies($filter, $order_by);
+=item &DelSubscriptionFrequency($frequencyid);
-gets frequencies restricted on filters
+Delete a frequency
=back
=cut
-# -------------------------------------------------------------------
-sub GetFrequencies {
- my ($filters,$orderby) = @_;
- return SearchInTable("subscription_frequency",$filters, $orderby, undef,undef, undef, "wide");
+sub DelSubscriptionFrequency {
+ my $frequencyid = shift;
+
+ my $dbh = C4::Context->dbh;
+ my $query = qq{
+ DELETE FROM subscription_frequencies
+ WHERE id = ?
+ };
+ my $sth = $dbh->prepare($query);
+ $sth->execute($frequencyid);
}
-END { } # module clean-up code here (global destructor)
+=head2 GetSubscriptionsWithFrequency
+
+ my @subs = GetSubscriptionsWithFrequency($frequencyid);
+
+Returns all subscriptions that are using a particular frequency
+
+=cut
+
+sub GetSubscriptionsWithFrequency {
+ my ($frequencyid) = @_;
+
+ return unless $frequencyid;
+
+ my $dbh = C4::Context->dbh;
+ my $query = qq{
+ SELECT *
+ FROM subscription
+ LEFT JOIN biblio ON subscription.biblionumber = biblio.biblionumber
+ WHERE periodicity = ?
+ };
+ my $sth = $dbh->prepare($query);
+ my @results;
+ if ($sth->execute($frequencyid)) {
+ @results = @{ $sth->fetchall_arrayref({}) };
+ }
+ return @results;
+}
1;
+
__END__
=head1 AUTHOR
-Koha Developement team <info@koha.org>
+Koha Development team <info@koha.org>
=cut