File Coverage

File:C4/Bookseller.pm
Coverage:18.8%

linestmtbrancondsubtimecode
1package C4::Bookseller;
2
3# Copyright 2000-2002 Katipo Communications
4# Copyright 2010 PTFS Europe
5#
6# This file is part of Koha.
7#
8# Koha is free software; you can redistribute it and/or modify it under the
9# terms of the GNU General Public License as published by the Free Software
10# Foundation; either version 2 of the License, or (at your option) any later
11# version.
12#
13# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
14# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License along
18# with Koha; if not, write to the Free Software Foundation, Inc.,
19# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
21
2
2
2
577
52
58
use strict;
22
2
2
2
17
10
109
use warnings;
23
24
2
2
2
16
9
1794
use base qw( Exporter );
25
26# set the version for version checking
27our $VERSION = 4.01;
28our @EXPORT_OK = qw(
29  GetBookSeller GetBooksellersWithLateOrders GetBookSellerFromId
30  ModBookseller
31  DelBookseller
32  AddBookseller
33);
34
35 - 61
=head1 NAME

C4::Bookseller - Koha functions for dealing with booksellers.

=head1 SYNOPSIS

use C4::Bookseller;

=head1 DESCRIPTION

The functions in this module deal with booksellers. They allow to
add a new bookseller, to modify it or to get some informations around
a bookseller.

=head1 FUNCTIONS

=head2 GetBookSeller

@results = GetBookSeller($searchstring);

Looks up a book seller. C<$searchstring> may be either a book seller
ID, or a string to look for in the book seller's name.

C<@results> is an array of hash_refs whose keys are the fields of of the
aqbooksellers table in the Koha database.

=cut
62
63sub GetBookSeller {
64
0
    my $searchstring = shift;
65
0
    $searchstring = q{%} . $searchstring . q{%};
66
0
    my $query =
67'select aqbooksellers.*, count(*) as basketcount from aqbooksellers left join aqbasket '
68      . 'on aqbasket.booksellerid = aqbooksellers.id where name like ? group by aqbooksellers.id order by name';
69
70
0
    my $dbh = C4::Context->dbh;
71
0
    my $sth = $dbh->prepare($query);
72
0
    $sth->execute($searchstring);
73
0
    my $resultset_ref = $sth->fetchall_arrayref( {} );
74
0
0
    return @{$resultset_ref};
75}
76
77sub GetBookSellerFromId {
78
0
    my $id = shift or return;
79
0
    my $dbh = C4::Context->dbh;
80
0
    my $vendor =
81      $dbh->selectrow_hashref( 'SELECT * FROM aqbooksellers WHERE id = ?',
82        {}, $id );
83
0
    if ($vendor) {
84
0
        ( $vendor->{basketcount} ) = $dbh->selectrow_array(
85            'SELECT count(*) FROM aqbasket where booksellerid = ?',
86            {}, $id );
87
0
        ( $vendor->{subscriptioncount} ) = $dbh->selectrow_array(
88            'SELECT count(*) FROM subscription WHERE aqbooksellerid = ?',
89            {}, $id );
90    }
91
0
    return $vendor;
92}
93
94#-----------------------------------------------------------------#
95
96 - 102
=head2 GetBooksellersWithLateOrders

%results = GetBooksellersWithLateOrders($delay);

Searches for suppliers with late orders.

=cut
103
104sub GetBooksellersWithLateOrders {
105
0
    my $delay = shift;
106
0
    my $dbh = C4::Context->dbh;
107
108    # TODO delay should be verified
109
0
    my $query_string =
110      "SELECT DISTINCT aqbasket.booksellerid, aqbooksellers.name
111    FROM aqorders LEFT JOIN aqbasket ON aqorders.basketno=aqbasket.basketno
112    LEFT JOIN aqbooksellers ON aqbasket.booksellerid = aqbooksellers.id
113    WHERE (closedate < DATE_SUB(CURDATE( ),INTERVAL $delay DAY)
114    AND (datereceived = '' OR datereceived IS NULL))";
115
116
0
    my $sth = $dbh->prepare($query_string);
117
0
    $sth->execute;
118
0
    my %supplierlist;
119
0
    while ( my ( $id, $name ) = $sth->fetchrow ) {
120
0
        $supplierlist{$id} = $name;
121    }
122
123
0
    return %supplierlist;
124}
125
126#--------------------------------------------------------------------#
127
128 - 138
=head2 AddBookseller

