Bug 10402: Move contacts to separate table
[koha.git] / C4 / Bookseller / Contact.pm
1 package C4::Bookseller::Contact;
2
3 # Copyright 2013 C & P Bibliography Services
4 #
5 # This file is part of Koha.
6 #
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 3 of the License, or (at your option) any later
10 # version.
11 #
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20 =head1 NAME
21
22 C4::Bookseller::Contact - object class for contacts associated with vendors
23
24 =head1 SYNPOSIS
25
26 This class provides an object-oriented interface for handling vendor contacts.
27 It uses Class::Accessor to provide access to the following fields:
28
29 =head1 FIELDS
30
31 =over 8
32
33 =item id
34
35 ID of the contact. This is not used initially, since contacts are actually
36 stored in the aqbooksellers table.
37
38 =item name
39
40 Contact name.
41
42 =item position
43
44 Contact's position.
45
46 =item phone
47
48 Contact's primary phone number.
49
50 =item altphone
51
52 Contact's alternate phone number.
53
54 =item fax
55
56 Contact's fax number.
57
58 =item email
59
60 Contact's e-mail address.
61
62 =item notes
63
64 Notes about contact.
65
66 =item rank
67
68 Ranking of the contact so that the contact can be given the correct
69 priority in display.
70
71 =item bookseller
72
73 ID of the bookseller the contact is associated with.
74
75 =back
76
77 =cut
78
79 use Modern::Perl;
80 use C4::Context;
81
82 use base qw(Class::Accessor);
83
84 __PACKAGE__->mk_accessors(qw(id name position phone altphone fax email notes rank bookseller));
85
86 =head1 METHODS
87
88 =head2 get_from_bookseller
89
90     my @contacts = @{C4::Bookseller::Contact->get_from_bookseller($booksellerid)};
91
92 Returns a reference to an array of C4::Bookseller::Contact objects for the
93 specified bookseller. This will always return at least one item, though that one
94 item may be an empty contact.
95
96 =cut
97
98 sub get_from_bookseller {
99     my ($class, $bookseller) = @_;
100
101     return unless $bookseller;
102
103     my @contacts;
104     my $query = "SELECT * FROM aqcontacts WHERE booksellerid = ?";
105     my $dbh = C4::Context->dbh;
106     my $sth = $dbh->prepare($query);
107     $sth->execute($bookseller);
108     while (my $rec = $sth->fetchrow_hashref()) {
109         push @contacts, $class->new($rec);
110     }
111
112     push @contacts, $class->new() unless @contacts;
113
114     return \@contacts;
115 }
116
117
118 =head2 fetch
119
120     my $contact = C4::Bookseller::Contact->fetch($contactid);
121
122 Retrieves the specified contact from the database. Currently commented out
123 because there is no separate table from which contacts can be fetched.
124
125 =cut
126
127 sub fetch {
128     my ($class, $id) = @_;
129
130     my $rec = { };
131     if ($id) {
132         my $query = "SELECT * FROM aqcontacts WHERE id = ?";
133         my $dbh = C4::Context->dbh;
134         my $sth = $dbh->prepare($query);
135         $sth->execute($id);
136         $rec = $sth->fetchrow_hashref();
137     }
138     my $self = $class->new($rec);
139     bless $self, $class;
140     return $self;
141 }
142
143 =head2 save
144
145     $contact->save();
146
147 Save a contact to the database.
148
149 =cut
150
151 sub save {
152     my ($self) = @_;
153
154     my $query;
155     my @params = ($self->name, $self->position, $self->phone, $self->altphone, $self->fax, $self->email, $self->notes, $self->rank, $self->bookseller);
156     if ($self->id) {
157         $query = 'UPDATE aqcontacts SET name = ?, position = ?, phone = ?, altphone = ?, fax = ?, email = ?, notes = ?, rank = ?, booksellerid = ? WHERE id = ?;';
158         push @params, $self->id;
159     } else {
160         $query = 'INSERT INTO aqcontacts (name, position, phone, altphone, fax, email, notes, rank, booksellerid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);';
161     }
162     my $dbh = C4::Context->dbh;
163     my $sth = $dbh->prepare($query);
164     $sth->execute(@params);
165     $self->id($dbh->{'mysql_insertid'}) unless $self->id;
166     return $self->id;
167 }
168
169 sub delete {
170     my ($self) = @_;
171
172     return unless $self->id;
173
174     my $dbh = C4::Context->dbh;
175     my $sth = $dbh->prepare("DELETE FROM aqcontacts WHERE id = ?;");
176     $sth->execute($self->id);
177     return;
178 }
179
180 =head1 AUTHOR
181
182 Jared Camins-Esakov <jcamins@cpbibliography.com>
183
184 =cut
185
186 1;