Bug 14544: Get rid of AddShelf
[koha.git] / Koha / Virtualshelf.pm
1 package Koha::Virtualshelf;
2
3 # This file is part of Koha.
4 #
5 # Koha is free software; you can redistribute it and/or modify it under the
6 # terms of the GNU General Public License as published by the Free Software
7 # Foundation; either version 3 of the License, or (at your option) any later
8 # version.
9 #
10 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
11 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License along
15 # with Koha; if not, write to the Free Software Foundation, Inc.,
16 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17
18 use Modern::Perl;
19
20 use Carp;
21
22 use Koha::Database;
23 use Koha::DateUtils qw( dt_from_string );
24 use Koha::Exception::DuplicateObject;
25
26 use base qw(Koha::Object);
27
28 =head1 NAME
29
30 Koha::Virtualshelf - Koha Virtualshelf Object class
31
32 =head1 API
33
34 =head2 Class Methods
35
36 =cut
37
38 =head3 type
39
40 =cut
41
42 our $PRIVATE = 1;
43 our $PUBLIC = 2;
44
45 sub store {
46     my ( $self ) = @_;
47
48     unless ( $self->is_shelfname_valid ) {
49         Koha::Exceptions::Virtualshelves::DuplicateObject->throw;
50     }
51
52     $self->allow_add( 0 )
53         unless defined $self->allow_add;
54     $self->allow_delete_own( 1 )
55         unless defined $self->allow_delete_own;
56     $self->allow_delete_other( 0 )
57         unless defined $self->allow_delete_other;
58
59     $self->created_on( dt_from_string );
60
61     return $self->SUPER::store( $self );
62 }
63
64 sub is_shelfname_valid {
65     my ( $self ) = @_;
66
67     my $conditions = {
68         shelfname => $self->shelfname,
69         ( $self->shelfnumber ? ( "me.shelfnumber" => { '!=', $self->shelfnumber } ) : () ),
70     };
71
72     if ( $self->category == $PRIVATE and defined $self->owner ) {
73         $conditions->{-or} = {
74             "virtualshelfshares.borrowernumber" => $self->owner,
75             "me.owner" => $self->owner,
76         };
77         $conditions->{category} = $PRIVATE;
78     }
79     elsif ( $self->category == $PRIVATE and not defined $self->owner ) {
80         $conditions->{owner} = undef;
81         $conditions->{category} = $PRIVATE;
82     }
83     else {
84         $conditions->{category} = $PUBLIC;
85     }
86
87     my $count = Koha::Virtualshelves->search(
88         $conditions,
89         {
90             join => 'virtualshelfshares',
91         }
92     )->count;
93     return $count ? 0 : 1;
94 }
95
96 sub type {
97     return 'Virtualshelve';
98 }
99
100 1;