Bug 15531: Add support for standing orders
[koha.git] / Koha / Acquisition / Order.pm
1 package Koha::Acquisition::Order;
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 # TODO fetch order from itemnumber (GetOrderFromItemnnumber)
13 # TODO Move code from GetOrder
14 sub fetch {
15     my ( $class, $params ) = @_;
16     my $ordernumber = $params->{ordernumber};
17     return unless $ordernumber;
18     my $schema = Koha::Database->new->schema;
19
20     my $order =
21       $schema->resultset('Aqorder')->find( { ordernumber => $ordernumber },
22         { result_class => 'DBIx::Class::ResultClass::HashRefInflator' } );
23     return $class->new( $order );
24 }
25
26 sub insert {
27     my ($self) = @_;
28
29     # if these parameters are missing, we can't continue
30     for my $key (qw( basketno biblionumber budget_id )) {
31         croak "Cannot insert order: Mandatory parameter $key is missing"
32           unless $self->{$key};
33     }
34
35     my $schema  = Koha::Database->new->schema;
36     if ( !$self->{quantity} && !$schema->resultset('Aqbasket')->find( $self->{basketno} )->is_standing ) {
37         croak "Cannot insert order: Quantity is mandatory for non-standing orders";
38     }
39
40     $self->{quantityreceived} ||= 0;
41     $self->{entrydate} ||=
42       output_pref( { dt => dt_from_string, dateformat => 'iso' } );
43
44     my @columns = $schema->source('Aqorder')->columns;
45
46     $self->{ordernumber} ||= undef;
47
48     my $rs = $schema->resultset('Aqorder')->create(
49         {
50             map {
51                 exists $self->{$_} ? ( $_ => $self->{$_} ) : ()
52             } @columns
53         }
54     );
55     $self->{ordernumber} = $rs->id;
56
57     unless ( $self->{parent_ordernumber} ) {
58         $self->{parent_ordernumber} = $self->{ordernumber};
59         $rs->update( { parent_ordernumber => $self->{parent_ordernumber} } );
60     }
61
62     return $self;
63 }
64
65 sub add_item {
66     my ( $self, $itemnumber )  = @_;
67     my $schema = Koha::Database->new->schema;
68     my $rs = $schema->resultset('AqordersItem');
69     $rs->create({ ordernumber => $self->{ordernumber}, itemnumber => $itemnumber });
70 }
71
72 # TODO Move code from ModItemOrder
73 sub update_item {
74     die "not implemented yet";
75 }
76
77 sub del_item {
78     die "not implemented yet";
79 }
80
81 # TODO Move code from ModOrder
82 sub update {
83     die "not implemented yet";
84 }
85
86 # TODO Move code from DelOrder
87 sub delete {
88     die "not implemented yet";
89 }
90
91 # TODO Move code from TransferOrder
92 sub transfer {
93     die "not implemented yet";
94 }
95
96 1;