Bug 29002: Fix permission required to access bookings list
[koha.git] / Koha / Checkouts / ReturnClaim.pm
1 package Koha::Checkouts::ReturnClaim;
2
3 # Copyright ByWater Solutions 2019
4 #
5 # This file is part of Koha.
6 #
7 # Koha is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
11 #
12 # Koha is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with Koha; if not, see <http://www.gnu.org/licenses>.
19
20 use Modern::Perl;
21
22 use base qw(Koha::Object);
23
24 use Koha::Checkouts;
25 use Koha::Exceptions;
26 use Koha::Exceptions::Checkouts::ReturnClaims;
27 use Koha::Old::Checkouts;
28 use Koha::Patrons;
29
30 =head1 NAME
31
32 Koha::Checkouts::ReturnClaim - Koha ReturnClaim object class
33
34 =head1 API
35
36 =head2 Class methods
37
38 =cut
39
40 =head3 store
41
42     my $return_claim = Koha::Checkout::ReturnClaim->new($args)->store;
43
44 Overloaded I<store> method that validates the attributes and raises relevant
45 exceptions as needed.
46
47 =cut
48
49 sub store {
50     my ( $self ) = @_;
51
52     unless ( $self->in_storage || $self->created_by ) {
53         Koha::Exceptions::Checkouts::ReturnClaims::NoCreatedBy->throw();
54     }
55
56     # if issue_id is not found in issues or old_issues, set to null
57     $self->issue_id(undef) unless ( !$self->issue_id
58         || Koha::Checkouts->find( $self->issue_id )
59         || Koha::Old::Checkouts->find( $self->issue_id ) );
60
61     return $self->SUPER::store;
62 }
63
64 =head3 checkout
65
66 =cut
67
68 sub checkout {
69     my ($self) = @_;
70
71     my $checkout_rs = $self->_result->checkout;
72     return unless $checkout_rs;
73     return Koha::Checkout->_new_from_dbic($checkout_rs);
74 }
75
76 =head3 old_checkout
77
78 =cut
79
80 sub old_checkout {
81     my ($self) = @_;
82
83     my $old_checkout_rs = $self->_result->old_checkout;
84     return unless $old_checkout_rs;
85     return Koha::Old::Checkout->_new_from_dbic($old_checkout_rs);
86 }
87
88 =head3 patron
89
90 =cut
91
92 sub patron {
93     my ( $self ) = @_;
94
95     my $borrower = $self->_result->borrowernumber;
96     return Koha::Patron->_new_from_dbic( $borrower ) if $borrower;
97 }
98
99 =head3 item
100
101   my $item = $claim->item;
102
103 Return the return claim item
104
105 =cut
106
107 sub item {
108     my ( $self ) = @_;
109     my $item_rs = $self->_result->item;
110     return Koha::Item->_new_from_dbic( $item_rs );
111 }
112
113 =head3 resolve
114
115     $claim->resolve(
116         {
117             resolution      => $resolution,
118             resolved_by     => $patron_id,
119           [ resolved_on     => $dt
120             new_lost_status => $status, ]
121         }
122     );
123
124 Resolve the claim.
125
126 =cut
127
128 sub resolve {
129     my ( $self, $params ) = @_;
130
131     my @mandatory = ( 'resolution', 'resolved_by' );
132     for my $param (@mandatory) {
133         unless ( defined( $params->{$param} ) ) {
134             Koha::Exceptions::MissingParameter->throw( error => "The $param parameter is mandatory" );
135         }
136     }
137
138     $self->_result->result_source->schema->txn_do(
139         sub {
140             $self->set(
141                 {   resolution  => $params->{resolution},
142                     resolved_by => $params->{resolved_by},
143                     resolved_on => $params->{resolved_on} // \'NOW()',
144                     updated_by  => $params->{resolved_by}
145                 }
146             )->store;
147
148             if ( defined $params->{new_lost_status} ) {
149                 $self->item->itemlost( $params->{new_lost_status} )->store;
150             }
151         }
152     );
153
154     return $self;
155 }
156
157 =head3 to_api_mapping
158
159 This method returns the mapping for representing a Koha::Checkouts::ReturnClaim object
160 on the API.
161
162 =cut
163
164 sub to_api_mapping {
165     return {
166         id             => 'claim_id',
167         itemnumber     => 'item_id',
168         borrowernumber => 'patron_id',
169     };
170 }
171
172 =head2 Internal methods
173
174 =head3 _type
175
176 =cut
177
178 sub _type {
179     return 'ReturnClaim';
180 }
181
182 =head1 AUTHOR
183
184 Kyle M Hall <kyle@bywatersolutions.com>
185
186 =cut
187
188 1;