@@ -, +, @@ 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 | 1694 +++++++++++------ .../prog/en/modules/acqui/parcel.tt | 57 +- .../admin/preferences/acquisitions.pref | 1 - t/db_dependent/Koha/Acquisition/Fund.t | 15 +- t/db_dependent/Koha/Acquisition/Order.t | 17 +- t/db_dependent/Koha/Item.t | 5 + 16 files changed, 1378 insertions(+), 595 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 mode change 100755 => 100644 t/db_dependent/Koha/Item.t --- 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 @@ -860,6 +860,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 @@ -259,4 +259,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 @@ -27,9 +27,9 @@ [% END %] [% WRAPPER breadcrumb_item bc_active= 1 %] [% IF ( invoice ) %] - Receive items from: [% name | html %] [[% invoice | html %]] (order #[% order.ordernumber | html %]) + Receive items from: [% name | html %] [[% invoice | html %]] (order #[% multiple_orders | html %]) [% ELSE %] - Receive items from: [% name | html %] (order #[% order.ordernumber | html %]) + Receive items from: [% name | html %] (order #[% multiple_orders | html %]) [% END %] [% END %] [% END #/ WRAPPER breadcrumbs %] @@ -37,423 +37,301 @@
- [% AcqCreateItem = order.basket.effective_create_items %]
-

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

- -[% IF ( order ) %] -
-
-
- - -
- Catalog details -
    -
  1. - Title: - [% INCLUDE 'biblio-title.inc' biblio=order.biblio link = 1 %] -
  2. -
  3. Author: - [% order.biblio.author | html %]
  4. -
  5. Copyright: - [% order.biblio.copyrightdate | html %]
  6. -
  7. ISBN: - [% order.biblio.biblioitem.isbn | html %]
  8. -
  9. Series: - [% order.biblio.seriestitle | html %]
  10. -
-
- - [% IF suggestion %] -
- Suggestion -
    -
  1. - Suggested by: - [% suggestion.surnamesuggestedby | html %][% IF suggestion.firstnamesuggestedby %], [% suggestion.firstnamesuggestedby | html %][% END %] (suggestion #[% suggestion.suggestionid | html %]) - [% IF suggestion.reason %] -
  2. - Reason: - [% SET suggestion_reasons = AuthorisedValues.GetAuthValueDropbox( 'SUGGEST' ) %] - [% SET other_reason = 1 %] - - - - [% IF other_reason %] - - [% ELSE %] - - [% END %] - Cancel - - - -
  3. - [% END %] - -
-
- [% END %] - - [% IF order.subscriptionid and orders.count %] -
- Receipt history for this subscription - - - - - - - - - - - - - - - [% FOR suborder IN orders %] - - - - - - - [% SWITCH suborder.orderstatus %] - [%# FIXME We should only see/display Complete here, right? %] - [% CASE 'new' %] - - - - - [% END %] - -
InvoiceOrder numberCreation dateReceive dateQuantity receivedStatusSpentInternal note
- [% IF suborder.invoice %] - [% IF CAN_user_acquisition %] - - [% suborder.invoice.invoicenumber | html %] - [% ELSE %] - [% suborder.invoice.invoicenumber | html %] - [% END %] - [% END %] - [% suborder.ordernumber | html %][% suborder.basket.creationdate | $KohaDates%] - [% IF suborder.datereceived %] - [% suborder.datereceived | $KohaDates %] - [% END %] - [% suborder.quantityreceived | html %] - New - [% CASE 'ordered' %] - - Ordered - [% CASE 'partial' %] - - Partial - [% CASE 'complete' %] - - Complete - [% CASE 'cancelled' %] - - Cancelled - [% END %] - - [% IF suborder.datereceived %][%# FIXME Should only be true, right? %] - [%# FIXME What if unitprice has not been filled? %] - [% suborder.unitprice_tax_excluded * suborder.quantity | $Price %] / [% suborder.unitprice_tax_included * suborder.quantity | $Price %] - [% END %] - [% suborder.order_internalnote | html %]
+

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

+ +[% IF multiple_orders %] + + + + + + + + + + + + +
Order + TitleAuthorISBNDate receivedFundQuantity 
+ +
+
+ + Cancel
- [% ELSIF (AcqCreateItem == 'receiving') %] - +
Job progress:
0%
+
- [% UNLESS order.subscriptionid %] -
- Item - [% IF ( NoACQframework ) %] -

- No ACQ framework, using default. You should create a - framework with code ACQ, the items framework would be - used -

- [% END %] -
-
- [% END %] - [% ELSIF (AcqCreateItem == 'ordering') %] - [% IF (order.items) %] -
-

Items

- - - - - - - - - - - - - - - - - - - - - - [% FOREACH item IN order.items %] - - - - - - - - - - - - - - - - - - [% END %] - -
Receive? BarcodeHome libraryCurrent libraryNot for loanRestrictedLocationCall numberCopy numberInventory numberCollectionItem typeMaterialsNotes
Edit[% item.barcode | html %][% Branches.GetName( item.homebranch ) | html %][% Branches.GetName( item.holdingbranch ) | html %][% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.notforloan', authorised_value => item.notforloan ) | html %][% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.restricted', authorised_value => item.restricted ) | html %][% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => item.location ) | html %][% item.itemcallnumber | html %][% item.copynumber | html %][% item.stocknumber | html %][% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => item.ccode ) | html %][% ItemTypes.GetDescription( item.itype ) | html %][% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.materials', authorised_value => item.materials ) | html %][% item.itemnotes | html %]
+
- -
-
- - Cancel -
+
+
[% ELSE %] This ordernumber does not exist. [% END %] @@ -469,182 +347,910 @@
[% 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 @@ -114,6 +114,7 @@ + @@ -129,6 +130,9 @@
Basket Basket group Order line
+
+ +
[% ELSE %]

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