1 package Koha
::Acquisition
::Basket
;
3 # Copyright 2017 Aleisha Amohia <aleisha@catalyst.net.nz>
5 # This file is part of Koha.
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.
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.
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>.
23 use Koha
::DateUtils
qw( dt_from_string );
24 use Koha
::Acquisition
::BasketGroups
;
25 use Koha
::Acquisition
::Orders
;
26 use Koha
::Exceptions
::Acquisition
::Basket
;
29 use base
qw( Koha::Object Koha::Object::Mixin::AdditionalFields );
33 Koha::Acquisition::Basket - Koha Basket Object class
49 my $bookseller_rs = $self->_result->booksellerid;
50 return Koha
::Acquisition
::Bookseller
->_new_from_dbic( $bookseller_rs );
55 my $creator = $basket->creator;
57 Returns the I<Koha::Patron> for the basket creator.
63 my $borrowernumber = $self->authorisedby; # FIXME missing FK here
64 return unless $borrowernumber;
65 return Koha
::Patrons
->find( $borrowernumber );
70 Returns the basket group associated to this basket
77 my $basket_group_rs = $self->_result->basket_group;
78 return unless $basket_group_rs;
79 return Koha
::Acquisition
::BasketGroup
->_new_from_dbic( $basket_group_rs );
84 my $orders = $basket->orders;
86 Returns a Koha::Acquisition::Orders resultset, with the orders linked
94 my $orders_rs = $self->_result->orders;
95 return Koha
::Acquisition
::Orders
->_new_from_dbic( $orders_rs );
98 =head3 effective_create_items
100 Returns C<create_items> for this basket, falling back to C<AcqCreateItem> if unset.
104 sub effective_create_items
{
107 return $self->create_items || C4
::Context
->preference('AcqCreateItem');
110 =head3 estimated_delivery_date
112 my $estimated_delivery_date = $basket->estimated_delivery_date;
114 Return the estimated delivery date for this basket.
116 It is calculated adding the delivery time of the vendor to the close date of this basket.
118 Return implicit undef if the basket is not closed, or the vendor does not have a delivery time.
122 sub estimated_delivery_date
{
124 return unless $self->closedate and $self->bookseller->deliverytime;
125 return dt_from_string
($self->closedate)->add( days
=> $self->bookseller->deliverytime);
128 =head3 late_since_days
130 my $number_of_days_late = $basket->late_since_days;
132 Return the number of days the basket is late.
134 Return implicit undef if the basket is not closed.
138 sub late_since_days
{
140 return unless $self->closedate;
141 return dt_from_string
->delta_days(dt_from_string
($self->closedate))->delta_days();
146 my $authorizer = $basket->authorizer;
148 Returns the patron who authorized/created this basket.
154 # FIXME We should use a DBIC rs, but the FK is missing
155 return unless $self->authorisedby;
156 return scalar Koha
::Patrons
->find($self->authorisedby);
161 if ( $basket->is_closed ) { ... }
163 Returns a boolean value representing if the basket is closed.
170 return ($self->closedate) ?
1 : 0;
177 Close the basket and mark all open orders as ordered.
179 A I<Koha::Exceptions::Acquisition::Basket::AlreadyClosed> exception is thrown
180 if the basket is already closed.
187 Koha
::Exceptions
::Acquisition
::Basket
::AlreadyClosed
->throw
190 $self->_result->result_source->schema->txn_do(
192 my $open_orders = $self->orders->search(
194 orderstatus
=> { not_in
=> [ 'complete', 'cancelled' ] }
197 # Mark open orders as ordered
198 $open_orders->update({ orderstatus
=> 'ordered' }, { no_triggers
=> 1 });
200 $self->set({ closedate
=> \'NOW
()' })->store;
209 my $json = $basket->to_api;
211 Overloaded method that returns a JSON representation of the Koha::Acquisition::Basket object,
212 suitable for API output.
217 my ( $self, $params ) = @_;
219 my $json = $self->SUPER::to_api( $params );
221 $json->{closed} = ( $self->closedate )
228 =head3 to_api_mapping
230 This method returns the mapping for representing a Koha::Acquisition::Basket object
237 basketno => 'basket_id
',
238 basketname => 'name
',
239 booksellernote => 'vendor_note
',
240 contractnumber => 'contract_id
',
241 creationdate => 'creation_date
',
242 closedate => 'close_date
',
243 booksellerid => 'vendor_id
',
244 authorisedby => 'creator_id
',
245 booksellerinvoicenumber => undef,
246 basketgroupid => 'basket_group_id
',
247 deliveryplace => 'delivery_library_id
',
248 billingplace => 'billing_library_id
',
249 branch => 'library_id
',
250 is_standing => 'standing
'
254 =head2 Internal methods
266 Aleisha Amohia <aleisha@catalyst.net.nz>