X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=acqui%2Fneworderempty.pl;h=d48255443b943779b8f5e9dff6db4d3007bcc02c;hb=1610a7d61cf5cd9a58edb0630640b18b973ce8dd;hp=6af057d29a46594c2bb0f8e4f61a1800ed346842;hpb=2a3f7c141798121a75fc9ee670af0fdde431d9c2;p=koha_gimpoz diff --git a/acqui/neworderempty.pl b/acqui/neworderempty.pl index 6af057d29a..d48255443b 100755 --- a/acqui/neworderempty.pl +++ b/acqui/neworderempty.pl @@ -75,25 +75,25 @@ use C4::Input; use C4::Auth; 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 +use C4::Biblio; # GetBiblioData GetMarcPrice +use C4::Items; #PrepareItemRecord use C4::Output; use C4::Input; use C4::Koha; use C4::Branch; # GetBranches use C4::Members; -use C4::Search qw/FindDuplicate BiblioAddAuthorities/; +use C4::Search qw/FindDuplicate/; #needed for z3950 import: 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') || 0; # 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'); @@ -121,6 +121,13 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); +my $marcflavour = C4::Context->preference('marcflavour'); + +if(!$basketno) { + my $order = GetOrder($ordernumber); + $basketno = $order->{'basketno'}; +} + my $basket = GetBasket($basketno); my $contract = &GetContract($basket->{contractnumber}); @@ -132,6 +139,11 @@ if ( $ordernumber eq '' and defined $params->{'breedingid'}){ 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 ($biblionumber,$duplicatetitle) = FindDuplicate($marcrecord); @@ -143,37 +155,17 @@ if ( $ordernumber eq '' and defined $params->{'breedingid'}){ } #from this point: add a new record if (C4::Context->preference("BiblioAddsAuthorities")){ - my ($countlinked,$countcreated)=BiblioAddAuthorities($marcrecord, $params->{'frameworkcode'}); + my $headings_linked=BiblioAutoLink($marcrecord, $params->{'frameworkcode'}); } my $bibitemnum; $params->{'frameworkcode'} or $params->{'frameworkcode'} = ""; ( $biblionumber, $bibitemnum ) = AddBiblio( $marcrecord, $params->{'frameworkcode'} ); # get the price if there is one. - # filter by storing only the 1st number - # we suppose the currency is correct, as we have no possibilities to get it. - if ($marcrecord->subfield("345","d")) { - $listprice = $marcrecord->subfield("345","d"); - if ($listprice =~ /^([\d\.,]*)/) { - $listprice = $1; - $listprice =~ s/,/\./; - } else { - $listprice = 0; - } - } - elsif ($marcrecord->subfield("010","d")) { - $listprice = $marcrecord->subfield("010","d"); - if ($listprice =~ /^([\d\.,]*)/) { - $listprice = $1; - $listprice =~ s/,/\./; - } else { - $listprice = 0; - } - } + $listprice = GetMarcPrice($marcrecord, $marcflavour); SetImportRecordStatus($params->{'breedingid'}, 'imported'); } -my $cur = GetCurrency(); if ( $ordernumber eq '' ) { # create order $new = 'yes'; @@ -200,18 +192,39 @@ else { #modify order $booksellerid = $data2->{'booksellerid'}; } +my $suggestion; +$suggestion = GetSuggestionInfo($suggestionid) if $suggestionid; + # 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 @@ -226,7 +239,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 ); @@ -246,6 +259,7 @@ foreach my $r (@{$budgets}) { 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, }; } @@ -260,12 +274,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 @@ -279,12 +293,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) { @@ -294,18 +308,22 @@ if ($CGIsort2) { } if (C4::Context->preference('AcqCreateItem') eq 'ordering' && !$ordernumber) { - # prepare empty item form - my $cell = PrepareItemrecordDisplay('','','','ACQ'); -# warn "==> ".Data::Dumper::Dumper($cell); - unless ($cell) { - $cell = PrepareItemrecordDisplay('','','',''); + # Check if ACQ framework exists + my $marc = GetMarcStructure(1, 'ACQ'); + unless($marc) { $template->param('NoACQframework' => 1); } - my @itemloop; - push @itemloop,$cell; - - $template->param(items => \@itemloop); + $template->param( + AcqCreateItemOrdering => 1, + UniqueItemFields => C4::Context->preference('UniqueItemFields'), + ); } +# 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'); + +# Find the items.barcode subfield for barcode validations +my (undef, $barcode_subfield) = GetMarcFromKohaField('items.barcode', ''); # fill template $template->param( @@ -325,12 +343,14 @@ $template->param( basketbooksellernote => $basket->{booksellernote}, basketcontractno => $basket->{contractnumber}, basketcontractname => $contract->{contractname}, - creationdate => C4::Dates->new($basket->{creationdate},'iso')->output, + creationdate => $basket->{creationdate}, authorisedby => $basket->{'authorisedby'}, authorisedbyname => $basket->{'authorisedbyname'}, - closedate => C4::Dates->new($basket->{'closedate'},'iso')->output, + closedate => $basket->{'closedate'}, # order details - suggestionid => $suggestionid, + suggestionid => $suggestion->{suggestionid}, + surnamesuggestedby => $suggestion->{surnamesuggestedby}, + firstnamesuggestedby => $suggestion->{firstnamesuggestedby}, biblionumber => $biblionumber, uncertainprice => $data->{'uncertainprice'}, authorisedbyname => $borrower->{'firstname'} . " " . $borrower->{'surname'}, @@ -340,25 +360,28 @@ $template->param( listincgst => $bookseller->{'listincgst'}, invoiceincgst => $bookseller->{'invoiceincgst'}, name => $bookseller->{'name'}, - cur_active_sym => $cur->{'symbol'}, - cur_active => $cur->{'currency'}, - currency => $bookseller->{'listprice'} || $cur->{'currency'}, # 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'} ? $data->{'publicationyear'} : $data->{'copyrightdate'}, + editionstatement => $data->{'editionstatement'}, 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), + listprice => sprintf("%.2f", $data->{'listprice'}||$data->{'price'}||$listprice), total => sprintf("%.2f", ($data->{'ecost'}||0)*($data->{'quantity'}||0) ), ecost => $data->{'ecost'}, + unitprice => sprintf("%.2f", $data->{'unitprice'}), notes => $data->{'notes'}, publishercode => $data->{'publishercode'}, + barcode_subfield => $barcode_subfield, import_batch_id => $import_batch_id, @@ -398,7 +421,7 @@ sub MARCfindbreeding { } } # fix the unimarc 100 coded field (with unicode information) - if (C4::Context->preference('marcflavour') eq 'UNIMARC' && $record->subfield(100,'a')) { + if ($marcflavour eq 'UNIMARC' && $record->subfield(100,'a')) { my $f100a=$record->subfield(100,'a'); my $f100 = $record->field(100); my $f100temp = $f100->as_string;