Bug 12896: Move the bookseller-related code into Koha::Acquisition::Bookseller
[koha.git] / Koha / Acquisition / Bookseller.pm
1 package Koha::Acquisition::Bookseller;
2
3 use Modern::Perl;
4
5 use Koha::Database;
6 use Koha::DateUtils qw( dt_from_string output_pref );
7
8 use Carp qw( croak );
9
10 use base qw( Class::Accessor );
11
12 use C4::Bookseller::Contact;
13
14 sub fetch {
15     my ( $class, $params ) = @_;
16     my $id = $params->{id};
17     return unless $id;
18     my $schema = Koha::Database->new->schema;
19
20     my $bookseller =
21       $schema->resultset('Aqbookseller')->find( { id => $id },
22         { result_class => 'DBIx::Class::ResultClass::HashRefInflator' } );
23
24     return unless $bookseller;
25
26     my $self = $class->new( $bookseller );
27     $self->contacts; # TODO: This should be generated on demand.
28     return $self;
29 }
30
31 sub search {
32     my ( $class, $params ) = @_;
33
34     croak "Cannot search on other fields than aqbooksellers.name" if $params and grep { $_ !~ /^name$/ } keys %$params;
35
36     my $schema = Koha::Database->new->schema;
37
38     my $search_params;
39     while ( my ( $field, $value ) = each %$params ) {
40         if ( $field eq 'name' ) {
41             # Use "like" if search on name
42             $search_params->{name} = { -like => "%$value%" };
43         } else {
44             $search_params->{$field} = $value;
45         }
46     }
47     my $rs = $schema->resultset('Aqbookseller')->search(
48         $search_params,
49         { order_by => 'name' }
50     );
51
52     my @booksellers;
53     while ( my $b = $rs->next ) {
54         my $t = Koha::Acquisition::Bookseller->fetch({ id => $b->id });
55         push @booksellers, $t;
56     }
57     return @booksellers;
58 }
59
60 sub basket_count {
61     my ( $self ) = @_;
62     my $schema = Koha::Database->new->schema;
63
64     return $schema->resultset('Aqbasket')->count( { booksellerid => $self->{id} });
65 }
66
67 sub subscription_count {
68     my ( $self ) = @_;
69
70     my $schema = Koha::Database->new->schema;
71
72     return $schema->resultset('Subscription')->count( { aqbooksellerid => $self->{id} });
73 }
74
75 sub contacts {
76     my ( $self ) = @_;
77
78     return $self->{contacts} if $self->{contacts};
79     $self->{contacts} = C4::Bookseller::Contact->get_from_bookseller($self->{id});
80     return $self->{contacts};
81 }
82
83 sub insert {
84     my ($self) = @_;
85
86     # if these parameters are missing, we can't continue
87     for my $key (qw( id )) {
88         croak "Cannot insert bookseller: Mandatory parameter $key is missing"
89           unless $self->{$key};
90     }
91
92     $self->{quantityreceived} ||= 0;
93     $self->{entrydate} ||=
94       output_pref( { dt => dt_from_string, dateformat => 'iso' } );
95
96     my $schema  = Koha::Database->new->schema;
97     my @columns = $schema->source('Aqorder')->columns;
98     my $rs = $schema->resultset('Aqorder')->create(
99         {
100             map {
101                 exists $self->{$_} ? ( $_ => $self->{$_} ) : ()
102             } @columns
103         }
104     );
105     $self->{ordernumber} = $rs->id;
106
107     unless ( $self->{parent_ordernumber} ) {
108         $rs->update( { parent_ordernumber => $self->{ordernumber} } );
109     }
110
111     return $self;
112 }
113
114 # TODO Move code from ModBookseller
115 sub update {
116     die "not implemented yet";
117 }
118
119 # TODO Move code from DelBookseller
120 sub delete {
121     die "not implemented yet";
122 }
123
124 1;