@@ -, +, @@ 3 baskets.. one with create items on ordering, one with create items on receiving and finally one with create items when cataloguing click on "Receive selected" page same a. For orders that where created through suggestion, check that the b. For orders that where created through subscriptions, check that c. For orders that don't come from subscription and creates there items on ordering, Receipt history d. For orders that don't come from subscription and creates there e. For orders that don't come from subscription and creates there f. Any changes made in quantity (received or ordered) or funds in the modal should be page items to receive) the save button should be disabled and warnings --- Koha/Acquisition/Order.pm | 15 + Koha/REST/V1/Acquisitions/Orders.pm | 2 +- Koha/Schema/Result/Aqorder.pm | 20 + acqui/orderreceive.pl | 96 +- api/v1/swagger/definitions/order.yaml | 5 + api/v1/swagger/paths/acquisitions_orders.yaml | 5 + .../lib/datatables/dataTables.select.min.js | 38 + .../lib/datatables/select.dataTables.min.css | 1 + .../prog/en/includes/datatables.inc | 1 + .../prog/en/includes/doc-head-close.inc | 1 + .../prog/en/modules/acqui/orderreceive.tt | 1132 ++++++++++++++++- .../prog/en/modules/acqui/parcel.tt | 68 +- t/db_dependent/Koha/Acquisition/Order.t | 1 + t/db_dependent/Koha/Item.t | 38 +- 14 files changed, 1339 insertions(+), 84 deletions(-) mode change 100755 => 100644 acqui/orderreceive.pl create mode 100644 koha-tmpl/intranet-tmpl/lib/datatables/dataTables.select.min.js create mode 100644 koha-tmpl/intranet-tmpl/lib/datatables/select.dataTables.min.css --- a/Koha/Acquisition/Order.pm +++ a/Koha/Acquisition/Order.pm @@ -33,6 +33,7 @@ use Koha::Biblios; use Koha::Holds; use Koha::Items; use Koha::Number::Price; +use Koha::Patrons; use Koha::Subscriptions; use base qw(Koha::Object); @@ -400,6 +401,20 @@ sub claimed_date { return $last_claim->claimed_on; } +=head3 creator + +my $creator = $order->creator; + +Retrieves patron that created this order. + +=cut + +sub creator { + my ( $self ) = @_; + my $creator_rs = $self->_result->creator; + return Koha::Patron->_new_from_dbic( $creator_rs ); +} + =head3 duplicate_to my $duplicated_order = $order->duplicate_to($basket, [$default_values]); --- a/Koha/REST/V1/Acquisitions/Orders.pm +++ a/Koha/REST/V1/Acquisitions/Orders.pm @@ -193,7 +193,7 @@ sub list { return $c->render( status => 200, - openapi => $orders->to_api({ embed => $embed }) + openapi => $c->objects->to_api($orders) ); } catch { --- a/Koha/Schema/Result/Aqorder.pm +++ a/Koha/Schema/Result/Aqorder.pm @@ -851,6 +851,26 @@ __PACKAGE__->belongs_to( }, ); +=head2 creator + +Type: belongs_to + +Related object: L + +=cut + +__PACKAGE__->belongs_to( + "creator", + "Koha::Schema::Result::Borrower", + { borrowernumber => "created_by" }, + { + is_deferrable => 1, + join_type => "LEFT", + on_delete => "SET NULL", + on_update => "CASCADE", + }, +); + __PACKAGE__->belongs_to( "subscription", "Koha::Schema::Result::Subscription", --- a/acqui/orderreceive.pl +++ a/acqui/orderreceive.pl @@ -85,6 +85,7 @@ my $invoice = GetInvoice($invoiceid); my $booksellerid = $invoice->{booksellerid}; my $freight = $invoice->{shipmentcost}; my $ordernumber = $input->param('ordernumber'); +my $multiple_orders = $input->param('multiple_orders'); my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid ); my $order = Koha::Acquisition::Orders->find( $ordernumber ); @@ -98,13 +99,61 @@ my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user( } ); -unless ( $order ) { +unless ( $order || $multiple_orders ) { output_html_with_http_headers $input, $cookie, $template->output; exit; } -# prepare the form for receiving -my $basket = $order->basket; +my $budget; +if ($order) { + + # prepare the form for receiving + my $creator = Koha::Patrons->find( $order->created_by ); + + $budget = GetBudget( $order->budget_id ); + + my $datereceived = $order->datereceived || dt_from_string; + + my $order_internalnote = $order->order_internalnote; + my $order_vendornote = $order->order_vendornote; + if ( $order->subscriptionid ) { + + # Order from a subscription, we will display an history of what has been received + my $orders = Koha::Acquisition::Orders->search( + { + subscriptionid => $order->subscriptionid, + parent_ordernumber => $order->ordernumber, + ordernumber => { '!=' => $order->ordernumber } + } + ); + if ( $order->parent_ordernumber != $order->ordernumber ) { + my $parent_order = Koha::Acquisition::Orders->find( $order->parent_ordernumber ); + $order_internalnote = $parent_order->order_internalnote; + $order_vendornote = $parent_order->order_vendornote; + } + $template->param( orders => $orders, ); + } + + my $suggestion = GetSuggestionInfoFromBiblionumber( $order->biblionumber ); + + if ($suggestion) { + $template->param( suggestion => $suggestion ); + } + + $template->param( + order => $order, + creator => $creator, + bookfund => $budget->{budget_name}, + datereceived => $datereceived, + order_internalnote => $order_internalnote, + order_vendornote => $order_vendornote, + ); +} + +if ($multiple_orders) { + $template->param( multiple_orders => $multiple_orders ); +} + my $currencies = Koha::Acquisition::Currencies->search; my $active_currency = $currencies->get_active; @@ -114,61 +163,22 @@ unless($acq_fw) { $template->param('NoACQframework' => 1); } - -my $creator = Koha::Patrons->find( $order->created_by ); - -my $budget = GetBudget( $order->budget_id ); - -my $datereceived = $order->datereceived || dt_from_string; - # get option values for TaxRates syspref my @gst_values = map { option => $_ + 0.0 }, split( '\|', C4::Context->preference("TaxRates") ); -my $order_internalnote = $order->order_internalnote; -my $order_vendornote = $order->order_vendornote; -if ( $order->subscriptionid ) { - # Order from a subscription, we will display an history of what has been received - my $orders = Koha::Acquisition::Orders->search( - { - subscriptionid => $order->subscriptionid, - parent_ordernumber => $order->ordernumber, - ordernumber => { '!=' => $order->ordernumber } - } - ); - if ( $order->parent_ordernumber != $order->ordernumber ) { - my $parent_order = Koha::Acquisition::Orders->find($order->parent_ordernumber); - $order_internalnote = $parent_order->order_internalnote; - $order_vendornote = $parent_order->order_vendornote; - } - $template->param( - orders => $orders, - ); -} - $template->param( - order => $order, freight => $freight, name => $bookseller->name, active_currency => $active_currency, currencies => $currencies->search({ rate => { '!=' => 1 } }), invoiceincgst => $bookseller->invoiceincgst, - bookfund => $budget->{budget_name}, - creator => $creator, invoiceid => $invoice->{invoiceid}, invoice => $invoice->{invoicenumber}, - datereceived => $datereceived, - order_internalnote => $order_internalnote, - order_vendornote => $order_vendornote, gst_values => \@gst_values, ); -my $suggestion = GetSuggestionInfoFromBiblionumber($order->biblionumber); -if ( $suggestion ) { - $template->param( suggestion => $suggestion ); -} - my $patron = Koha::Patrons->find( $loggedinuser )->unblessed; my %budget_loops; my $budgets = GetBudgetHierarchy( undef, undef, undef, 1 ); @@ -185,7 +195,7 @@ foreach my $budget (@{$budgets}) { b_sort1_authcat => $budget->{'sort1_authcat'}, b_sort2_authcat => $budget->{'sort2_authcat'}, b_active => $budget->{budget_period_active}, - b_sel => ( $budget->{budget_id} == $order->budget_id ) ? 1 : 0, + # b_sel => ( $budget->{budget_id} == $order->budget_id ) ? 1 : 0, b_level => $budget->{budget_level}, }; } --- a/api/v1/swagger/definitions/order.yaml +++ a/api/v1/swagger/definitions/order.yaml @@ -254,4 +254,9 @@ properties: type: - object - "null" + creator: + type: + - object + - "null" + description: Patron that created the order additionalProperties: false --- a/api/v1/swagger/paths/acquisitions_orders.yaml +++ a/api/v1/swagger/paths/acquisitions_orders.yaml @@ -59,10 +59,15 @@ - biblio.holds+count - biblio.items+count - biblio.suggestions.suggester + - creator - fund + - fund.budget - current_item_level_holds+count - invoice - items + - items.home_branch + - items.holding_branch + - items.itemtype - items+strings - subscription collectionFormat: csv --- a/koha-tmpl/intranet-tmpl/lib/datatables/dataTables.select.min.js +++ a/koha-tmpl/intranet-tmpl/lib/datatables/dataTables.select.min.js @@ -0,0 +1,38 @@ +/*! + Copyright 2015-2019 SpryMedia Ltd. + + This source file is free software, available under the following license: + MIT license - http://datatables.net/license/mit + + This source file is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. + + For details please refer to: http://www.datatables.net/extensions/select + Select for DataTables 1.3.1 + 2015-2019 SpryMedia Ltd - datatables.net/license/mit +*/ +(function(f){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(k){return f(k,window,document)}):"object"===typeof exports?module.exports=function(k,p){k||(k=window);p&&p.fn.dataTable||(p=require("datatables.net")(k,p).$);return f(p,k,k.document)}:f(jQuery,window,document)})(function(f,k,p,h){function z(a,b,c){var d=function(c,b){if(c>b){var d=b;b=c;c=d}var e=!1;return a.columns(":visible").indexes().filter(function(a){a===c&&(e=!0);return a===b?(e=!1,!0):e})};var e= +function(c,b){var d=a.rows({search:"applied"}).indexes();if(d.indexOf(c)>d.indexOf(b)){var e=b;b=c;c=e}var f=!1;return d.filter(function(a){a===c&&(f=!0);return a===b?(f=!1,!0):f})};a.cells({selected:!0}).any()||c?(d=d(c.column,b.column),c=e(c.row,b.row)):(d=d(0,b.column),c=e(0,b.row));c=a.cells(c,d).flatten();a.cells(b,{selected:!0}).any()?a.cells(c).deselect():a.cells(c).select()}function v(a){var b=a.settings()[0]._select.selector;f(a.table().container()).off("mousedown.dtSelect",b).off("mouseup.dtSelect", +b).off("click.dtSelect",b);f("body").off("click.dtSelect"+a.table().node().id.replace(/[^a-zA-Z0-9\-_]/g,"-"))}function A(a){var b=f(a.table().container()),c=a.settings()[0],d=c._select.selector,e;b.on("mousedown.dtSelect",d,function(a){if(a.shiftKey||a.metaKey||a.ctrlKey)b.css("-moz-user-select","none").one("selectstart.dtSelect",d,function(){return!1});k.getSelection&&(e=k.getSelection())}).on("mouseup.dtSelect",d,function(){b.css("-moz-user-select","")}).on("click.dtSelect",d,function(c){var b= +a.select.items();if(e){var d=k.getSelection();if((!d.anchorNode||f(d.anchorNode).closest("table")[0]===a.table().node())&&d!==e)return}d=a.settings()[0];var l=f.trim(a.settings()[0].oClasses.sWrapper).replace(/ +/g,".");if(f(c.target).closest("div."+l)[0]==a.table().container()&&(l=a.cell(f(c.target).closest("td, th")),l.any())){var g=f.Event("user-select.dt");m(a,g,[b,l,c]);g.isDefaultPrevented()||(g=l.index(),"row"===b?(b=g.row,w(c,a,d,"row",b)):"column"===b?(b=l.index().column,w(c,a,d,"column", +b)):"cell"===b&&(b=l.index(),w(c,a,d,"cell",b)),d._select_lastCell=g)}});f("body").on("click.dtSelect"+a.table().node().id.replace(/[^a-zA-Z0-9\-_]/g,"-"),function(b){!c._select.blurable||f(b.target).parents().filter(a.table().container()).length||0===f(b.target).parents("html").length||f(b.target).parents("div.DTE").length||r(c,!0)})}function m(a,b,c,d){if(!d||a.flatten().length)"string"===typeof b&&(b+=".dt"),c.unshift(a),f(a.table().node()).trigger(b,c)}function B(a){var b=a.settings()[0];if(b._select.info&& +b.aanFeatures.i&&"api"!==a.select.style()){var c=a.rows({selected:!0}).flatten().length,d=a.columns({selected:!0}).flatten().length,e=a.cells({selected:!0}).flatten().length,l=function(b,c,d){b.append(f('').append(a.i18n("select."+c+"s",{_:"%d "+c+"s selected",0:"",1:"1 "+c+" selected"},d)))};f.each(b.aanFeatures.i,function(b,a){a=f(a);b=f('');l(b,"row",c);l(b,"column",d);l(b,"cell",e);var g=a.children("span.select-info");g.length&&g.remove(); +""!==b.text()&&a.append(b)})}}function D(a){var b=new g.Api(a);a.aoRowCreatedCallback.push({fn:function(b,d,e){d=a.aoData[e];d._select_selected&&f(b).addClass(a._select.className);b=0;for(e=a.aoColumns.length;bg){var u=g;g=d;d=u}e.splice(g+1,e.length);e.splice(0,d)}else e.splice(f.inArray(c,e)+1,e.length);a[b](c,{selected:!0}).any()?(e.splice(f.inArray(c,e),1),a[b+"s"](e).deselect()):a[b+"s"](e).select()}function r(a,b){if(b||"single"===a._select.style)a=new g.Api(a),a.rows({selected:!0}).deselect(),a.columns({selected:!0}).deselect(),a.cells({selected:!0}).deselect()}function w(a,b,c,d,e){var f=b.select.style(),g=b.select.toggleable(),h=b[d](e,{selected:!0}).any();if(!h||g)"os"===f?a.ctrlKey|| +a.metaKey?b[d](e).select(!h):a.shiftKey?"cell"===d?z(b,e,c._select_lastCell||null):C(b,d,e,c._select_lastCell?c._select_lastCell[d]:null):(a=b[d+"s"]({selected:!0}),h&&1===a.flatten().length?b[d](e).deselect():(a.deselect(),b[d](e).select())):"multi+shift"==f?a.shiftKey?"cell"===d?z(b,e,c._select_lastCell||null):C(b,d,e,c._select_lastCell?c._select_lastCell[d]:null):b[d](e).select(!h):b[d](e).select(!h)}function t(a,b){return function(c){return c.i18n("buttons."+a,b)}}function x(a){a=a._eventNamespace; +return"draw.dt.DT"+a+" select.dt.DT"+a+" deselect.dt.DT"+a}function E(a,b){return-1!==f.inArray("rows",b.limitTo)&&a.rows({selected:!0}).any()||-1!==f.inArray("columns",b.limitTo)&&a.columns({selected:!0}).any()||-1!==f.inArray("cells",b.limitTo)&&a.cells({selected:!0}).any()?!0:!1}var g=f.fn.dataTable;g.select={};g.select.version="1.3.1";g.select.init=function(a){var b=a.settings()[0],c=b.oInit.select,d=g.defaults.select;c=c===h?d:c;d="row";var e="api",l=!1,u=!0,k=!0,m="td, th",p="selected",n=!1; +b._select={};!0===c?(e="os",n=!0):"string"===typeof c?(e=c,n=!0):f.isPlainObject(c)&&(c.blurable!==h&&(l=c.blurable),c.toggleable!==h&&(u=c.toggleable),c.info!==h&&(k=c.info),c.items!==h&&(d=c.items),e=c.style!==h?c.style:"os",n=!0,c.selector!==h&&(m=c.selector),c.className!==h&&(p=c.className));a.select.selector(m);a.select.items(d);a.select.style(e);a.select.blurable(l);a.select.toggleable(u);a.select.info(k);b._select.className=p;f.fn.dataTable.ext.order["select-checkbox"]=function(b,a){return this.api().column(a, +{order:"index"}).nodes().map(function(a){return"row"===b._select.items?f(a).parent().hasClass(b._select.className):"cell"===b._select.items?f(a).hasClass(b._select.className):!1})};!n&&f(a.table().node()).hasClass("selectable")&&a.select.style("os")};f.each([{type:"row",prop:"aoData"},{type:"column",prop:"aoColumns"}],function(a,b){g.ext.selector[b.type].push(function(a,d,e){d=d.selected;var c=[];if(!0!==d&&!1!==d)return e;for(var f=0,g=e.length;ftr.selected,table.dataTable tbody>tr>.selected{background-color:#B0BED9}table.dataTable.stripe tbody>tr.odd.selected,table.dataTable.stripe tbody>tr.odd>.selected,table.dataTable.display tbody>tr.odd.selected,table.dataTable.display tbody>tr.odd>.selected{background-color:#acbad4}table.dataTable.hover tbody>tr.selected:hover,table.dataTable.hover tbody>tr>.selected:hover,table.dataTable.display tbody>tr.selected:hover,table.dataTable.display tbody>tr>.selected:hover{background-color:#aab7d1}table.dataTable.order-column tbody>tr.selected>.sorting_1,table.dataTable.order-column tbody>tr.selected>.sorting_2,table.dataTable.order-column tbody>tr.selected>.sorting_3,table.dataTable.order-column tbody>tr>.selected,table.dataTable.display tbody>tr.selected>.sorting_1,table.dataTable.display tbody>tr.selected>.sorting_2,table.dataTable.display tbody>tr.selected>.sorting_3,table.dataTable.display tbody>tr>.selected{background-color:#acbad5}table.dataTable.display tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody>tr.odd>.selected,table.dataTable.order-column.stripe tbody>tr.odd>.selected{background-color:#a6b4cd}table.dataTable.display tbody>tr.even>.selected,table.dataTable.order-column.stripe tbody>tr.even>.selected{background-color:#acbad5}table.dataTable.display tbody>tr.selected:hover>.sorting_1,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody>tr.selected:hover>.sorting_2,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody>tr.selected:hover>.sorting_3,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_3{background-color:#a5b2cb}table.dataTable.display tbody>tr:hover>.selected,table.dataTable.display tbody>tr>.selected:hover,table.dataTable.order-column.hover tbody>tr:hover>.selected,table.dataTable.order-column.hover tbody>tr>.selected:hover{background-color:#a2aec7}table.dataTable tbody td.select-checkbox,table.dataTable tbody th.select-checkbox{position:relative}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody td.select-checkbox:after,table.dataTable tbody th.select-checkbox:before,table.dataTable tbody th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody th.select-checkbox:before{content:' ';margin-top:-6px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable tr.selected td.select-checkbox:after,table.dataTable tr.selected th.select-checkbox:after{content:'\2714';margin-top:-11px;margin-left:-4px;text-align:center;text-shadow:1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}} --- a/koha-tmpl/intranet-tmpl/prog/en/includes/datatables.inc +++ a/koha-tmpl/intranet-tmpl/prog/en/includes/datatables.inc @@ -2,4 +2,5 @@ [% USE Asset %] [% INCLUDE 'format_price.inc' %] [% Asset.js("lib/datatables/datatables.min.js") | $raw %] +[% Asset.js("lib/datatables/dataTables.select.min.js") | $raw %] [% Asset.js("js/datatables.js") | $raw %] --- a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc +++ a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc @@ -23,6 +23,7 @@ [% Asset.css("lib/bootstrap/bootstrap-theme.min.css") | $raw %] [% Asset.css("lib/font-awesome/css/font-awesome.min.css") | $raw %] [% Asset.css("lib/datatables/datatables.min.css") | $raw %] +[% Asset.css("lib/datatables/select.dataTables.min.css") | $raw %] [% Asset.css("css/print.css", { media = "print" }) | $raw %] [% INCLUDE intranetstylesheet.inc %] [% IF ( bidi ) %][% Asset.css("css/right-to-left.css") | $raw %][% END %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt @@ -33,7 +33,7 @@ Receive items from : [% name | html %] [% IF ( invoice ) %] [[% invoice | html %]] - [% END %] (order #[% order.ordernumber | html %]) + [% END %] (order #[% order.ordernumber || multiple_orders | html %]) @@ -42,13 +42,13 @@
- [% AcqCreateItem = order.basket.effective_create_items %]
-