$id = &AddBookseller($bookseller);

Creates a new bookseller. C<$bookseller> is a reference-to-hash whose
keys are the fields of the aqbooksellers table in the Koha database.
All fields must be present.

Returns the ID of the newly-created bookseller.

=cut
139
140sub AddBookseller {
141
0
    my ($data) = @_;
142
0
    my $dbh = C4::Context->dbh;
143
0
    my $query = q|
144        INSERT INTO aqbooksellers
145            (
146                name, address1, address2, address3, address4,
147                postal, phone, accountnumber, fax, url,
148                contact,
149                contpos, contphone, contfax, contaltphone, contemail,
150                contnotes, active, listprice, invoiceprice, gstreg,
151                listincgst,invoiceincgst, gstrate, discount,
152                notes
153            )
154        VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) |
155      ;
156
0
    my $sth = $dbh->prepare($query);
157
0
    $sth->execute(
158        $data->{'name'}, $data->{'address1'},
159        $data->{'address2'}, $data->{'address3'},
160        $data->{'address4'}, $data->{'postal'},
161        $data->{'phone'}, $data->{'accountnumber'},
162        $data->{'fax'},
163        $data->{'url'}, $data->{'contact'},
164        $data->{'contpos'}, $data->{'contphone'},
165        $data->{'contfax'}, $data->{'contaltphone'},
166        $data->{'contemail'}, $data->{'contnotes'},
167        $data->{'active'}, $data->{'listprice'},
168        $data->{'invoiceprice'}, $data->{'gstreg'},
169        $data->{'listincgst'}, $data->{'invoiceincgst'},
170        $data->{'gstrate'},
171        $data->{'discount'}, $data->{'notes'}
172    );
173
174    # return the id of this new supplier
175
0
    return $dbh->{'mysql_insertid'};
176}
177
178#-----------------------------------------------------------------#
179
180 - 193
=head2 ModBookseller

ModBookseller($bookseller);

Updates the information for a given bookseller. C<$bookseller> is a
reference-to-hash whose keys are the fields of the aqbooksellers table
in the Koha database. It must contain entries for all of the fields.
The entry to modify is determined by C<$bookseller-E<gt>{id}>.

The easiest way to get all of the necessary fields is to look up a
book seller with C<&GetBookseller>, modify what's necessary, then call
C<&ModBookseller> with the result.

=cut
194
195sub ModBookseller {
196
0
    my ($data) = @_;
197
0
    my $dbh = C4::Context->dbh;
198
0
    my $query = 'UPDATE aqbooksellers
199        SET name=?,address1=?,address2=?,address3=?,address4=?,
200            postal=?,phone=?,accountnumber=?,fax=?,url=?,contact=?,contpos=?,
201            contphone=?,contfax=?,contaltphone=?,contemail=?,
202            contnotes=?,active=?,listprice=?, invoiceprice=?,
203            gstreg=?,listincgst=?,invoiceincgst=?,
204            discount=?,notes=?,gstrate=?
205        WHERE id=?';
206
0
    my $sth = $dbh->prepare($query);
207
0
    $sth->execute(
208        $data->{'name'}, $data->{'address1'},
209        $data->{'address2'}, $data->{'address3'},
210        $data->{'address4'}, $data->{'postal'},
211        $data->{'phone'}, $data->{'accountnumber'},
212        $data->{'fax'},
213        $data->{'url'}, $data->{'contact'},
214        $data->{'contpos'}, $data->{'contphone'},
215        $data->{'contfax'}, $data->{'contaltphone'},
216        $data->{'contemail'}, $data->{'contnotes'},
217        $data->{'active'}, $data->{'listprice'},
218        $data->{'invoiceprice'}, $data->{'gstreg'},
219        $data->{'listincgst'}, $data->{'invoiceincgst'},
220        $data->{'discount'}, $data->{'notes'},
221        $data->{'gstrate'}, $data->{'id'}
222    );
223
0
    return;
224}
225
226 - 233
=head2 DelBookseller

DelBookseller($booksellerid);

delete the supplier record identified by $booksellerid
This sub assumes it is called only if the supplier has no order.

=cut
234
235sub DelBookseller {
236
0
    my $id = shift;
237
0
    my $dbh = C4::Context->dbh;
238
0
    my $sth = $dbh->prepare('DELETE FROM aqbooksellers WHERE id=?');
239
0
    $sth->execute($id);
240
0
    return;
241}
242
2431;
244