X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=acqui%2Fneworderempty.pl;h=6361125eeeda706c0505b133fad802b2f05bfd0a;hb=f56dc797546fd9f3037e974ab6f40cb603b33e74;hp=1bbb71f1333ac8ddc6686a3d126c1eaf729df9fa;hpb=4747ea7462c04770484386538b1594c1760bc75b;p=koha_gimpoz diff --git a/acqui/neworderempty.pl b/acqui/neworderempty.pl index 1bbb71f133..6361125eee 100755 --- a/acqui/neworderempty.pl +++ b/acqui/neworderempty.pl @@ -16,9 +16,9 @@ # 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., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA +# 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 @@ -26,6 +26,7 @@ neworderempty.pl =head1 DESCRIPTION + this script allows to create a new record to order it. This record shouldn't exist on database. @@ -76,7 +77,7 @@ use C4::Budgets; use C4::Input; use C4::Dates; -use C4::Bookseller; # GetBookSellerFromId +use C4::Bookseller qw/ GetBookSellerFromId /; use C4::Acquisition; use C4::Suggestions; # GetSuggestion use C4::Biblio; # GetBiblioData @@ -92,7 +93,7 @@ use C4::ImportBatch qw/GetImportRecordMarc SetImportRecordStatus/; my $input = new CGI; my $booksellerid = $input->param('booksellerid'); # FIXME: else ERROR! -my $budget_id = $input->param('budget_id'); # FIXME: else ERROR! +my $budget_id = $input->param('budget_id') || 0; my $title = $input->param('title'); my $author = $input->param('author'); my $publicationyear = $input->param('publicationyear'); @@ -125,15 +126,27 @@ my $contract = &GetContract($basket->{contractnumber}); #simple parameters reading (all in one :-) my $params = $input->Vars; -my $listprice; # the price, that can be in MARC record if we have one +my $listprice=0; # the price, that can be in MARC record if we have one if ( $ordernumber eq '' and defined $params->{'breedingid'}){ #we want to import from the breeding reservoir (from a z3950 search) my ($marcrecord, $encoding) = MARCfindbreeding($params->{'breedingid'}); die("Could not find the selected record in the reservoir, bailing") unless $marcrecord; + # Remove all the items (952) from the imported record + foreach my $item ($marcrecord->field('952')) { + $marcrecord->delete_field($item); + } + my $duplicatetitle; #look for duplicates - if (! (($biblionumber,$duplicatetitle) = FindDuplicate($marcrecord))){ + ($biblionumber,$duplicatetitle) = FindDuplicate($marcrecord); + if($biblionumber && !$input->param('use_external_source')) { + #if duplicate record found and user did not decide yet, first warn user + #and let him choose between using new record or existing record + Load_Duplicate($duplicatetitle); + exit; + } + #from this point: add a new record if (C4::Context->preference("BiblioAddsAuthorities")){ my ($countlinked,$countcreated)=BiblioAddAuthorities($marcrecord, $params->{'frameworkcode'}); } @@ -162,11 +175,9 @@ if ( $ordernumber eq '' and defined $params->{'breedingid'}){ } } SetImportRecordStatus($params->{'breedingid'}, 'imported'); - } } -my $cur = GetCurrency(); if ( $ordernumber eq '' ) { # create order $new = 'yes'; @@ -194,17 +205,35 @@ else { #modify order } # get currencies (for change rates calcs if needed) +my $active_currency = GetCurrency(); +my $default_currency; +if (! $data->{currency} ) { # New order no currency set + if ( $bookseller->{listprice} ) { + $default_currency = $bookseller->{listprice}; + } + else { + $default_currency = $active_currency->{currency}; + } +} + my @rates = GetCurrencies(); -my $count = scalar @rates; # ## @rates my @loop_currency = (); -for ( my $i = 0 ; $i < $count ; $i++ ) { - my %line; - $line{currency} = $rates[$i]->{'currency'}; - $line{rate} = $rates[$i]->{'rate'}; - push @loop_currency, \%line; +for my $curr ( @rates ) { + my $selected; + if ($data->{currency} ) { + $selected = $curr->{currency} eq $data->{currency}; + } + else { + $selected = $curr->{currency} eq $default_currency; + } + push @loop_currency, { + currcode => $curr->{currency}, + rate => $curr->{rate}, + selected => $selected, + } } # build branches list @@ -219,7 +248,7 @@ foreach my $thisbranch ( sort {$branches->{$a}->{'branchname'} cmp $branches->{$ value => $thisbranch, branchname => $branches->{$thisbranch}->{'branchname'}, ); - $row{'selected'} = 1 if( $thisbranch eq $data->{branchcode}) ; + $row{'selected'} = 1 if( $thisbranch && $data->{branchcode} && $thisbranch eq $data->{branchcode}) ; push @branchloop, \%row; } $template->param( branchloop => \@branchloop ); @@ -230,23 +259,20 @@ my ( $flags, $homebranch )= ($borrower->{'flags'},$borrower->{'branchcode'}); my $budget = GetBudget($budget_id); # build budget list -my %labels; -my @values; -my $budgets = GetBudgetHierarchy('','',$borrower->{'borrowernumber'}); -foreach my $r (@$budgets) { - $labels{"$r->{budget_id}"} = $r->{budget_name}; - next if sprintf ("%00d", $r->{budget_amount}) == 0; - push @values, $r->{budget_id}; +my $budget_loop = []; +my $budgets = GetBudgetHierarchy(q{},$borrower->{branchcode},$borrower->{borrowernumber}); +foreach my $r (@{$budgets}) { + if (!defined $r->{budget_amount} || $r->{budget_amount} == 0) { + next; + } + push @{$budget_loop}, { + b_id => $r->{budget_id}, + b_txt => $r->{budget_name}, + b_active => $r->{budget_period_active}, + b_sel => ( $r->{budget_id} == $budget_id ) ? 1 : 0, + }; } -# if no budget_id is passed then its an add -my $budget_dropbox = CGI::scrolling_list( - -name => 'budget_id', - -id => 'budget_id', - -values => \@values, - -size => 1, - -labels => \%labels, - -onChange => "fetchSortDropbox(this.form)", -); + if ($close) { $budget_id = $data->{'budget_id'}; @@ -257,12 +283,12 @@ if ($close) { my $CGIsort1; if ($budget) { # its a mod .. if ( defined $budget->{'sort1_authcat'} ) { # with custom Asort* planning values - $CGIsort1 = GetAuthvalueDropbox( 'sort1', $budget->{'sort1_authcat'}, $data->{'sort1'} ); + $CGIsort1 = GetAuthvalueDropbox( $budget->{'sort1_authcat'}, $data->{'sort1'} ); } -} elsif(scalar(@$budgets)){ - $CGIsort1 = GetAuthvalueDropbox( 'sort1', @$budgets[0]->{'sort1_authcat'}, '' ); +} elsif(@{$budgets}){ + $CGIsort1 = GetAuthvalueDropbox( @$budgets[0]->{'sort1_authcat'}, '' ); }else{ - $CGIsort1 = GetAuthvalueDropbox( 'sort1','', '' ); + $CGIsort1 = GetAuthvalueDropbox( '', '' ); } # if CGIsort is successfully fetched, the use it @@ -276,12 +302,12 @@ if ($CGIsort1) { my $CGIsort2; if ($budget) { if ( defined $budget->{'sort2_authcat'} ) { - $CGIsort2 = GetAuthvalueDropbox( 'sort2', $budget->{'sort2_authcat'}, $data->{'sort2'} ); + $CGIsort2 = GetAuthvalueDropbox( $budget->{'sort2_authcat'}, $data->{'sort2'} ); } -} elsif(scalar(@$budgets)) { - $CGIsort2 = GetAuthvalueDropbox( 'sort2', @$budgets[0]->{sort2_authcat}, '' ); +} elsif(@{$budgets}) { + $CGIsort2 = GetAuthvalueDropbox( @$budgets[0]->{sort2_authcat}, '' ); }else{ - $CGIsort2 = GetAuthvalueDropbox( 'sort2','', '' ); + $CGIsort2 = GetAuthvalueDropbox( '', '' ); } if ($CGIsort2) { @@ -303,6 +329,9 @@ if (C4::Context->preference('AcqCreateItem') eq 'ordering' && !$ordernumber) { $template->param(items => \@itemloop); } +# Get the item types list, but only if item_level_itype is YES. Otherwise, it will be in the item, no need to display it in the biblio +my @itemtypes; +@itemtypes = C4::ItemType->all unless C4::Context->preference('item-level_itypes'); # fill template $template->param( @@ -337,22 +366,22 @@ $template->param( listincgst => $bookseller->{'listincgst'}, invoiceincgst => $bookseller->{'invoiceincgst'}, name => $bookseller->{'name'}, - cur_active_sym => $cur->{'symbol'}, - cur_active => $cur->{'currency'}, - currency => $bookseller->{'listprice'}, # eg: 'EUR' + cur_active_sym => $active_currency->{'symbol'}, + cur_active => $active_currency->{'currency'}, loop_currencies => \@loop_currency, orderexists => ( $new eq 'yes' ) ? 0 : 1, title => $data->{'title'}, author => $data->{'author'}, - publicationyear => $data->{'publicationyear'}, - budget_dropbox => $budget_dropbox, + publicationyear => $data->{'publicationyear'} ? $data->{'publicationyear'} : $data->{'copyrightdate'}, + budget_loop => $budget_loop, isbn => $data->{'isbn'}, seriestitle => $data->{'seriestitle'}, + itemtypeloop => \@itemtypes, quantity => $data->{'quantity'}, quantityrec => $data->{'quantity'}, rrp => $data->{'rrp'}, - listprice => sprintf("%.2f", $data->{'listprice'}||$listprice), - total => sprintf("%.2f", $data->{'ecost'}*$data->{'quantity'} ), + listprice => sprintf("%.2f", $data->{'listprice'}||$data->{'price'}||$listprice), + total => sprintf("%.2f", ($data->{'ecost'}||0)*($data->{'quantity'}||0) ), ecost => $data->{'ecost'}, notes => $data->{'notes'}, publishercode => $data->{'publishercode'}, @@ -360,16 +389,16 @@ $template->param( import_batch_id => $import_batch_id, # CHECKME: gst-stuff needs verifing, mason. - gstrate => $bookseller->{'gstrate'} || C4::Context->preference("gist"), + gstrate => $bookseller->{'gstrate'} // C4::Context->preference("gist") // 0, gstreg => $bookseller->{'gstreg'}, ); output_html_with_http_headers $input, $cookie, $template->output; -=item MARCfindbreeding +=head2 MARCfindbreeding - $record = MARCfindbreeding($breedingid); + $record = MARCfindbreeding($breedingid); Look up the import record repository for the record with record with id $breedingid. If found, returns the decoded @@ -474,3 +503,26 @@ sub MARCfindbreeding { return -1; } +sub Load_Duplicate { + my ($duplicatetitle)= @_; + ($template, $loggedinuser, $cookie) = get_template_and_user( + { + template_name => "acqui/neworderempty_duplicate.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => { acquisition => 'order_manage' }, +# debug => 1, + } + ); + + $template->param( + biblionumber => $biblionumber, + basketno => $basketno, + booksellerid => $basket->{'booksellerid'}, + breedingid => $params->{'breedingid'}, + duplicatetitle => $duplicatetitle, + ); + + output_html_with_http_headers $input, $cookie, $template->output; +}