Bugzilla – Attachment 27849 Details for
Bug 7180
Order from staged file improvements
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 7180: Order from staged file improvements
Bug-7180-Order-from-staged-file-improvements.patch (text/plain), 59.70 KB, created by
Jonathan Druart
on 2014-05-01 08:02:07 UTC
(
hide
)
Description:
Bug 7180: Order from staged file improvements
Filename:
MIME Type:
Creator:
Jonathan Druart
Created:
2014-05-01 08:02:07 UTC
Size:
59.70 KB
patch
obsolete
>From 2ba05bbcc3a542913edbcd3dd7e0fa00de0224eb Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@biblibre.com> >Date: Thu, 8 Mar 2012 17:25:06 +0100 >Subject: [PATCH] Bug 7180: Order from staged file improvements > >This patch adds: >- 1 syspref MarcFieldsToOrder >- 1 ajax script acqui/ajax-getauthvaluedropbox.pl >- 1 routine C4::Budgets::GetBudgetByCode > >Before this patch you were not able to order 1 or all the records from >your staged file. You were allowed to specify some information ("Import All" >and "Accounting details" areas) for the order. > >With this patch, the previous behaviours still exist. >But now you can *select* which records you want to ordered. >For these ones you can specify independently informations (Quantity, >price, budget, sort1 and sort2). >The cherry on the cake is that you can pre-fill these information with >values > >Test plan: >1. Fill the new syspref MarcFieldsToOrder with something like: >==BEGIN== >price: 947$c >quantity: 969$h >budget_code: 922$a >rrp: 010$d >discount: 969$d >sort1: 923$a >sort2: 924$a > >==END== >The empty line at the end is mandatory! >The budget (corresponding to your budget_code) can be filled with >authorized value categories (statistic 1 and 2). >The sort1 and sort2 values can be filled with the an authorized value >(of the category previously selected) > >2. Choose randomly one or more biblio(s) and fill fields with what is relevant. > >3. Export the biblio and import it (with the "Stage MARC records for >import" tool). > >4. Go on a basket and add an order from a staged file. Select your >staged file. > >5. Well. Now you can see your biblio (or biblios if your had exported >more than one). For each one, informations should be pre-filled with the >biblio values. The budget should be selected on the budget corresponding >to the budget_code (in the field 922$a) and the "planning values" too >(with fields 923$a and 924$a). >You can modify these values (or not) and choose a default value for >budget and planning values (in the "Accounting details" area). > >6. Save and check the prices values. Modify the order and check that >budget and sort* are good > >Prices are calculated following some parameters: >if there is no price => listprice = 0 >else => > - the gstrate value for your order is the gstrate value of the bookseller > - discount = if filled : the discount value / 100 > else: the discount value of the bookseller > - if the bookseller includes tax( List item price includes tax: Yes ) > if a discount exists: > ecost = price > rrp = ecost / ( 1 - discount ) > else: # a discount does not exist > ecost = price * ( 1 - discount ) > rrp = price > else # the bookseller does not include tax > if a discount exists: > ecost = price / ( 1 + gstrate ) > rrp = ecost / ( 1 - discount ) > else: # a discount does not exist > rrp = price / ( 1 + gstrate ) > ecost = rrp * ( 1 - discount ) > - in all cases: > listprice = rrp / currency rate > unitprice = ecost > total = ecost * quantity > >7. Retry with different parameters > >8. Check the 'Import all' action still works > >Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> > >Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de> >--- > C4/Budgets.pm | 24 + > acqui/addorderiso2709.pl | 167 +++++-- > acqui/ajax-getauthvaluedropbox.pl | 73 +++ > installer/data/mysql/updatedatabase.pl | 9 + > koha-tmpl/intranet-tmpl/prog/en/js/acq.js | 93 +--- > .../prog/en/modules/acqui/addorderiso2709.tt | 525 +++++++++++--------- > .../en/modules/admin/preferences/acquisitions.pref | 4 + > 7 files changed, 544 insertions(+), 351 deletions(-) > create mode 100755 acqui/ajax-getauthvaluedropbox.pl > >diff --git a/C4/Budgets.pm b/C4/Budgets.pm >index 91247a2..a49d798 100644 >--- a/C4/Budgets.pm >+++ b/C4/Budgets.pm >@@ -35,6 +35,7 @@ BEGIN { > > &GetBudget > &GetBudgetByOrderNumber >+ &GetBudgetByCode > &GetBudgets > &GetBudgetHierarchy > &AddBudget >@@ -695,6 +696,29 @@ sub GetBudgetByOrderNumber { > return $result; > } > >+=head2 GetBudgetByCode >+ >+ my $budget = &GetBudgetByCode($budget_code); >+ >+Retrieve all aqbudgets fields as a hashref for the budget that has >+given budget_code >+ >+=cut >+ >+sub GetBudgetByCode { >+ my ( $budget_code ) = @_; >+ >+ my $dbh = C4::Context->dbh; >+ my $query = qq{ >+ SELECT * >+ FROM aqbudgets >+ WHERE budget_code = ? >+ }; >+ my $sth = $dbh->prepare( $query ); >+ $sth->execute( $budget_code ); >+ return $sth->fetchrow_hashref; >+} >+ > =head2 GetChildBudgetsSpent > > &GetChildBudgetsSpent($budget-id); >diff --git a/acqui/addorderiso2709.pl b/acqui/addorderiso2709.pl >index 621ccfc..84c1ecb 100755 >--- a/acqui/addorderiso2709.pl >+++ b/acqui/addorderiso2709.pl >@@ -21,11 +21,11 @@ > # with Koha; if not, write to the Free Software Foundation, Inc., > # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. > >-use strict; >-use warnings; >+use Modern::Perl; > use CGI; > use Carp; > use Number::Format qw(:all); >+use YAML qw/Load/; > > use C4::Context; > use C4::Auth; >@@ -56,7 +56,7 @@ my ($template, $loggedinuser, $cookie, $userflags) = get_template_and_user({ > }); > > my $cgiparams = $input->Vars; >-my $op = $cgiparams->{'op'}; >+my $op = $cgiparams->{'op'} || ''; > my $booksellerid = $input->param('booksellerid'); > my $bookseller = GetBookSellerFromId($booksellerid); > my $data; >@@ -65,7 +65,6 @@ $template->param(scriptname => "/cgi-bin/koha/acqui/addorderiso2709.pl", > booksellerid => $booksellerid, > booksellername => $bookseller->{name}, > ); >-my $ordernumber; > > if ($cgiparams->{'import_batch_id'} && $op eq ""){ > $op = "batch_details"; >@@ -124,7 +123,7 @@ if ($op eq ""){ > loop_currencies => \@loop_currency, > ); > import_biblios_list($template, $cgiparams->{'import_batch_id'}); >- if ( C4::Context->preference('AcqCreateItem') eq 'ordering' && !$ordernumber ) { >+ if ( C4::Context->preference('AcqCreateItem') eq 'ordering' ) { > # prepare empty item form > my $cell = PrepareItemrecordDisplay( '', '', '', 'ACQ' ); > >@@ -157,19 +156,37 @@ if ($op eq ""){ > # retrieve the file you want to import > my $import_batch_id = $cgiparams->{'import_batch_id'}; > my $biblios = GetImportRecordsRange($import_batch_id); >+ my @import_record_id_selected = $input->param("import_record_id"); >+ my @quantities = $input->param('quantity'); >+ my @prices = $input->param('price'); >+ my @budgets_id = $input->param('budget_id'); >+ my @rrp = $input->param('rrp'); >+ my @discount = $input->param('discount'); >+ my @sort1 = $input->param('sort1'); >+ my @sort2 = $input->param('sort2'); >+ my $cur = GetCurrency(); > for my $biblio (@$biblios){ >- # 1st insert the biblio, or find it through matcher >+ # Check if this import_record_id was selected >+ next if not grep { $_ eq $$biblio{import_record_id} } @import_record_id_selected; > my ( $marcblob, $encoding ) = GetImportRecordMarc( $biblio->{'import_record_id'} ); > my $marcrecord = MARC::Record->new_from_usmarc($marcblob) || die "couldn't translate marc information"; > my $match = GetImportRecordMatches( $biblio->{'import_record_id'}, 1 ); > my $biblionumber=$#$match > -1?$match->[0]->{'biblionumber'}:0; >+ my $c_quantity = shift( @quantities ) || GetMarcQuantity($marcrecord, C4::Context->preference('marcflavour') ) || 1; >+ my $c_budget_id = shift( @budgets_id ) || $input->param('all_budget_id') || $budget_id; >+ my $c_rrp = shift( @rrp ); # rrp include tax >+ my $c_discount = shift ( @discount); >+ $c_discount = $c_discount / 100 if $c_discount > 100; >+ my $c_sort1 = shift( @sort1 ) || $input->param('all_sort1') || ''; >+ my $c_sort2 = shift( @sort2 ) || $input->param('all_sort2') || ''; > >+ # 1st insert the biblio, or find it through matcher > unless ( $biblionumber ) { > # add the biblio > my $bibitemnum; > > # remove ISBN - >- my ( $isbnfield, $isbnsubfield ) = GetMarcFromKohaField( 'biblioitems.isbn', '' ); >+ my ( $isbnfield, $isbnsubfield ) = GetMarcFromKohaField( 'biblioitems.isbn', '' ); > if ( $marcrecord->field($isbnfield) ) { > foreach my $field ( $marcrecord->field($isbnfield) ) { > foreach my $subfield ( $field->subfield($isbnsubfield) ) { >@@ -180,7 +197,6 @@ if ($op eq ""){ > } > } > ( $biblionumber, $bibitemnum ) = AddBiblio( $marcrecord, $cgiparams->{'frameworkcode'} || '' ); >- SetImportRecordStatus( $biblio->{'import_record_id'}, 'imported' ); > # 2nd add authorities if applicable > if (C4::Context->preference("BiblioAddsAuthorities")){ > my $headings_linked =BiblioAutoLink($marcrecord, $cgiparams->{'frameworkcode'}); >@@ -194,48 +210,54 @@ if ($op eq ""){ > # get quantity in the MARC record (1 if none) > my $quantity = GetMarcQuantity($marcrecord, C4::Context->preference('marcflavour')) || 1; > my %orderinfo = ( >- "biblionumber", $biblionumber, "basketno", $cgiparams->{'basketno'}, >- "quantity", $quantity, "branchcode", $branch, >- "budget_id", $budget_id, "uncertainprice", 1, >- "sort1", $cgiparams->{'sort1'},"sort2", $cgiparams->{'sort2'}, >- "order_internalnote", $cgiparams->{'order_internalnote'}, "budget_id", $cgiparams->{'budget_id'}, >- "currency",$cgiparams->{'currency'}, >- "order_vendornote" => $cgiparams->{'order_vendornote'}, >+ biblionumber => $biblionumber, >+ basketno => $cgiparams->{'basketno'}, >+ quantity => $c_quantity, >+ branchcode => $patron->{branchcode}, >+ budget_id => $c_budget_id, >+ uncertainprice => 1, >+ sort1 => $c_sort1, >+ sort2 => $c_sort2, >+ order_internalnote => $cgiparams->{'all_order_internalnote'}, >+ order_vendornote => $cgiparams->{'all_order_vendornote'}, >+ currency => $cgiparams->{'all_currency'}, > ); >- >- my $price = GetMarcPrice($marcrecord, C4::Context->preference('marcflavour')); >- >+ # get the price if there is one. >+ my $price= shift( @prices ) || GetMarcPrice($marcrecord, C4::Context->preference('marcflavour')); > if ($price){ >- eval { >- require C4::Acquisition; >- import C4::Acquisition qw/GetBasket/; >- }; >- if ($@){ >- croak $@; >- } >- eval { >- require C4::Bookseller; >- import C4::Bookseller qw/GetBookSellerFromId/; >- }; >- if ($@){ >- croak $@; >- } >- my $basket = GetBasket( $orderinfo{basketno} ); >- my $bookseller = GetBookSellerFromId( $basket->{booksellerid} ); >+ # in France, the cents separator is the , but sometimes, ppl use a . >+ # in this case, the price will be x100 when unformatted ! Replace the . by a , to get a proper price calculation >+ $price =~ s/\./,/ if C4::Context->preference("CurrencyFormat") eq "FR"; >+ $price = $num->unformat_number($price); > $orderinfo{gstrate} = $bookseller->{gstrate}; >- $orderinfo{rrp} = $price; >- $orderinfo{ecost} = $orderinfo{rrp} * ( 1 - $bookseller->{discount} / 100 ); >- $orderinfo{listprice} = $orderinfo{rrp}; >+ my $c = $c_discount ? $c_discount / 100 : $bookseller->{discount} / 100; >+ if ( $bookseller->{listincgst} ) { >+ if ( $c_discount ) { >+ $orderinfo{ecost} = $price; >+ $orderinfo{rrp} = $orderinfo{ecost} / ( 1 - $c ); >+ } else { >+ $orderinfo{ecost} = $price * ( 1 - $c ); >+ $orderinfo{rrp} = $price; >+ } >+ } else { >+ if ( $c_discount ) { >+ $orderinfo{ecost} = $price / ( 1 + $orderinfo{gstrate} ); >+ $orderinfo{rrp} = $orderinfo{ecost} / ( 1 - $c ); >+ } else { >+ $orderinfo{rrp} = $price / ( 1 + $orderinfo{gstrate} ); >+ $orderinfo{ecost} = $orderinfo{rrp} * ( 1 - $c ); >+ } >+ } >+ $orderinfo{listprice} = $orderinfo{rrp} / $cur->{rate}; > $orderinfo{unitprice} = $orderinfo{ecost}; >- $orderinfo{total} = $orderinfo{ecost}; >+ $orderinfo{total} = $orderinfo{ecost} * $c_quantity; > } else { >- $orderinfo{'listprice'} = 0; >+ $orderinfo{listprice} = 0; > } > > # remove uncertainprice flag if we have found a price in the MARC record > $orderinfo{uncertainprice} = 0 if $orderinfo{listprice}; >- my $basketno; >- ( $basketno, $ordernumber ) = NewOrder( \%orderinfo ); >+ my ( $basketno, $ordernumber ) = NewOrder( \%orderinfo ); > > # 4th, add items if applicable > # parse the item sent by the form, and create an item just for the import_record_id we are dealing with >@@ -255,12 +277,10 @@ if ($op eq ""){ > push @{ $item->{indicator} }, $indicator[0]; > my $xml = TransformHtmlToXml( \@tags, \@subfields, \@field_values, \@ind_tag, \@indicator ); > my $record = MARC::Record::new_from_xml( $xml, 'UTF-8' ); >- for (my $qtyloop=1;$qtyloop <=$quantity;$qtyloop++) { >+ for (my $qtyloop=1;$qtyloop <= $c_quantity;$qtyloop++) { > my ( $biblionumber, $bibitemnum, $itemnumber ) = AddItemFromMarc( $record, $biblionumber ); > NewOrderItem( $itemnumber, $ordernumber ); > } >- } else { >- SetImportRecordStatus( $biblio->{'import_record_id'}, 'imported' ); > } > } > # go to basket page >@@ -277,8 +297,8 @@ my $budget = GetBudget($budget_id); > > # build budget list > my $budget_loop = []; >-$budgets = GetBudgetHierarchy; >-foreach my $r ( @{$budgets} ) { >+my $budgets_hierarchy = GetBudgetHierarchy; >+foreach my $r ( @{$budgets_hierarchy} ) { > next unless (CanUserUseBudget($borrower, $r, $userflags)); > if ( !defined $r->{budget_amount} || $r->{budget_amount} == 0 ) { > next; >@@ -286,6 +306,8 @@ foreach my $r ( @{$budgets} ) { > push @{$budget_loop}, > { b_id => $r->{budget_id}, > b_txt => $r->{budget_name}, >+ b_sort1_authcat => $r->{'sort1_authcat'}, >+ b_sort2_authcat => $r->{'sort2_authcat'}, > b_sel => ( $r->{budget_id} == $budget_id ) ? 1 : 0, > }; > } >@@ -297,7 +319,8 @@ if ($budget) { # its a mod .. > $CGIsort1 = GetAuthvalueDropbox( $budget->{'sort1_authcat'}, $data->{'sort1'} ); > } > } elsif ( scalar(@$budgets) ) { >- $CGIsort1 = GetAuthvalueDropbox( @$budgets[0]->{'sort1_authcat'}, '' ); >+} elsif ( scalar(@$budgets_hierarchy) ) { >+ $CGIsort1 = GetAuthvalueDropbox( @$budgets_hierarchy[0]->{'sort1_authcat'}, '' ); > } > # if CGIsort is successfully fetched, the use it > # else - failback to plain input-field >@@ -312,8 +335,8 @@ if ($budget) { > if ( defined $budget->{'sort2_authcat'} ) { > $CGIsort2 = GetAuthvalueDropbox( $budget->{'sort2_authcat'}, $data->{'sort2'} ); > } >-} elsif ( scalar(@$budgets) ) { >- $CGIsort2 = GetAuthvalueDropbox( @$budgets[0]->{sort2_authcat}, '' ); >+} elsif ( scalar(@$budgets_hierarchy) ) { >+ $CGIsort2 = GetAuthvalueDropbox( @$budgets_hierarchy[0]->{sort2_authcat}, '' ); > } > if ($CGIsort2) { > $template->param( CGIsort2 => $CGIsort2 ); >@@ -378,9 +401,34 @@ sub import_biblios_list { > record_sequence => $biblio->{'record_sequence'}, > overlay_status => $biblio->{'overlay_status'}, > match_biblionumber => $#$match > -1 ? $match->[0]->{'biblionumber'} : 0, >- match_citation => $#$match > -1 ? $match->[0]->{'title'} . ' ' . $match->[0]->{'author'} : '', >+ match_citation => $#$match > -1 ? $match->[0]->{'title'} || '' . ' ' . $match->[0]->{'author'} || '': '', > match_score => $#$match > -1 ? $match->[0]->{'score'} : 0, > ); >+ my ( $marcblob, $encoding ) = GetImportRecordMarc( $biblio->{'import_record_id'} ); >+ my $marcrecord = MARC::Record->new_from_usmarc($marcblob) || die "couldn't translate marc information"; >+ my $infos = get_infos_syspref($marcrecord, ['price', 'quantity', 'budget_code', 'rrp', 'discount', 'sort1', 'sort2']); >+ my $price = $infos->{price}; >+ my $quantity = $infos->{quantity}; >+ my $budget_code = $infos->{budget_code}; >+ my $rrp = $infos->{rrp}; >+ my $discount = $infos->{discount}; >+ my $sort1 = $infos->{sort1}; >+ my $sort2 = $infos->{sort2}; >+ my $budget_id; >+ if($budget_code) { >+ my $biblio_budget = GetBudgetByCode($budget_code); >+ if($biblio_budget) { >+ $budget_id = $biblio_budget->{budget_id}; >+ } >+ } >+ $cellrecord{price} = $price || ''; >+ $cellrecord{quantity} = $quantity || ''; >+ $cellrecord{budget_id} = $budget_id || ''; >+ $cellrecord{rrp} = $rrp || ''; >+ $cellrecord{discount} = $discount || ''; >+ $cellrecord{sort1} = $sort1 || ''; >+ $cellrecord{sort2} = $sort2 || ''; >+ > push @list, \%cellrecord; > } > my $num_biblios = $batch->{'num_biblios'}; >@@ -440,3 +488,22 @@ sub add_matcher_list { > } > $template->param(available_matchers => \@matchers); > } >+ >+sub get_infos_syspref { >+ my ($record, $field_list) = @_; >+ my $syspref = C4::Context->preference('MarcFieldsToOrder'); >+ my $yaml = YAML::Load($syspref); >+ my $r; >+ for my $field_name ( @$field_list ) { >+ my @fields = split /\|/, $yaml->{$field_name}; >+ for my $field ( @fields ) { >+ my ( $f, $sf ) = split /\$/, $field; >+ next unless $f and $sf; >+ if ( my $v = $record->subfield( $f, $sf ) ) { >+ $r->{$field_name} = $v; >+ } >+ last if $yaml->{$field}; >+ } >+ } >+ return $r; >+} >diff --git a/acqui/ajax-getauthvaluedropbox.pl b/acqui/ajax-getauthvaluedropbox.pl >new file mode 100755 >index 0000000..86f440c >--- /dev/null >+++ b/acqui/ajax-getauthvaluedropbox.pl >@@ -0,0 +1,73 @@ >+#!/usr/bin/perl >+ >+# Copyright 2012 BibLibre >+# >+# This file is part of Koha. >+# >+# Koha is free software; you can redistribute it and/or modify it under the >+# terms of the GNU General Public License as published by the Free Software >+# Foundation; either version 2 of the License, or (at your option) any later >+# version. >+# >+# Koha 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 GNU General Public License for more details. >+# >+# You should have received a copy of the GNU General Public License along >+# with Koha; if not, write to the Free Software Foundation, Inc., >+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. >+ >+=head1 NAME >+ >+ajax-getauthvaluedropbox.pl - returns an authorised values dropbox >+ >+=head1 DESCRIPTION >+ >+this script returns an authorised values dropbox >+ >+=head1 CGI PARAMETERS >+ >+=over 4 >+ >+=item name >+ >+The name of the dropbox. >+ >+=item category >+ >+The category of authorised values. >+ >+=item default >+ >+Default value for the dropbox. >+ >+=back >+ >+=cut >+ >+use Modern::Perl; >+ >+use CGI; >+use C4::Budgets; >+use C4::Charset; >+ >+my $input = new CGI; >+my $name = $input->param('name'); >+my $category = $input->param('category'); >+my $default = $input->param('default'); >+$default = C4::Charset::NormalizeString($default); >+ >+binmode STDOUT, ':encoding(UTF-8)'; >+print $input->header(-type => 'text/plain', -charset => 'UTF-8'); >+my $avs = GetAuthvalueDropbox($category, $default); >+my $html = qq|<select id="$name", name="$name">|; >+for my $av ( @$avs ) { >+ if ( $av->{default} ) { >+ $html .= qq|<option value="$av->{value}" selected="selected">$av->{label}</option>|; >+ } else { >+ $html .= qq|<option value="$av->{value}">$av->{label}</option>|; >+ } >+} >+$html .= qq|</select>|; >+ >+print $html; >diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl >index 8aed2d6..e9f5faf 100755 >--- a/installer/data/mysql/updatedatabase.pl >+++ b/installer/data/mysql/updatedatabase.pl >@@ -8243,6 +8243,15 @@ if ( CheckVersion($DBversion) ) { > SetVersion ($DBversion); > } > >+ >+ >+$DBversion = "3.15.00.XXX"; >+if ( CheckVersion($DBversion) ) { >+ $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('MarcFieldsToOrder','','Set the mapping values for a new order line created from a marcrecord (staged file). In a YAML format.', NULL, 'textarea')"); >+ print "Upgrade to $DBversion done (Bug 7180: Added MarcFieldsToOrder syspref)\n"; >+ SetVersion ($DBversion); >+} >+ > =head1 FUNCTIONS > > =head2 TableExists($table) >diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/acq.js b/koha-tmpl/intranet-tmpl/prog/en/js/acq.js >index 387e9a2..0481b3c 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/js/acq.js >+++ b/koha-tmpl/intranet-tmpl/prog/en/js/acq.js >@@ -214,84 +214,29 @@ function calcNewsuggTotal(){ > return true; > } > >- >-// ---------------------------------------- >-//USED BY NEWORDEREMPTY.PL >-/* >-function fetchSortDropbox(f) { >- var budgetId=f.budget_id.value; >- var handleSuccess = function(o){ >- if(o.responseText !== undefined){ >- sort_dropbox.innerHTML = o.responseText; >- } >- } >- >- var callback = { success:handleSuccess }; >- var sUrl = '../acqui/fetch_sort_dropbox.pl?sort=1&budget_id='+budgetId >- var sort_dropbox = document.getElementById('sort1'); >- var request1 = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback); >- var rr = '00'; >- >-// FIXME: --------- twice , coz the 2 requests get mixed up otherwise >- >- var handleSuccess2 = function(o){ >- if(o.responseText !== undefined){ >- sort2_dropbox.innerHTML = o.responseText; >- } >- } >- >- var callback2 = { success:handleSuccess }; >- var sUrl2 = '../acqui/fetch_sort_dropbox.pl?sort=2&budget_id='+budgetId; >- var sort2_dropbox = document.getElementById('sort2'); >- var request2 = YAHOO.util.Connect.asyncRequest('GET', sUrl2, callback2); >- >-} >-*/ >- >- >- >-//USED BY NEWORDEREMPTY.PL >-function fetchSortDropbox(f) { >- var budgetId=f.budget_id.value; >- >-for (i=1;i<=2;i++) { >- >- var sort_zone = document.getElementById('sort'+i+'_zone'); >- var url = '../acqui/fetch_sort_dropbox.pl?sort='+i+'&budget_id='+budgetId; >- >- var xmlhttp = null; >- xmlhttp = new XMLHttpRequest(); >- if ( typeof xmlhttp.overrideMimeType != 'undefined') { >- xmlhttp.overrideMimeType('text/xml'); >- } >- >- xmlhttp.open('GET', url, false); >- xmlhttp.send(null); >- >- xmlhttp.onreadystatechange = function() { >- if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { >- // stupid JS... >- } else { >- // wait for the call to complete >- } >- }; >- // rc = eval ( xmlhttp.responseText ); >- var retRootType = xmlhttp.responseXML.firstChild.nodeName; >- var existingInputs = sort_zone.getElementsByTagName('input'); >- if (existingInputs.length > 0 && retRootType == 'input') { >- // when sort is already an input, do not override to preseve value >+function getAuthValueDropbox( name, cat, destination, selected ) { >+ if (cat == null || cat == "") { >+ $(destination).replaceWith(' <input type="text" name="' + name + '" />' ); > return; > } >- sort_zone.innerHTML = xmlhttp.responseText; >-} >+ $.ajax({ >+ url: "/cgi-bin/koha/acqui/ajax-getauthvaluedropbox.pl", >+ data: { >+ name: name, >+ category: cat, >+ default: selected >+ }, >+ async: false, >+ success: function(data){ >+ if(data === "0"){ >+ $(destination).replaceWith(' <input type="text" name="' + name + '" />' ); >+ }else{ >+ $(destination).replaceWith(data); >+ } >+ } >+ }); > } > >- >- >- >- >- >- > //USED BY NEWORDEREMPTY.PL > function totalExceedsBudget(budgetId, total) { > >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/addorderiso2709.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/addorderiso2709.tt >index fafa114..f0187d5 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/addorderiso2709.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/addorderiso2709.tt >@@ -10,12 +10,12 @@ > <link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" /> > [% INCLUDE 'doc-head-close.inc' %] > [% INCLUDE 'datatables.inc' %] >+<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script> > <script type="text/javascript" src="[% themelang %]/js/acq.js"></script> >-<script type="text/javascript" src="[% themelang %]/js/cataloging.js"></script> > <script type="text/JavaScript"> > //<![CDATA[ > $(document).ready(function() { >- $("#files,#recordst").dataTable($.extend(true, {}, dataTablesDefaults, { >+ $("#files").dataTable($.extend(true, {}, dataTablesDefaults, { > "aoColumnDefs": [ > { "bSortable": false, "bSearchable": false, 'aTargets': [ 'NoSort' ] }, > { "sType": "anti-the", "aTargets" : [ "anti-the" ] }, >@@ -25,18 +25,79 @@ > "aaSorting": [] > } ) ); > >- $("form#Aform").submit(function() { >- var total_errors = CheckMandatorySubfields(this); >- if (total_errors > 0) { >- var alertString = _("Form not submitted because of the following problem(s)"); >- alertString += "\n------------------------------------------------------------------------------------\n"; >- alertString += "\n- " + _("%s mandatory fields empty (highlighted)").format(total_errors); >- alert(alertString); >- return false; >+ $("select[name='budget_id']").change(function(){ >+ var sort1_authcat = $(this).find("option:selected").attr('data-sort1-authcat'); >+ var sort2_authcat = $(this).find("option:selected").attr('data-sort2-authcat'); >+ var destination_sort1 = $(this).siblings('span.sort1').find('input[name="sort1"]'); >+ var sort1 = $(destination_sort1).val(); >+ if ( destination_sort1.length < 1 ) { >+ destination_sort1 = $(this).siblings('span.sort1').find('select[name="sort1"]'); > } >- return true; >+ var destination_sort2 = $(this).siblings('span.sort2').find('input[name="sort2"]'); >+ var sort2 = $(destination_sort2).val(); >+ if ( destination_sort2.length < 1 ) { >+ destination_sort2 = $(this).siblings('span.sort2').find('select[name="sort2"]'); >+ } >+ getAuthValueDropbox( 'sort1', sort1_authcat, destination_sort1, sort1 ); >+ >+ getAuthValueDropbox( 'sort2', sort2_authcat, destination_sort2, sort2 ); >+ } ); >+ >+ $("select[name='budget_id']").change(); >+ >+ $("select[name='all_budget_id']").change(function(){ >+ var sort1_authcat = $(this).find("option:selected").attr('data-sort1-authcat'); >+ var sort2_authcat = $(this).find("option:selected").attr('data-sort2-authcat'); >+ var destination_sort1 = $(this).parent().siblings('li').find('input[name="all_sort1"]'); >+ if ( destination_sort1.length < 1 ) { >+ destination_sort1 = $(this).parent().siblings('li').find('select[name="all_sort1"]'); >+ } >+ var destination_sort2 = $(this).parent().siblings('li').find('input[name="all_sort2"]'); >+ if ( destination_sort2.length < 1 ) { >+ destination_sort2 = $(this).parent().siblings('li').find('select[name="all_sort2"]'); >+ } >+ getAuthValueDropbox( 'sort1', sort1_authcat, destination_sort1 ); >+ getAuthValueDropbox( 'sort2', sort2_authcat, destination_sort2 ); >+ $(this).parent().siblings('li').find('select[name="sort1"]').attr('name', 'all_sort1'); >+ $(this).parent().siblings('li').find('input[name="sort1"]').attr('name', 'all_sort1'); >+ $(this).parent().siblings('li').find('select[name="sort2"]').attr('name', 'all_sort2'); >+ $(this).parent().siblings('li').find('input[name="sort2"]').attr('name', 'all_sort2'); >+ } ); >+ >+ $('input:checkbox[name="import_record_id"]').change(function(){ >+ if ( $(this).is(':checked') ) { >+ $(this).parent().addClass("selected"); >+ $(this).parent().removeClass("unselected"); >+ } else { >+ $(this).parent().addClass("unselected"); >+ $(this).parent().removeClass("selected"); >+ } >+ } ); >+ >+ $("input:checkbox").attr("checked", false); >+ $("div.biblio.unselected select").attr("disabled", false); >+ $("div.biblio.unselected input").attr("disabled", false); >+ >+ $("#checkAll").click(function(){ >+ $("#Aform").checkCheckboxes(); >+ $("input:checkbox[name='import_record_id']").change(); >+ return false; >+ }); >+ $("#unCheckAll").click(function(){ >+ $("#Aform").unCheckCheckboxes(); >+ $("input:checkbox[name='import_record_id']").change(); >+ return false; > }); >+ > }); >+ >+ function disableUnchecked(form){ >+ $("div.biblio.unselected").each(function(){ >+ $(this).find('select').attr('disabled', 'disabled'); >+ $(this).find('input').attr('disabled', 'disabled'); >+ }); >+ form.submit(); >+ } > //]]> > </script> > </head> >@@ -49,27 +110,29 @@ > <div id="yui-main"> > <div class="yui-b"> > [% IF ( batch_details ) %] >- <h1>Add orders from [% comments %] >+ <h1>Add orders from [% comments %] > ([% file_name %] staged on [% upload_timestamp | $KohaDates with_hours => 1 %]) >- </h1> >- <div> >- <form action="[% scriptname %]" method="post" name="import_biblios"> >- <table id="recordst"> >- <thead> >- <tr> >- <th class="anti-the">Citation</th> >- <th>Match?</th> >- <th>Order</th> >- </tr> >- </thead> >- <tbody> >- [% FOREACH biblio_lis IN biblio_list %] >- <tr> >- <td> >- [% biblio_lis.citation %] >+ </h1> >+ <div> >+ <span class="checkall"><a id="checkAll" href="#">Check All</a></span> >+ <span class="uncheckall"><a id="unCheckAll" href="#">Uncheck All</a></span> >+ <form action="/cgi-bin/koha/acqui/addorderiso2709.pl" method="post" id="Aform" onsubmit="disableUnchecked(this); return false;"> >+ <input type="hidden" name="op" value="import_records"/> >+ <input type="hidden" name="basketno" value="[% basketno %]" /> >+ <input type="hidden" name="booksellerid" value="[% booksellerid %]" /> >+ <input type="hidden" name="import_batch_id" value="[%import_batch_id %]" /> >+ <input type="hidden" name="ordernumber" value="[% ordernumber %]" /> >+ >+ [% FOREACH cur IN loop_currencies %] >+ <input type="hidden" name="[% cur.currency %]" value="[% cur.rate %]" /> >+ [% END %] > >- </td> >- <td> >+ [% FOREACH biblio IN biblio_list %] >+ <div class="biblio unselected" style="border-radius: 5px 5px; -moz-border-radius: 5px; padding: 5px; margin:5px; border-style : solid; border-color : grey; border-width:1px;"> >+ <input type="checkbox" name="import_record_id" id="record_[% biblio.import_record_id %]" value="[% biblio.import_record_id %]" /> >+ <input type="hidden" value="[% biblio.rrp %]" name="rrp" /> >+ <label for="record_[% biblio.import_record_id %]"><span class="citation" style="font-weight:bold;">[% biblio.citation %]</span></label> >+ <span class="match" style="display:block;"> > [% IF ( biblio_lis.overlay_status == 'no_match' ) %] > No match > [% ELSIF ( biblio_lis.overlay_status == 'match_applied' ) %] >@@ -79,212 +142,220 @@ > [% ELSE %] > [% biblio_lis.overlay_status %] > [% END %] >- </td> >- <td><a href="/cgi-bin/koha/acqui/neworderempty.pl?booksellerid=[% booksellerid %]&basketno=[% basketno %]&booksellerid=[% booksellerid %]&breedingid=[% biblio_lis.import_record_id %]&import_batch_id=[% biblio_lis.import_batch_id %]&biblionumber=[% biblio_lis.match_biblionumber %]">Add order</a></td> >- </tr> >- [% IF ( biblio_lis.match_biblionumber ) %] >- <tr> >- <td class="highlight" colspan="3"> Matches biblio [% biblio_lis.match_biblionumber %] (score = [% biblio_lis.match_score %]): <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblio_lis.match_biblionumber %]">[% biblio_lis.match_citation %]</a></td> >- </tr> >- [% END %] >- [% END %] >- </tbody> >- </table> >- </form> >- </div> >- [% IF ( pages ) %] >- <div class="pages"> >- Page >- [% FOREACH page IN pages %] >- [% IF ( page.current_page ) %] >- <span class="current">[% page.page_number %]</span> >- [% ELSE %] >- <a class="nav" href="[% page.script_name %]?import_batch_id=[% page.import_batch_id %]&offset=[% page.offset %]">[% page.page_number %]</a> >- [% END %] >- [% END %] >- [% END %] >- [% ELSE %] >- <div> >- <h1>Choose the file to add to the basket</h1> >- <table id="files"> >- <thead> >- <tr> >- <th>File name</th> >- <th>Comments</th> >- <th>Status</th> >- <th class="title-string">Staged</th> >- <th># Bibs</th> >- <th class="NoSort"> </th> >- </tr> >- </thead> >- <tbody> >- [% FOREACH batch_lis IN batch_list %] >- <tr> >- <td>[% batch_lis.file_name %]</td> >- <td>[% batch_lis.comments %]</td> >- <td> >- [% IF ( batch_lis.import_status == 'cleaned' ) %] >- Cleaned >- [% ELSIF ( batch_lis.import_status == 'imported' ) %] >- Imported >- [% ELSIF ( batch_lis.import_status == 'importing' ) %] >- Importing >- [% ELSIF ( batch_lis.import_status == 'reverted' ) %] >- Reverted >- [% ELSIF ( batch_lis.import_status == 'reverting' ) %] >- Reverting >- [% ELSIF ( batch_lis.import_status == 'staged' ) %] >- Staged >- [% ELSE %] >- [% batch_lis.import_status %] >- [% END %] >- </td> >- <td><span title="[% batch_lis.staged_date %]">[% batch_lis.staged_date | $KohaDates with_hours => 1 %]</span></td> >- <td>[% batch_lis.num_biblios %]</td> >- <td><a href="[% batch_lis.scriptname %]?import_batch_id=[% batch_lis.import_batch_id %]&basketno=[% basketno %]&booksellerid=[% booksellerid %]">Add orders</a></td> >- </tr> >- [% END %] >- </tbody> >- </table> >- </div> >- [% END %] >- </div> >- [% IF ( import_batch_id ) %] >- <div class="yui-b"> >- <h2>Import all</h2> >- <p>Import all the lines in the basket with the following parameters:</p> >- <form action="/cgi-bin/koha/acqui/addorderiso2709.pl" method="post" id="Aform"> >- <input type="hidden" name="op" value="import_records"/> >- <input type="hidden" name="ordernumber" value="[% ordernumber %]" /> >- <input type="hidden" name="basketno" value="[% basketno %]" /> >- <input type="hidden" name="booksellerid" value="[% booksellerid %]" /> >- <input type="hidden" name="import_batch_id" value="[% import_batch_id %]" /> >- >- [% FOREACH loop_currencie IN loop_currencies %] >- <input type="hidden" name="[% loop_currencie.currency %]" value="[% loop_currencie.rate %]" /> >- [% END %] >- >- [% IF ( items ) %] >- <fieldset class="rows"> >- <legend>Item</legend> >- [% IF ( NoACQframework ) %] >- <div class="dialog message">No ACQ framework, using default. You should create a framework with code ACQ, the items framework would be used</div> >- [% END %] >- >- [% FOREACH item IN items %] >- <div id="outeritemblock"> >- <div id="itemblock"> >- <ol>[% FOREACH iteminformatio IN item.iteminformation %]<li style="[% iteminformatio.hidden %];"> >- <div class="subfield_line" id="subfield[% iteminformatio.serialid %][% iteminformatio.countitems %][% iteminformatio.subfield %][% iteminformatio.random %]"> >- [% IF (iteminformatio.mandatory) %] >- <label class="required">[% iteminformatio.subfield %] - [% iteminformatio.marc_lib %]</label> >+ </span> >+ [% IF ( biblio.match_biblionumber ) %] >+ Matches biblio [% biblio.match_biblionumber %] (score = [% biblio.match_score %]): <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblio.match_biblionumber %]">[% biblio.match_citation %]</a> >+ [% END %] >+ <span class="quantity" style="display:block;"> >+ Quantity: <input type="text" value="[% biblio.quantity %]" name="quantity" /> >+ </span> >+ <span class="price" style="display:block;"> >+ Price: <input type="text" value="[% biblio.price %]" name="price" /> >+ </span> >+ <span class="discount" style="display:block;"> >+ Discount: <input type="text" value="[% biblio.discount %]" name="discount" /> >+ </span> >+ <span class="budget" style="display:block;"> >+ [% IF ( close ) %] >+ <span class="label">Budget: </span> >+ <input type="hidden" size="20" name="budget_id" value="[% budget_id %]" />[% Budget_name %] > [% ELSE %] >- <label>[% iteminformatio.subfield %] - [% iteminformatio.marc_lib %]</label> >+ <label for="budget_id">Budget: </label> >+ <select size="1" name="budget_id"> >+ <option value=""></option> >+ [% FOREACH budget IN budget_loop %] >+ [% IF ( budget.b_id == biblio.budget_id ) %] >+ <option value="[% budget.b_id %]" data-sort1-authcat="[% budget.b_sort1_authcat %]" data-sort2-authcat="[% budget.b_sort2_authcat %]" selected="selected">[% budget.b_txt %]</option> >+ [% ELSE %] >+ <option value="[% budget.b_id %]" data-sort1-authcat="[% budget.b_sort1_authcat %]" data-sort2-authcat="[% budget.b_sort2_authcat %]">[% budget.b_txt %]</option> >+ [% END %] >+ [% END %] >+ </select> > [% END %] >- [% iteminformatio.marc_value %] >- <input type="hidden" name="itemid" value="1" /> >- <input type="hidden" name="kohafield" value="[% iteminformatio.kohafield %]" /> >- <input type="hidden" name="tag" value="[% iteminformatio.tag %]" /> >- <input type="hidden" name="subfield" value="[% iteminformatio.subfield %]" /> >- <input type="hidden" name="mandatory" value="[% iteminformatio.mandatory %]" /> >- [% IF ( iteminformatio.mandatory ) %] <span class="required">Required</span>[% END %] >- </div></li> >+ <span class="sort1"> >+ <label for="sort1">Planning value1: </label> >+ <input type="text" id="sort1" size="20" name="sort1" value="[% biblio.sort1 %]" /> >+ </span> >+ <span class="sort2"> >+ <label for="sort2">Planning value2: </label> >+ <input type="text" id="sort2" size="20" name="sort2" value="[% biblio.sort2 %]" /> >+ </span> >+ </span> >+ </div> > [% END %] >- </ol> >- </div><!-- /iteminformation --> >- </div> >+ <div> >+ <h2>Import all</h2> >+ <p>Import all the lines in the basket with the following parameters:</p> > >- [% END %] <!-- /items --> >- </fieldset> >- [% END %] <!-- items --> >- <fieldset class="rows"> >- <legend>Accounting details</legend> >- <ol> >- <li> >- <!-- origquantityrec only here for javascript compatibility (additem.js needs it, useless here, usefull when receiveing an order --> >- <input id="origquantityrec" readonly="readonly" type="hidden" name="origquantityrec" value="1" /> >- </li> >- <li> >- [% IF ( close ) %] >- <span class="label">Budget: </span> >- <input type="hidden" size="20" name="budget_id" id="budget_id" value="[% budget_id %]" />[% Budget_name %] >- [% ELSE %] >- <li> >- <label for="currency">Currency:</label> >- <select name="currency" id="currency"> >- [% FOREACH loop_currencie IN loop_currencies %] >- [% IF ( loop_currencie.selected ) %]<option value="[% loop_currencie.currcode %]" selected="selected">[% loop_currencie.currcode %]</option>[% ELSE %]<option value="[% loop_currencie.currcode %]">[% loop_currencie.currcode %]</option>[% END %][% END %] >- </select> >- </li> >- <li> >- <label for="budget_id">Budget: </label> >- <select id="budget_id" onchange="fetchSortDropbox(this.form)" size="1" name="budget_id"> >- [% FOREACH budget_loo IN budget_loop %] >- [% IF ( budget_loo.b_sel ) %] >- <option value="[% budget_loo.b_id %]" selected="selected">[% budget_loo.b_txt %]</option> >- [% ELSE %] >- <option value="[% budget_loo.b_id %]">[% budget_loo.b_txt %]</option> >- [% END %] >- [% END %] >- </select> >- </li> >+ [% IF ( items ) %] >+ <fieldset class="rows"> >+ <legend>Item</legend> >+ [% IF ( NoACQframework ) %] >+ <div class="dialog message">No ACQ framework, using default. You should create a framework with code ACQ, the items framework would be used</div> > [% END %] >- </li> >- <li> >- <label for="order_internalnote">Internal note: </label> >- <textarea id="order_internalnote" cols="30" rows="3" name="order_internalnote"></textarea> >- </li> >- <li> >- <label for="order_vendornote">Vendor note: </label> >- <textarea id="order_vendornote" cols="30" rows="3" name="order_vendornote"></textarea> >- </li> >- <li><div class="hint">The 2 following fields are available for your own usage. They can be useful for statistical purposes</div> >- <label for="sort1">Planning value1: </label> >- <span id="sort1_zone"> >- [% IF CGIsort1 %] >- <select id="sort1" size="1" name="sort1"> >- [% FOREACH sort_opt IN CGIsort1 %] >- [% IF sort_opt.default %] >- <option value="[% sort_opt.id %]" selected="selected">[% sort_opt.label %]</option> >+ [% FOREACH item IN items %] >+ <div id="outeritemblock"> >+ <div id="itemblock"> >+ <ol> >+ [% FOREACH iteminformatio IN item.iteminformation %]<li style="[% iteminformatio.hidden %];"> >+ <div class="subfield_line" id="subfield[% iteminformatio.serialid %][% iteminformatio.countitems %][% iteminformatio.subfield %][% iteminformatio.random %]"> >+ [% IF (iteminformatio.mandatory) %] >+ <label class="required">[% iteminformatio.subfield %] - [% iteminformatio.marc_lib %]</label> >+ [% ELSE %] >+ <label>[% iteminformatio.subfield %] - [% iteminformatio.marc_lib %]</label> >+ [% END %] >+ >+ [% iteminformatio.marc_value %] >+ <input type="hidden" name="itemid" value="1" /> >+ <input type="hidden" name="kohafield" value="[% iteminformatio.kohafield %]" /> >+ <input type="hidden" name="tag" value="[% iteminformatio.tag %]" /> >+ <input type="hidden" name="subfield" value="[% iteminformatio.subfield %]" /> >+ <input type="hidden" name="mandatory" value="[% iteminformatio.mandatory %]" /> >+ [% IF ( iteminformatio.mandatory ) %] <span class="required">Required</span>[% END %] >+ </div></li> >+ [% END %] >+ </ol> >+ </div><!-- /iteminformation --> >+ </div> >+ [% END %] <!-- /items --> >+ </fieldset> >+ [% END %] <!-- items --> >+ >+ <fieldset class="rows"> >+ <legend>Accounting details</legend> >+ <ol> >+ <li> >+ <!-- origquantityrec only here for javascript compatibility (additem.js needs it, useless here, usefull when receiveing an order --> >+ <input id="origquantityrec" readonly="readonly" type="hidden" name="origquantityrec" value="1" /> >+ </li> >+ <li> >+ [% IF ( close ) %] >+ <span class="label">Budget: </span> >+ <input type="hidden" size="20" name="budget_id" id="budget_id" value="[% budget_id %]" />[% Budget_name %] > [% ELSE %] >- <option value="[% sort_opt.id %]">[% sort_opt.label %]</option> >+ <li> >+ <label for="all_currency">Currency:</label> >+ <select name="all_currency" id="all_currency"> >+ [% FOREACH loop_currencie IN loop_currencies %] >+ [% IF ( loop_currencie.selected ) %] >+ <option value="[% loop_currencie.currcode %]" selected="selected">[% loop_currencie.currcode %]</option> >+ [% ELSE %] >+ <option value="[% loop_currencie.currcode %]">[% loop_currencie.currcode %]</option> >+ [% END %] >+ [% END %] >+ </select> >+ </li> >+ <li> >+ <label for="all_budget_id">Budget: </label> >+ <select id="all_budget_id" size="1" name="all_budget_id"> >+ [% FOREACH budget_loo IN budget_loop %] >+ [% IF ( budget_loo.b_sel ) %] >+ <option value="[% budget_loo.b_id %]" data-sort1-authcat="[% budget_loo.b_sort1_authcat %]" data-sort2-authcat="[% budget_loo.b_sort2_authcat %]" selected="selected">[% budget_loo.b_txt %]</option> >+ [% ELSE %] >+ <option value="[% budget_loo.b_id %]" data-sort1-authcat="[% budget_loo.b_sort1_authcat %]" data-sort2-authcat="[% budget_loo.b_sort2_authcat %]">[% budget_loo.b_txt %]</option> >+ [% END %] >+ [% END %] >+ </select> >+ </li> > [% END %] >- [% END %] >- </select> >- [% ELSE %] >- <input type="text" id="sort1" size="20" name="sort1" value="[% sort1 %]" /> >- [% END %] >- </span> >- </li> >- <li> >- <label for="sort2">Planning value2: </label> >- <span id="sort2_zone"> >- [% IF CGIsort2 %] >- <select id="sort2" size="1" name="sort1"> >- [% FOREACH sort_opt IN CGIsort2 %] >- [% IF sort_opt.default %] >- <option value="[% sort_opt.id %]" selected="selected">[% sort_opt.label %]</option> >+ </li> >+ <li> >+ <label for="all_order_internalnote">Internal note: </label> >+ <textarea id="all_order_internalnote" cols="30" rows="3" name="all_order_internalnote"></textarea> >+ </li> >+ <li> >+ <label for="all_order_vendornote">Vendor note: </label> >+ <textarea id="all_order_vendornote" cols="30" rows="3" name="all_order_vendornote"></textarea> >+ </li> >+ <li> >+ <div class="hint">The 2 following fields are available for your own usage. They can be useful for statistical purposes</div> >+ <label for="sort1">Planning value1: </label> >+ [% IF CGIsort1 %] >+ <select id="all_sort1" size="1" name="all_sort1"> >+ [% FOREACH sort_opt IN CGIsort1 %] >+ [% IF sort_opt.default %] >+ <option value="[% sort_opt.id %]" selected="selected">[% sort_opt.label %]</option> >+ [% ELSE %] >+ <option value="[% sort_opt.id %]">[% sort_opt.label %]</option> >+ [% END %] >+ [% END %] >+ </select> > [% ELSE %] >- <option value="[% sort_opt.id %]">[% sort_opt.label %]</option> >+ <input type="text" id="all_sort1" size="20" name="all_sort1" value="[% sort1 %]" /> > [% END %] >- [% END %] >- </select> >- [% ELSE %] >- <input type="text" id="sort2" size="20" name="sort2" value="[% sort2 %]" /> >- [% END %] >- </span> >- </li> >- <li> >- >- </li> >- </ol> >- </fieldset> >- <fieldset class="action"> >- <input type="submit" value="Save" /><a class="cancel" href="/cgi-bin/koha/acqui/basket.pl?basketno=[% basketno %]">Cancel</a> >- </fieldset> >- </form> >- </div> >- [% END %] >+ </li> >+ <li> >+ <span id="sort2_zone"> >+ <label for="sort2">Planning value2: </label> >+ [% IF CGIsort2 %] >+ <select id="all_sort2" size="1" name="all_sort1"> >+ [% FOREACH sort_opt IN CGIsort2 %] >+ [% IF sort_opt.default %] >+ <option value="[% sort_opt.id %]" selected="selected">[% sort_opt.label %]</option> >+ [% ELSE %] >+ <option value="[% sort_opt.id %]">[% sort_opt.label %]</option> >+ [% END %] >+ [% END %] >+ </select> >+ [% ELSE %] >+ <input type="text" id="all_sort2" size="20" name="all_sort2" value="[% sort2 %]" /> >+ [% END %] >+ </span> >+ </li> >+ </ol> >+ </fieldset> >+ <fieldset class="action"> >+ <input type="submit" value="Save" /><a class="cancel" href="/cgi-bin/koha/acqui/basket.pl?basketno=[% basketno %]">Cancel</a> >+ </fieldset> >+ >+ </div> >+ </form> >+ [% ELSE %] >+ <div> >+ <h1>Choose the file to add to the basket</h1> >+ <table id="files"> >+ <thead> >+ <tr> >+ <th>File name</th> >+ <th>Comments</th> >+ <th>Status</th> >+ <th class="title-string">Staged</th> >+ <th># Bibs</th> >+ <th class="NoSort"> </th> >+ </tr> >+ </thead> >+ <tbody> >+ [% FOREACH batch_lis IN batch_list %] >+ <tr> >+ <td>[% batch_lis.file_name %]</td> >+ <td>[% batch_lis.comments %]</td> >+ <td> >+ [% IF ( batch_lis.import_status == 'cleaned' ) %] >+ Cleaned >+ [% ELSIF ( batch_lis.import_status == 'imported' ) %] >+ Imported >+ [% ELSIF ( batch_lis.import_status == 'importing' ) %] >+ Importing >+ [% ELSIF ( batch_lis.import_status == 'reverted' ) %] >+ Reverted >+ [% ELSIF ( batch_lis.import_status == 'reverting' ) %] >+ Reverting >+ [% ELSIF ( batch_lis.import_status == 'staged' ) %] >+ Staged >+ [% ELSE %] >+ [% batch_lis.import_status %] >+ [% END %] >+ </td> >+ <td><span title="[% batch_lis.staged_date %]">[% batch_lis.staged_date | $KohaDates with_hours => 1 %]</span></td> >+ <td>[% batch_lis.num_biblios %]</td> >+ <td><a href="[% batch_lis.scriptname %]?import_batch_id=[% batch_lis.import_batch_id %]&basketno=[% basketno %]&booksellerid=[% booksellerid %]">Add orders</a></td> >+ </tr> >+ [% END %] >+ </tbody> >+ </table> >+ </div> >+ [% END %] >+ </div> > </div> > </div> > </div> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/acquisitions.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/acquisitions.pref >index 54044d2..d2c27a9 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/acquisitions.pref >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/acquisitions.pref >@@ -45,6 +45,10 @@ Acquisitions: > - > - Upon receiving items, update their subfields if they were created when placing an order (e.g. o=5|a="foo bar"). > - pref: AcqItemSetSubfieldsWhenReceived >+ - >+ - Set the mapping values for a new order line created from a marcrecord (staged file). In a YAML format, so you have to finished with an empty line. >+ - pref: MarcFieldsToOrder >+ type: textarea > > Printing: > - >-- >1.7.10.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 7180
:
6234
|
13019
|
15023
|
15048
|
15617
|
15677
|
15934
|
15935
|
16014
|
16505
|
16511
|
16544
|
16566
|
16613
|
19066
|
19067
|
19068
|
19316
|
19587
|
19588
|
19589
|
19590
|
19641
|
19645
|
20900
|
20901
|
20902
|
20903
|
20904
|
20926
|
20933
|
20934
|
20935
|
20978
|
20979
|
21004
|
21014
|
21017
|
21117
|
21462
|
21463
|
21464
|
21465
|
21466
|
21467
|
21468
|
21469
|
21470
|
21471
|
21472
|
21473
|
21474
|
21514
|
22546
|
22547
|
22548
|
22549
|
22550
|
22551
|
22552
|
22553
|
22554
|
22555
|
22556
|
22557
|
22558
|
22559
|
24052
|
24053
|
24054
|
24055
|
24056
|
24057
|
24058
|
24059
|
24060
|
24061
|
24062
|
24063
|
24064
|
24065
|
24636
|
24637
|
24638
|
24639
|
24640
|
24641
|
24642
|
24643
|
24644
|
24645
|
24646
|
24647
|
24648
|
24649
|
24708
|
24709
|
24710
|
24711
|
24712
|
24713
|
24714
|
24715
|
24716
|
24717
|
24718
|
24719
|
24720
|
24721
|
25908
|
26950
|
26951
|
26952
|
26953
|
26954
|
26955
|
26956
|
26957
|
26958
|
26959
|
26960
|
26961
|
26962
|
26963
|
26964
|
27128
|
27131
|
27136
|
27160
|
27325
|
27408
|
27409
|
27410
|
27411
|
27412
|
27413
|
27414
|
27415
|
27416
|
27417
|
27418
|
27419
|
27420
|
27421
|
27422
|
27423
|
27424
|
27451
|
27520
|
27561
|
27562
|
27563
|
27564
|
27565
|
27566
|
27567
|
27568
|
27569
|
27570
|
27571
|
27572
|
27573
|
27574
|
27575
|
27576
|
27577
|
27578
|
27829
|
27830
|
27831
|
27832
|
27833
|
27834
|
27835
|
27836
|
27837
|
27838
|
27839
|
27840
|
27841
|
27842
|
27843
|
27844
|
27845
|
27846
|
27847
|
27848
| 27849 |
27850
|
27851
|
27852
|
27853
|
27854
|
27855
|
27856
|
27857
|
27858
|
27859
|
27860
|
27861
|
27862
|
27863
|
27864
|
27865
|
27866