1 package Koha
::Patron
::Modifications
;
3 # Copyright 2012 ByWater Solutions
4 # This file is part of Koha.
6 # Koha is free software; you can redistribute it and/or modify it
7 # under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
11 # Koha is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with Koha; if not, see <http://www.gnu.org/licenses>.
21 Koha::Patron::Modifications
31 my ( $class, %args ) = @_;
33 return bless( \
%args, $class );
36 =head2 AddModifications
38 Koha::Patron::Modifications->AddModifications( $data );
40 Adds or updates modifications for a patron
42 Requires either the key borrowernumber, or verification_token
43 to be part of the passed in hash.
47 sub AddModifications
{
48 my ( $self, $data ) = @_;
50 delete $data->{borrowernumber
};
51 if( $self->{borrowernumber
} ) {
52 return if( not keys %$data );
53 $data->{borrowernumber
} = $self->{borrowernumber
};
54 $data->{verification_token
} = '';
56 elsif( $self->{verification_token
} ) {
57 $data->{verification_token
} = $self->{verification_token
};
58 $data->{borrowernumber
} = 0;
64 my $rs = Koha
::Database
->new()->schema->resultset('BorrowerModification');
65 return $rs->update_or_create($data, { key
=> 'primary' } );
70 $verified = Koha::Patron::Modifications->Verify( $verification_token );
72 Returns true if the passed in token is valid.
77 my ( $self, $verification_token ) = @_;
82 : $self->{'verification_token'};
84 my $dbh = C4
::Context
->dbh;
86 SELECT COUNT(*) AS count
87 FROM borrower_modifications
88 WHERE verification_token = ?
90 my $sth = $dbh->prepare($query);
91 $sth->execute($verification_token);
92 my $result = $sth->fetchrow_hashref();
94 return $result->{'count'};
97 =head2 GetPendingModificationsCount
99 $count = Koha::Patron::Modifications->GetPendingModificationsCount();
101 Returns the number of pending modifications for existing patron.
105 sub GetPendingModificationsCount
{
106 my ( $self, $branchcode ) = @_;
108 my $dbh = C4
::Context
->dbh;
110 SELECT COUNT(*) AS count
111 FROM borrower_modifications, borrowers
112 WHERE borrower_modifications.borrowernumber > 0
113 AND borrower_modifications.borrowernumber = borrowers.borrowernumber
118 $query .= " AND borrowers.branchcode = ? ";
119 push( @params, $branchcode );
122 my $sth = $dbh->prepare($query);
123 $sth->execute(@params);
124 my $result = $sth->fetchrow_hashref();
126 return $result->{'count'};
129 =head2 GetPendingModifications
131 $arrayref = Koha::Patron::Modifications->GetPendingModifications();
133 Returns an arrayref of hashrefs for all pending modifications for existing patrons.
137 sub GetPendingModifications
{
138 my ( $self, $branchcode ) = @_;
140 my $dbh = C4
::Context
->dbh;
142 SELECT borrower_modifications.*
143 FROM borrower_modifications, borrowers
144 WHERE borrower_modifications.borrowernumber > 0
145 AND borrower_modifications.borrowernumber = borrowers.borrowernumber
150 $query .= " AND borrowers.branchcode = ? ";
151 push( @params, $branchcode );
153 $query .= " ORDER BY borrowers.surname, borrowers.firstname";
154 my $sth = $dbh->prepare($query);
155 $sth->execute(@params);
158 while ( my $row = $sth->fetchrow_hashref() ) {
159 foreach my $key ( keys %$row ) {
160 delete $row->{$key} unless defined $row->{$key};
169 =head2 ApproveModifications
171 Koha::Patron::Modifications->ApproveModifications( $borrowernumber );
173 Commits the pending modifications to the borrower record and removes
174 them from the modifications table.
178 sub ApproveModifications
{
179 my ( $self, $borrowernumber ) = @_;
182 ($borrowernumber) ?
$borrowernumber : $self->{'borrowernumber'};
184 return unless $borrowernumber;
186 my $data = $self->GetModifications( { borrowernumber
=> $borrowernumber } );
187 delete $data->{timestamp
};
188 delete $data->{verification_token
};
190 my $rs = Koha
::Database
->new()->schema->resultset('Borrower')->search({
191 borrowernumber
=> $data->{borrowernumber
},
193 if( $rs->update($data) ) {
194 $self->DelModifications( { borrowernumber
=> $borrowernumber } );
198 =head2 DenyModifications
200 Koha::Patron::Modifications->DenyModifications( $borrowernumber );
202 Removes the modifications from the table for the given patron,
203 without committing the changes to the patron record.
207 sub DenyModifications
{
208 my ( $self, $borrowernumber ) = @_;
211 ($borrowernumber) ?
$borrowernumber : $self->{'borrowernumber'};
213 return unless $borrowernumber;
215 return $self->DelModifications( { borrowernumber
=> $borrowernumber } );
218 =head2 DelModifications
220 Koha::Patron::Modifications->DelModifications({
221 [ borrowernumber => $borrowernumber ],
222 [ verification_token => $verification_token ]
225 Deletes the modifications for the given borrowernumber or verification token.
229 sub DelModifications
{
230 my ( $self, $params ) = @_;
232 my ( $field, $value );
234 if ( $params->{'borrowernumber'} ) {
235 $field = 'borrowernumber';
236 $value = $params->{'borrowernumber'};
238 elsif ( $params->{'verification_token'} ) {
239 $field = 'verification_token';
240 $value = $params->{'verification_token'};
243 return unless $value;
245 my $dbh = C4
::Context
->dbh;
247 $field = $dbh->quote_identifier($field);
251 FROM borrower_modifications
255 my $sth = $dbh->prepare($query);
256 return $sth->execute($value);
259 =head2 GetModifications
261 $hashref = Koha::Patron::Modifications->GetModifications({
262 [ borrowernumber => $borrowernumber ],
263 [ verification_token => $verification_token ]
266 Gets the modifications for the given borrowernumber or verification token.
270 sub GetModifications
{
271 my ( $self, $params ) = @_;
273 my ( $field, $value );
275 if ( defined( $params->{'borrowernumber'} ) ) {
276 $field = 'borrowernumber';
277 $value = $params->{'borrowernumber'};
279 elsif ( defined( $params->{'verification_token'} ) ) {
280 $field = 'verification_token';
281 $value = $params->{'verification_token'};
284 return unless $value;
286 my $dbh = C4
::Context
->dbh;
288 $field = $dbh->quote_identifier($field);
292 FROM borrower_modifications
296 my $sth = $dbh->prepare($query);
297 $sth->execute($value);
298 my $data = $sth->fetchrow_hashref();
300 foreach my $key ( keys %$data ) {
301 delete $data->{$key} unless ( defined( $data->{$key} ) );