@@ -, +, @@ --- C4/Acquisition.pm | 73 +++++++++++++++++++- installer/data/mysql/kohastructure.sql | 1 + installer/data/mysql/updatedatabase.pl | 10 +++ .../intranet-tmpl/prog/en/modules/acqui/basket.tt | 6 ++ .../intranet-tmpl/prog/en/modules/acqui/parcel.tt | 9 ++- 5 files changed, 95 insertions(+), 4 deletions(-) --- a/C4/Acquisition.pm +++ a/C4/Acquisition.pm @@ -55,7 +55,7 @@ BEGIN { &GetOrderNumber &GetLateOrders &GetOrderFromItemnumber &SearchOrder &GetHistory &GetRecentAcqui &ModReceiveOrder &ModOrderBiblioitemNumber - &GetCancelledOrders + &GetCancelledOrders &TransferOrder &NewOrderItem &ModOrderItem @@ -1295,6 +1295,77 @@ sub DelOrder { } +=head3 TransferOrder + + my $newordernumber = TransferOrder($ordernumber, $basketno); + +Transfer an order line to a basket. +Mark $ordernumber as cancelled with an internal note 'Cancelled and transfered +to BOOKSELLER on DATE' and create new order with internal note +'Transfered from BOOKSELLER on DATE'. +Move all attached items to the new order. +Received orders cannot be transfered. +Return the ordernumber of created order. + +=cut + +sub TransferOrder { + my ($ordernumber, $basketno) = @_; + + return unless $ordernumber or $basketno; + + my $order = GetOrder( $ordernumber ); + return if $order->{datereceived}; + + my $today = C4::Dates->new()->output("iso"); + my $query = qq{ + SELECT aqbooksellers.name + FROM aqorders + LEFT JOIN aqbasket ON aqorders.basketno = aqbasket.basketno + LEFT JOIN aqbooksellers ON aqbasket.booksellerid = aqbooksellers.id + WHERE aqorders.ordernumber = ? + }; + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare($query); + $sth->execute($ordernumber); + my ($booksellerfromname) = $sth->fetchrow_array; + + $query = qq{ + SELECT aqbooksellers.name + FROM aqbasket + LEFT JOIN aqbooksellers ON aqbasket.booksellerid = aqbooksellers.id + WHERE aqbasket.basketno = ? + }; + $sth = $dbh->prepare($query); + $sth->execute($basketno); + my ($booksellertoname) = $sth->fetchrow_array; + + $query = qq{ + UPDATE aqorders + SET datecancellationprinted = CAST(NOW() AS date), + internalnotes = ? + WHERE ordernumber = ? + }; + $sth = $dbh->prepare($query); + $sth->execute("Cancelled and transfered to $booksellertoname on $today", $ordernumber); + + delete $order->{'ordernumber'}; + $order->{'basketno'} = $basketno; + $order->{'internalnotes'} = "Transfered from $booksellerfromname on $today"; + my $newordernumber; + (undef, $newordernumber) = NewOrder($order); + + $query = qq{ + UPDATE aqorders_items + SET ordernumber = ? + WHERE ordernumber = ? + }; + $sth = $dbh->prepare($query); + $sth->execute($newordernumber, $ordernumber); + + return $newordernumber; +} + =head2 FUNCTIONS ABOUT PARCELS =cut --- a/installer/data/mysql/kohastructure.sql +++ a/installer/data/mysql/kohastructure.sql @@ -2722,6 +2722,7 @@ CREATE TABLE `aqorders` ( `cancelledby` varchar(10) default NULL, `datecancellationprinted` date default NULL, `notes` mediumtext, + internalnotes mediumtext DEFAULT NULL, `supplierreference` mediumtext, `purchaseordernumber` mediumtext, `subscription` tinyint(1) default NULL, --- a/installer/data/mysql/updatedatabase.pl +++ a/installer/data/mysql/updatedatabase.pl @@ -5146,6 +5146,16 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { SetVersion($DBversion); } +$DBversion = "XXX"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { + $dbh->do(qq{ + ALTER TABLE aqorders + ADD COLUMN internalnotes MEDIUMTEXT DEFAULT NULL AFTER notes + }); + print "Upgrade to $DBversion done (Add internalnotes field in aqorders table)\n"; + SetVersion($DBversion); +} + =head1 FUNCTIONS =head2 DropAllForeignKeys($table) --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt @@ -297,6 +297,7 @@ [Add note] [% END %]

+

[% books_loo.internalnotes %]

[% books_loo.rrp %] [% books_loo.ecost %] @@ -307,6 +308,10 @@ [% UNLESS ( closedate ) %] Modify + [% UNLESS (books_loo.order_received) %] +
+ Transfer + [% END %] [% IF ( books_loo.left_holds_on_order ) %] @@ -378,6 +383,7 @@ [% IF ( order.publicationyear ) %], [% order.publicationyear %][% END %] [% IF ( books_loo.editionstatement ) %], [% books_loo.editionstatement %][% END %]

+

[% order.internalnotes %]

[% order.rrp %]

[% order.ecost %]

--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt @@ -106,9 +106,10 @@ + '' + order.ecost + '' + '' + order.ordertotal + '' + '' - + 'Receive /' - + 'Cancel' - + '').appendTo("table#pendingt"); + + 'Receive' + + '
' + + 'Transfer' + + '').appendTo("table#pendingt"); } // If nothing has been found, we tell the user so @@ -259,6 +260,8 @@ [% loop_order.ordertotal %] Receive +
+ Transfer --