Receive items from : [% name | html %] [% IF ( invoice ) %][[% invoice | html %]] [% END %] (order #[% order.ordernumber | html %])

+

Receive items from : [% name | html %] [% IF ( invoice ) %][[% invoice | html %]] [% END %] (order #[% order.ordernumber || multiple_orders | html %])

[% IF ( order ) %] + [% AcqCreateItem = order.basket.effective_create_items %]
@@ -459,6 +459,277 @@ Cancel
+[% ELSIF multiple_orders %] + + + + + + + + + + + + +
Order + TitleAuthorISBNDate receivedFundQuantity 
+ +
+
+
+ + Return +
+
Job progress:
0%
+
+ + [% ELSE %] This ordernumber does not exist. [% END %] @@ -474,11 +745,49 @@
[% MACRO jsinclude BLOCK %] [% Asset.js("js/acquisitions-menu.js") | $raw %] -[% INCLUDE 'calendar.inc' %] + [% INCLUDE 'calendar.inc' %] [% Asset.js("js/additem.js") | $raw %] [% Asset.js("js/cataloging.js") | $raw %] [% INCLUDE 'select2.inc' %] + [% INCLUDE 'datatables.inc' %] + [% INCLUDE 'js-date-format.inc' %] + [% INCLUDE 'format_price.inc' %] + [% Asset.js("lib/jquery/plugins/jquery.dataTables.columnFilter.js") | $raw %] + [% END %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt @@ -119,6 +119,9 @@ + [% IF Koha.Preference('AcqReceiveMultipleOrderLines') %] + + [% END %] @@ -134,6 +137,11 @@
Basket Basket group Order line
+ [% IF Koha.Preference('AcqReceiveMultipleOrderLines') %] +
+ +
+ [% END %]
[% ELSE %]

@@ -346,8 +354,10 @@ [% Asset.js("js/acquisitions-menu.js") | $raw %] [% INCLUDE 'datatables.inc' %] [% Asset.js("lib/jquery/plugins/jquery.dataTables.columnFilter.js") | $raw %] +