- my $patron = C4::Members->GetMember(borrowernumber => $loggedinuser);
- my $branch = C4::Branch->GetBranchDetail($patron->{branchcode});
- my ($invoice);
- my %orderinfo = ("biblionumber", $biblionumber,
- "basketno", $cgiparams->{'basketno'},
- "quantity", $cgiparams->{'quantityrec-' . $biblio->{'import_record_id'}},
- "branchcode", $branch,
- "booksellerinvoicenumber", $invoice,
- "budget_id", $budget_id,
- "uncertainprice", 1,
- );
- # 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")) {
- $orderinfo{'listprice'} = $marcrecord->subfield("345","d");
- if ($orderinfo{'listprice'} =~ /^([\d\.,]*)/) {
- $orderinfo{'listprice'} = $1;
- $orderinfo{'listprice'} =~ s/,/\./;
- my $basket = GetBasket($orderinfo{basketno});
- my $bookseller = GetBookSellerFromId($basket->{booksellerid});
- # '//' is like '||' but tests for defined, rather than true
- my $gst = $bookseller->{gstrate} // C4::Context->preference("gist") // 0;
- $orderinfo{'unitprice'} = $orderinfo{listprice} - ($orderinfo{listprice} * ($bookseller->{discount} / 100));
- $orderinfo{'ecost'} = $orderinfo{unitprice};
- } else {
- $orderinfo{'listprice'} = 0;
- }
- $orderinfo{'rrp'} = $orderinfo{'listprice'};
- }
- elsif ($marcrecord->subfield("010","d")) {
- $orderinfo{'listprice'} = $marcrecord->subfield("010","d");
- if ($orderinfo{'listprice'} =~ /^([\d\.,]*)/) {
- $orderinfo{'listprice'} = $1;
- $orderinfo{'listprice'} =~ s/,/\./;
- my $basket = GetBasket($orderinfo{basketno});
- my $bookseller = GetBookSellerFromId($basket->{booksellerid});
- my $gst = $bookseller->{gstrate} // C4::Context->preference("gist") // 0;
- $orderinfo{'unitprice'} = $orderinfo{listprice} - ($orderinfo{listprice} * ($bookseller->{discount} / 100));
- $orderinfo{'ecost'} = $orderinfo{unitprice};
- } else {
- $orderinfo{'listprice'} = 0;
- }
- $orderinfo{'rrp'} = $orderinfo{'listprice'};
- }
- # 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);
-
- # now, add items if applicable
- # parse all items sent by the form, and create an item just for the import_record_id we are dealing with
- # this is not optimised, but it's working !
- if (C4::Context->preference('AcqCreateItem') eq 'ordering') {
- my @tags = $input->param('tag');
- my @subfields = $input->param('subfield');
- my @field_values = $input->param('field_value');
- my @serials = $input->param('serial');
- my @itemids = $input->param('itemid'); # hint : in iso2709, the itemid contains the import_record_id, not an item id. It is used to get the right item, as we have X biblios.
- my @ind_tag = $input->param('ind_tag');
- my @indicator = $input->param('indicator');
- #Rebuilding ALL the data for items into a hash
- # parting them on $itemid.
- my %itemhash;
- my $range=scalar(@itemids);
-
- my $i = 0;
- my @items;
- for my $itemid (@itemids){
- my $realitemid; #javascript generated random itemids, in the form itemid-randomnumber, $realitemid is the itemid, while $itemid is the itemide parsed from the html
- if ($itemid =~ m/(\d+)-.*/){
- my @splits = split(/-/, $itemid);
- $realitemid = $splits[0];
- }
- if ( ( $realitemid && $cgiparams->{'order-'. $realitemid} && $realitemid eq $biblio->{import_record_id}) || ($itemid && $cgiparams->{'order-'. $itemid} && $itemid eq $biblio->{import_record_id}) ){
- my ($item, $found);
- for my $tmpitem (@items){
- if ($tmpitem->{itemid} eq $itemid){
- $item = $tmpitem;
- $found = 1;
- }
- }
- push @{$item->{tags}}, $tags[$i];
- push @{$item->{subfields}}, $subfields[$i];
- push @{$item->{field_values}}, $field_values[$i];
- push @{$item->{ind_tag}}, $ind_tag[$i];
- push @{$item->{indicator}}, $indicator[$i];
- $item->{itemid} = $itemid;
- if (! $found){
- push @items, $item;
- }
- }
- ++$i
- }
- foreach my $item (@items){
- my $xml = TransformHtmlToXml( $item->{'tags'},
- $item->{'subfields'},
- $item->{'field_values'},
- $item->{'ind_tag'},
- $item->{'indicator'});
- my $record=MARC::Record::new_from_xml($xml, 'UTF-8');
- my ($biblionumber,$bibitemnum,$itemnumber) = AddItemFromMarc($record,$biblionumber);
- NewOrderItem( $itemnumber, $ordernumber);
- }
+ } else {
+ SetImportRecordStatus( $biblio->{'import_record_id'}, 'imported' );
+ }
+ # 3rd add order
+ my $patron = C4::Members->GetMember( borrowernumber => $loggedinuser );
+ my $branch = C4::Branch->GetBranchDetail( $patron->{branchcode} );
+ my ($invoice);
+ # 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,
+ "booksellerinvoicenumber", $invoice,
+ "budget_id", $budget_id, "uncertainprice", 1,
+ "sort1", $cgiparams->{'sort1'},"sort2", $cgiparams->{'sort2'},
+ "notes", $cgiparams->{'notes'}, "budget_id", $cgiparams->{'budget_id'},
+ "currency",$cgiparams->{'currency'},
+ );
+ # 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.
+ my $price= GetMarcPrice($marcrecord, C4::Context->preference('marcflavour'));
+ if ($price){
+ $price = $num->unformat_number($price);
+ }
+ if ($price){
+ $orderinfo{'listprice'} = $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} );
+ my $gst = $bookseller->{gstrate} || C4::Context->preference("gist") || 0;
+ $orderinfo{'unitprice'} = $orderinfo{listprice} - ( $orderinfo{listprice} * ( $bookseller->{discount} / 100 ) );
+ $orderinfo{'ecost'} = $orderinfo{unitprice};
+ } else {
+ $orderinfo{'listprice'} = 0;
+ }
+ $orderinfo{'rrp'} = $orderinfo{'listprice'};
+
+ # 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 );
+
+ # 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
+ # this is not optimised, but it's working !
+ if ( C4::Context->preference('AcqCreateItem') eq 'ordering' ) {
+ my @tags = $input->param('tag');
+ my @subfields = $input->param('subfield');
+ my @field_values = $input->param('field_value');
+ my @serials = $input->param('serial');
+ my @ind_tag = $input->param('ind_tag');
+ my @indicator = $input->param('indicator');
+ my $item;
+ push @{ $item->{tags} }, $tags[0];
+ push @{ $item->{subfields} }, $subfields[0];
+ push @{ $item->{field_values} }, $field_values[0];
+ push @{ $item->{ind_tag} }, $ind_tag[0];
+ 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++) {
+ my ( $biblionumber, $bibitemnum, $itemnumber ) = AddItemFromMarc( $record, $biblionumber );
+ NewOrderItem( $itemnumber, $ordernumber );