Bug 7688: (follow-up) update license statements
[koha.git] / C4 / Serials / Frequency.pm
index 9d7bf8f..d71df7a 100644 (file)
-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., 59 Temple Place,
-# Suite 330, Boston, MA  02111-1307 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;
+
 use C4::Context;
-use C4::SQLHelper qw<:all>;
-use C4::Debug;
 
 use vars qw($VERSION @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
-
-       );
+    # set the version for version checking
+    $VERSION = 3.01;
+    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
 
-# -------------------------------------------------------------------
-sub ModFrequency {
-    my ($class,$frequency) = @_;
-       return UpdateInTable("subscription_frequency",$frequency);
+=over 4
+
+=item C<@frequencies> = &GetSubscriptionFrequencies();
+
+gets frequencies restricted on filters
+
+=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
+
+=item * displayorder
 
-gets frequency where $freq_id is the identifier
+=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__
 
-=back
+__END__
 
 =head1 AUTHOR