View | Details | Raw Unified | Return to bug 35026
Collapse All | Expand All

(-)a/Koha/MarcOrder.pm (-367 / +301 lines)
Lines 90-96 sub import_record_and_create_order_lines { Link Here
90
    my $budget_id                 = $args->{budget_id};
90
    my $budget_id                 = $args->{budget_id};
91
    my $vendor                    = $args->{vendor};
91
    my $vendor                    = $args->{vendor};
92
92
93
    my $result = add_biblios_from_import_record(
93
    my $result = add_biblio_from_import_record(
94
        {
94
        {
95
            import_batch_id           => $import_batch_id,
95
            import_batch_id           => $import_batch_id,
96
            import_record             => $import_record,
96
            import_record             => $import_record,
Lines 167-174 sub _get_MarcFieldsToOrder_syspref_data { Link Here
167
=cut
167
=cut
168
168
169
sub _get_MarcItemFieldsToOrder_syspref_data {
169
sub _get_MarcItemFieldsToOrder_syspref_data {
170
    my ( $syspref_name, $record, $field_list ) = @_;
170
    my ($record) = @_;
171
    my $syspref = C4::Context->preference($syspref_name);
171
    my $syspref = C4::Context->preference('MarcItemFieldsToOrder');
172
    $syspref = "$syspref\n\n";
172
    $syspref = "$syspref\n\n";
173
    my $yaml = eval { YAML::XS::Load( Encode::encode_utf8($syspref) ); };
173
    my $yaml = eval { YAML::XS::Load( Encode::encode_utf8($syspref) ); };
174
    if ($@) {
174
    if ($@) {
Lines 179-186 sub _get_MarcItemFieldsToOrder_syspref_data { Link Here
179
    my @tags_list;
179
    my @tags_list;
180
180
181
    # Check tags in syspref definition
181
    # Check tags in syspref definition
182
    for my $field_name (@$field_list) {
182
    for my $field_name ( keys %$yaml ) {
183
        next unless exists $yaml->{$field_name};
184
        my @fields = split /\|/, $yaml->{$field_name};
183
        my @fields = split /\|/, $yaml->{$field_name};
185
        for my $field (@fields) {
184
        for my $field (@fields) {
186
            my ( $f, $sf ) = split /\$/, $field;
185
            my ( $f, $sf ) = split /\$/, $field;
Lines 208-215 sub _get_MarcItemFieldsToOrder_syspref_data { Link Here
208
    if ( $tags_count->{count} ) {
207
    if ( $tags_count->{count} ) {
209
        for ( my $i = 0 ; $i < $tags_count->{count} ; $i++ ) {
208
        for ( my $i = 0 ; $i < $tags_count->{count} ; $i++ ) {
210
            my $r;
209
            my $r;
211
            for my $field_name (@$field_list) {
210
            for my $field_name ( keys %$yaml ) {
212
                next unless exists $yaml->{$field_name};
213
                my @fields = split /\|/, $yaml->{$field_name};
211
                my @fields = split /\|/, $yaml->{$field_name};
214
                for my $field (@fields) {
212
                for my $field (@fields) {
215
                    my ( $f, $sf ) = split /\$/, $field;
213
                    my ( $f, $sf ) = split /\$/, $field;
Lines 254-262 sub _verify_number_of_fields { Link Here
254
    return { error => 0, count => $tags_count };
252
    return { error => 0, count => $tags_count };
255
}
253
}
256
254
257
=head3 add_biblios_from_import_record
255
=head3 add_biblio_from_import_record
258
256
259
    my ($record_results, $duplicates_in_batch) = add_biblios_from_import_record({
257
    my ($record_results, $duplicates_in_batch) = add_biblio_from_import_record({
260
        import_record             => $import_record,
258
        import_record             => $import_record,
261
        matcher_id                => $matcher_id,
259
        matcher_id                => $matcher_id,
262
        overlay_action            => $overlay_action,
260
        overlay_action            => $overlay_action,
Lines 271-277 sub _verify_number_of_fields { Link Here
271
269
272
=cut
270
=cut
273
271
274
sub add_biblios_from_import_record {
272
sub add_biblio_from_import_record {
275
    my ($args) = @_;
273
    my ($args) = @_;
276
274
277
    my $import_batch_id           = $args->{import_batch_id};
275
    my $import_batch_id           = $args->{import_batch_id};
Lines 369-638 sub add_items_from_import_record { Link Here
369
    my $active_currency    = Koha::Acquisition::Currencies->get_active;
367
    my $active_currency    = Koha::Acquisition::Currencies->get_active;
370
    my $biblionumber       = $record_result->{biblionumber};
368
    my $biblionumber       = $record_result->{biblionumber};
371
    my $marcrecord         = $record_result->{marcrecord};
369
    my $marcrecord         = $record_result->{marcrecord};
372
    my @order_line_details;
373
370
374
    if ( $agent eq 'cron' ) {
371
    if ( $agent eq 'cron' ) {
375
        my $marc_fields_to_order = _get_MarcFieldsToOrder_syspref_data(
372
        my $marc_fields_to_order = _get_MarcFieldsToOrder_syspref_data(
376
            'MarcFieldsToOrder', $marcrecord,
373
            'MarcFieldsToOrder', $marcrecord,
377
            [ 'price', 'quantity', 'budget_code', 'discount', 'sort1', 'sort2' ]
374
            [ 'price', 'quantity', 'budget_code', 'discount', 'sort1', 'sort2' ]
378
        );
375
        );
379
        my $quantity = $marc_fields_to_order->{quantity};
380
        my $budget_code =
381
            $marc_fields_to_order->{budget_code} || $budget_id;    # Use fallback from ordering profile if not mapped
382
        my $price    = $marc_fields_to_order->{price};
383
        my $discount = $marc_fields_to_order->{discount};
384
        my $sort1    = $marc_fields_to_order->{sort1};
385
        my $sort2    = $marc_fields_to_order->{sort2};
386
        my $mapped_budget;
387
388
        if ($budget_code) {
389
            my $biblio_budget = GetBudgetByCode($budget_code);
390
            if ($biblio_budget) {
391
                $mapped_budget = $biblio_budget->{budget_id};
392
            } else {
393
                $mapped_budget = $budget_id;
394
            }
395
        }
396
376
397
        my $marc_item_fields_to_order = _get_MarcItemFieldsToOrder_syspref_data(
377
        my $marc_item_fields_to_order = _get_MarcItemFieldsToOrder_syspref_data($marcrecord);
398
            'MarcItemFieldsToOrder',
378
399
            $marcrecord,
379
        my $item_fields = {
400
            [
380
            homebranch       => $marc_item_fields_to_order->{homebranch},
401
                'homebranch', 'holdingbranch', 'itype', 'nonpublic_note',   'public_note', 'loc', 'ccode', 'notforloan',
381
            holdingbranch    => $marc_item_fields_to_order->{holdingbranch},
402
                'uri',        'copyno',        'price', 'replacementprice', 'itemcallnumber', 'quantity', 'budget_code'
382
            itype            => $marc_item_fields_to_order->{itype},
403
            ]
383
            nonpublic_note   => $marc_item_fields_to_order->{nonpublic_note},
404
        );
384
            public_note      => $marc_item_fields_to_order->{public_note},
405
        my $item_homebranch     = $marc_item_fields_to_order->{homebranch};
385
            loc              => $marc_item_fields_to_order->{loc},
406
        my $item_holdingbranch  = $marc_item_fields_to_order->{holdingbranch};
386
            ccode            => $marc_item_fields_to_order->{ccode},
407
        my $item_itype          = $marc_item_fields_to_order->{itype};
387
            notforloan       => $marc_item_fields_to_order->{notforloan},
408
        my $item_nonpublic_note = $marc_item_fields_to_order->{nonpublic_note};
388
            uri              => $marc_item_fields_to_order->{uri},
409
        my $item_public_note    = $marc_item_fields_to_order->{public_note};
389
            copyno           => $marc_item_fields_to_order->{copyno},
410
        my $item_loc            = $marc_item_fields_to_order->{loc};
390
            quantity         => $marc_item_fields_to_order->{quantity},
411
        my $item_ccode          = $marc_item_fields_to_order->{ccode};
391
            price            => $marc_item_fields_to_order->{price},
412
        my $item_notforloan     = $marc_item_fields_to_order->{notforloan};
392
            replacementprice => $marc_item_fields_to_order->{replacementprice},
413
        my $item_uri            = $marc_item_fields_to_order->{uri};
393
            itemcallnumber   => $marc_item_fields_to_order->{itemcallnumber},
414
        my $item_copyno         = $marc_item_fields_to_order->{copyno};
394
            budget_code      => $marc_item_fields_to_order->{budget_code},
415
        my $item_quantity       = $marc_item_fields_to_order->{quantity} || 0;
395
            c_quantity       => $marc_fields_to_order->{quantity},
416
        my $item_budget_code    = $marc_item_fields_to_order->{budget_code};
396
            c_budget_code    => $marc_fields_to_order->{budget_code},
417
        my $item_budget_id;
397
            c_price          => $marc_fields_to_order->{price},
418
398
            c_discount       => $marc_fields_to_order->{discount},
419
        if ( $marc_item_fields_to_order->{budget_code} ) {
399
            c_sort1          => $marc_fields_to_order->{sort1},
420
            my $item_budget = GetBudgetByCode( $marc_item_fields_to_order->{budget_code} );
400
            c_sort2          => $marc_fields_to_order->{sort2},
421
            if ($item_budget) {
401
        };
422
                $item_budget_id = $item_budget->{budget_id};
402
423
            } else {
403
        my $order_line_fields = parse_input_into_order_line_fields(
424
                $item_budget_id = $budget_id;
404
            {
425
            }
405
                agent        => $agent,
426
        } else {
427
            $item_budget_id = $budget_id;
428
        }
429
        my $item_price             = $marc_item_fields_to_order->{price};
430
        my $item_replacement_price = $marc_item_fields_to_order->{replacementprice};
431
        my $item_callnumber        = $marc_item_fields_to_order->{itemcallnumber};
432
        my $itemcreation           = 0;
433
434
        for ( my $i = 0 ; $i < $item_quantity ; $i++ ) {
435
            $itemcreation = 1;
436
            my $item = Koha::Item->new(
437
                {
438
                    biblionumber        => $biblionumber,
439
                    homebranch          => $item_homebranch,
440
                    holdingbranch       => $item_holdingbranch,
441
                    itype               => $item_itype,
442
                    itemnotes_nonpublic => $item_nonpublic_note,
443
                    itemnotes           => $item_public_note,
444
                    location            => $item_loc,
445
                    ccode               => $item_ccode,
446
                    notforloan          => $item_notforloan,
447
                    uri                 => $item_uri,
448
                    copynumber          => $item_copyno,
449
                    price               => $item_price,
450
                    replacementprice    => $item_replacement_price,
451
                    itemcallnumber      => $item_callnumber,
452
                }
453
            )->store;
454
455
            my %order_detail_hash = (
456
                biblionumber => $biblionumber,
406
                biblionumber => $biblionumber,
457
                basketno     => $basket_id,
407
                budget_id    => $budget_id,
458
                itemnumbers  => ( $item->itemnumber ),
408
                basket_id    => $basket_id,
459
                quantity     => 1,
409
                fields       => $item_fields,
460
                budget_id    => $item_budget_id,
461
                currency     => $vendor->listprice,
462
            );
463
464
            if ($item_price) {
465
                $order_detail_hash{tax_rate_on_ordering}  = $vendor->tax_rate;
466
                $order_detail_hash{tax_rate_on_receiving} = $vendor->tax_rate;
467
                $order_detail_hash{discount}              = $vendor->discount;
468
                $order_detail_hash{rrp}                   = $item_price;
469
                $order_detail_hash{ecost} =
470
                    $vendor->discount ? $item_price * ( 1 - $vendor->discount / 100 ) : $item_price;
471
                $order_detail_hash{listprice} = $order_detail_hash{rrp} / $active_currency->rate;
472
                $order_detail_hash{unitprice} = $order_detail_hash{ecost};
473
            } else {
474
                $order_detail_hash{listprice} = 0;
475
            }
410
            }
476
            $order_detail_hash{replacementprice} = $item_replacement_price || 0;
411
        );
477
            $order_detail_hash{uncertainprice}   = 0 if $order_detail_hash{listprice};
478
479
            push @order_line_details, \%order_detail_hash;
480
        }
481
412
482
        if ( !$itemcreation ) {
413
        my $order_line_details = create_items_and_generate_order_hash(
483
            my %order_detail_hash = (
414
            {
484
                biblionumber   => $biblionumber,
415
                fields          => $order_line_fields,
485
                basketno       => $basket_id,
416
                vendor          => $vendor,
486
                quantity       => $quantity,
417
                agent           => $agent,
487
                budget_id      => $mapped_budget,
418
                active_currency => $active_currency,
488
                uncertainprice => 1,
489
                sort1          => $sort1,
490
                sort2          => $sort2,
491
            );
492
493
            if ($price) {
494
                $order_detail_hash{tax_rate_on_ordering}  = $vendor->tax_rate;
495
                $order_detail_hash{tax_rate_on_receiving} = $vendor->tax_rate;
496
                my $order_discount = $discount ? $discount : $vendor->discount;
497
                $order_detail_hash{discount}  = $order_discount;
498
                $order_detail_hash{rrp}       = $price;
499
                $order_detail_hash{ecost}     = $order_discount ? $price * ( 1 - $order_discount / 100 ) : $price;
500
                $order_detail_hash{listprice} = $order_detail_hash{rrp} / $active_currency->rate;
501
                $order_detail_hash{unitprice} = $order_detail_hash{ecost};
502
            } else {
503
                $order_detail_hash{listprice} = 0;
504
            }
419
            }
420
        );
505
421
506
            $order_detail_hash{uncertainprice} = 0 if $order_detail_hash{listprice};
422
        return $order_line_details;
507
            push @order_line_details, \%order_detail_hash;
508
        }
509
    }
423
    }
510
424
511
    if ( $agent eq 'client' ) {
425
    if ( $agent eq 'client' ) {
512
        my $homebranches      = $client_item_fields->{homebranches};
426
        my $order_line_fields = parse_input_into_order_line_fields(
513
        my $count             = scalar @$homebranches;
427
            {
514
        my $holdingbranches   = $client_item_fields->{holdingbranches};
428
                agent        => $agent,
515
        my $itypes            = $client_item_fields->{itypes};
516
        my $nonpublic_notes   = $client_item_fields->{nonpublic_notes};
517
        my $public_notes      = $client_item_fields->{public_notes};
518
        my $locs              = $client_item_fields->{locs};
519
        my $ccodes            = $client_item_fields->{ccodes};
520
        my $notforloans       = $client_item_fields->{notforloans};
521
        my $uris              = $client_item_fields->{uris};
522
        my $copynos           = $client_item_fields->{copynos};
523
        my $budget_codes      = $client_item_fields->{budget_codes};
524
        my $itemprices        = $client_item_fields->{itemprices};
525
        my $replacementprices = $client_item_fields->{replacementprices};
526
        my $itemcallnumbers   = $client_item_fields->{itemcallnumbers};
527
528
        my $itemcreation;
529
        for ( my $i = 0 ; $i < $count ; $i++ ) {
530
            $itemcreation = 1;
531
            my $item = Koha::Item->new(
532
                {
533
                    biblionumber        => $biblionumber,
534
                    homebranch          => @$homebranches[$i],
535
                    holdingbranch       => @$holdingbranches[$i],
536
                    itemnotes_nonpublic => @$nonpublic_notes[$i],
537
                    itemnotes           => @$public_notes[$i],
538
                    location            => @$locs[$i],
539
                    ccode               => @$ccodes[$i],
540
                    itype               => @$itypes[$i],
541
                    notforloan          => @$notforloans[$i],
542
                    uri                 => @$uris[$i],
543
                    copynumber          => @$copynos[$i],
544
                    price               => @$itemprices[$i],
545
                    replacementprice    => @$replacementprices[$i],
546
                    itemcallnumber      => @$itemcallnumbers[$i],
547
                }
548
            )->store;
549
550
            my %order_detail_hash = (
551
                biblionumber => $biblionumber,
429
                biblionumber => $biblionumber,
552
                itemnumbers  => ( $item->itemnumber ),
430
                budget_id    => $budget_id,
553
                basketno     => $basket_id,
431
                basket_id    => $basket_id,
554
                quantity     => 1,
432
                fields       => $client_item_fields,
555
                budget_id    => @$budget_codes[$i]
556
                    || $budget_id,    # If no budget selected in the UI, default to the budget on the ordering account
557
                currency => $vendor->listprice,
558
            );
559
560
            if ( @$itemprices[$i] ) {
561
                $order_detail_hash{tax_rate_on_ordering}  = $vendor->tax_rate;
562
                $order_detail_hash{tax_rate_on_receiving} = $vendor->tax_rate;
563
                my $order_discount =
564
                    $client_item_fields->{c_discount} ? $client_item_fields->{c_discount} : $vendor->discount;
565
                $order_detail_hash{discount} = $order_discount;
566
                $order_detail_hash{rrp}      = @$itemprices[$i];
567
                $order_detail_hash{ecost} =
568
                    $order_discount ? @$itemprices[$i] * ( 1 - $order_discount / 100 ) : @$itemprices[$i];
569
                $order_detail_hash{listprice} = $order_detail_hash{rrp} / $active_currency->rate;
570
                $order_detail_hash{unitprice} = $order_detail_hash{ecost};
571
            } else {
572
                $order_detail_hash{listprice} = 0;
573
            }
433
            }
574
            $order_detail_hash{replacementprice} = @$replacementprices[$i] || 0;
434
        );
575
            $order_detail_hash{uncertainprice}   = 0 if $order_detail_hash{listprice};
576
577
            push @order_line_details, \%order_detail_hash;
578
        }
579
435
580
        if ( !$itemcreation ) {
436
        my $order_line_details = create_items_and_generate_order_hash(
581
            my $quantity          = GetMarcQuantity( $marcrecord, C4::Context->preference('marcflavour') ) || 1;
437
            {
582
            my %order_detail_hash = (
438
                fields          => $order_line_fields,
583
                biblionumber       => $biblionumber,
439
                vendor          => $vendor,
584
                basketno           => $basket_id,
440
                agent           => $agent,
585
                quantity           => $client_item_fields->{c_quantity},
441
                active_currency => $active_currency,
586
                budget_id          => $client_item_fields->{c_budget_id},
587
                uncertainprice     => 1,
588
                sort1              => $client_item_fields->{c_sort1},
589
                sort2              => $client_item_fields->{c_sort2},
590
                order_internalnote => $client_item_fields->{all_order_internalnote},
591
                order_vendornote   => $client_item_fields->{all_order_vendornote},
592
                currency           => $client_item_fields->{all_currency},
593
                replacementprice   => $client_item_fields->{c_replacement_price},
594
            );
595
            if ( $client_item_fields->{c_price} ) {
596
                $order_detail_hash{tax_rate_on_ordering}  = $vendor->tax_rate;
597
                $order_detail_hash{tax_rate_on_receiving} = $vendor->tax_rate;
598
                my $order_discount =
599
                    $client_item_fields->{c_discount} ? $client_item_fields->{c_discount} : $vendor->discount;
600
                $order_detail_hash{discount} = $order_discount;
601
                $order_detail_hash{rrp}      = $client_item_fields->{c_price};
602
                $order_detail_hash{ecost} =
603
                      $order_discount
604
                    ? $client_item_fields->{c_price} * ( 1 - $order_discount / 100 )
605
                    : $client_item_fields->{c_price};
606
                $order_detail_hash{listprice} = $order_detail_hash{rrp} / $active_currency->rate;
607
                $order_detail_hash{unitprice} = $order_detail_hash{ecost};
608
            } else {
609
                $order_detail_hash{listprice} = 0;
610
            }
442
            }
443
        );
611
444
612
            $order_detail_hash{uncertainprice} = 0 if $order_detail_hash{listprice};
445
        return $order_line_details;
613
614
            # Add items if applicable parsing the item sent by the form, and create an item just for the import_record_id we are dealing with
615
            my $basket = Koha::Acquisition::Baskets->find($basket_id);
616
            $order_detail_hash{itemnumbers} = ();
617
            if ( $basket->effective_create_items eq 'ordering' && !$basket->is_standing ) {
618
                my @tags         = $client_item_fields->{tag};
619
                my @subfields    = $client_item_fields->{subfield};
620
                my @field_values = $client_item_fields->{field_value};
621
                my @serials      = $client_item_fields->{serial};
622
                my $xml          = TransformHtmlToXml( \@tags, \@subfields, \@field_values );
623
                my $record       = MARC::Record::new_from_xml( $xml, 'UTF-8' );
624
                for ( my $qtyloop = 1 ; $qtyloop <= $client_item_fields->{c_quantity} ; $qtyloop++ ) {
625
                    my ( $biblionumber, undef, $itemnumber ) = AddItemFromMarc( $record, $biblionumber );
626
                    push @{ $order_detail_hash{itemnumbers} }, $itemnumber;
627
                }
628
            }
629
            push @order_line_details, \%order_detail_hash;
630
        }
631
    }
446
    }
632
    return \@order_line_details;
447
448
    # return \@order_line_details;
633
}
449
}
634
450
635
=head3 create_order_lines
451
=head3 create_items_and_generate_order_hash
636
452
637
    my $order_lines = create_order_lines({
453
    my $order_lines = create_order_lines({
638
        order_line_details => $order_line_details
454
        order_line_details => $order_line_details
Lines 663-676 sub create_order_lines { Link Here
663
479
664
=head3 import_batches_list
480
=head3 import_batches_list
665
481
666
Fetches import batches matching the batch to be added to the basket and adds these to the $template
482
Fetches import batches matching the batch to be added to the basket and returns these to the template
667
483
668
Koha::MarcOrder->import_batches_list($template);
484
Koha::MarcOrder->import_batches_list();
669
485
670
=cut
486
=cut
671
487
672
sub import_batches_list {
488
sub import_batches_list {
673
    my ( $self, $template ) = @_;
489
    my ($self) = @_;
674
    my $batches = GetImportBatchRangeDesc();
490
    my $batches = GetImportBatchRangeDesc();
675
491
676
    my @list = ();
492
    my @list = ();
Lines 702-723 sub import_batches_list { Link Here
702
            }
518
            }
703
        }
519
        }
704
    }
520
    }
705
    $template->param( batch_list => \@list );
706
    my $num_batches = GetNumberOfNonZ3950ImportBatches();
521
    my $num_batches = GetNumberOfNonZ3950ImportBatches();
707
    $template->param( num_results => $num_batches );
522
523
    return {
524
        list        => \@list,
525
        num_results => $num_batches
526
    };
708
}
527
}
709
528
710
=head3
529
=head3
711
530
712
For an import batch, this function reads the files and creates all the relevant data pertaining to that file
531
For an import batch, this function reads the files and creates all the relevant data pertaining to that file
713
It then passes this to the $template variable to be shown in the UI
532
It then returns this to the template to be shown in the UI
714
533
715
Koha::MarcOrder->import_biblios_list( $template, $cgiparams->{'import_batch_id'} );
534
Koha::MarcOrder->import_biblios_list( $cgiparams->{'import_batch_id'} );
716
535
717
=cut
536
=cut
718
537
719
sub import_biblios_list {
538
sub import_biblios_list {
720
    my ( $self, $template, $import_batch_id ) = @_;
539
    my ( $self, $import_batch_id ) = @_;
721
    my $batch = GetImportBatch( $import_batch_id, 'staged' );
540
    my $batch = GetImportBatch( $import_batch_id, 'staged' );
722
    return () unless $batch and $batch->{import_status} =~ /^staged$|^reverted$/;
541
    return () unless $batch and $batch->{import_status} =~ /^staged$|^reverted$/;
723
    my $import_records = Koha::Import::Records->search(
542
    my $import_records = Koha::Import::Records->search(
Lines 806-868 sub import_biblios_list { Link Here
806
        # Items
625
        # Items
807
        my @itemlist           = ();
626
        my @itemlist           = ();
808
        my $all_items_quantity = 0;
627
        my $all_items_quantity = 0;
809
        my $alliteminfos       = _get_MarcItemFieldsToOrder_syspref_data(
628
        my $alliteminfos       = _get_MarcItemFieldsToOrder_syspref_data($marcrecord);
810
            'MarcItemFieldsToOrder',
811
            $marcrecord,
812
            [
813
                'homebranch', 'holdingbranch', 'itype', 'nonpublic_note',   'public_note', 'loc', 'ccode', 'notforloan',
814
                'uri',        'copyno',        'price', 'replacementprice', 'itemcallnumber', 'quantity', 'budget_code'
815
            ]
816
        );
817
        if ( !$alliteminfos || %$alliteminfos != -1 ) {
629
        if ( !$alliteminfos || %$alliteminfos != -1 ) {
818
            my $item_homebranch     = $alliteminfos->{homebranch};
630
819
            my $item_holdingbranch  = $alliteminfos->{holdingbranch};
631
            # Quantity is required, default to one if not supplied
820
            my $item_itype          = $alliteminfos->{itype};
632
            my $quantity = delete $alliteminfos->{quantity} || 1;
821
            my $item_nonpublic_note = $alliteminfos->{nonpublic_note};
633
822
            my $item_public_note    = $alliteminfos->{public_note};
634
            # Handle incorrectly named original parameters for MarcItemFieldsToOrder
823
            my $item_loc            = $alliteminfos->{loc};
635
            $alliteminfos->{location}   = delete $alliteminfos->{loc}    if $alliteminfos->{loc};
824
            my $item_ccode          = $alliteminfos->{ccode};
636
            $alliteminfos->{copynumber} = delete $alliteminfos->{copyno} if $alliteminfos->{copyno};
825
            my $item_notforloan     = $alliteminfos->{notforloan};
637
826
            my $item_uri            = $alliteminfos->{uri};
638
            # Convert budget code to a budget id
827
            my $item_copyno         = $alliteminfos->{copyno};
639
            my $item_budget_code = delete $alliteminfos->{budget_code};
828
            my $item_quantity       = $alliteminfos->{quantity} || 1;
640
            if ($item_budget_code) {
829
            my $item_budget_code    = $alliteminfos->{budget_code};
641
                my $item_budget = GetBudgetByCode($item_budget_code);
830
            my $item_budget_id;
642
                $alliteminfos->{budget_id} = $item_budget->{budget_id} || $budget_id;
831
832
            if ( $alliteminfos->{budget_code} ) {
833
                my $item_budget = GetBudgetByCode( $alliteminfos->{budget_code} );
834
                if ($item_budget) {
835
                    $item_budget_id = $item_budget->{budget_id};
836
                }
837
            }
643
            }
838
            my $item_price             = $alliteminfos->{price};
839
            my $item_replacement_price = $alliteminfos->{replacementprice};
840
            my $item_callnumber        = $alliteminfos->{itemcallnumber};
841
842
            for ( my $i = 0 ; $i < $item_quantity ; $i++ ) {
843
844
                my %itemrecord = (
845
                    'item_id'          => $item_id++,
846
                    'biblio_count'     => $biblio_count,
847
                    'homebranch'       => $item_homebranch,
848
                    'holdingbranch'    => $item_holdingbranch,
849
                    'itype'            => $item_itype,
850
                    'nonpublic_note'   => $item_nonpublic_note,
851
                    'public_note'      => $item_public_note,
852
                    'loc'              => $item_loc,
853
                    'ccode'            => $item_ccode,
854
                    'notforloan'       => $item_notforloan,
855
                    'uri'              => $item_uri,
856
                    'copyno'           => $item_copyno,
857
                    'quantity'         => $item_quantity,
858
                    'budget_id'        => $item_budget_id         || $budget_id,
859
                    'itemprice'        => $item_price             || $price,
860
                    'replacementprice' => $item_replacement_price || $replacementprice,
861
                    'itemcallnumber'   => $item_callnumber,
862
                );
863
                $all_items_quantity++;
864
                push @itemlist, \%itemrecord;
865
644
645
            # Clone the item data for the needed quantity
646
            # Add the incremented item id for each item in that quantity
647
            for ( my $i = 0 ; $i < $quantity ; $i++ ) {
648
                my $itemrecord = {%$alliteminfos};
649
                $itemrecord->{item_id} = $item_id++;
650
651
                # Rename price field to match UI
652
                $itemrecord->{itemprice} = delete $itemrecord->{price} if $itemrecord->{price};
653
                $all_items_quantity++;
654
                push @itemlist, $itemrecord;
866
            }
655
            }
867
656
868
            $cellrecord{'iteminfos'} = \@itemlist;
657
            $cellrecord{'iteminfos'} = \@itemlist;
Lines 893-973 sub import_biblios_list { Link Here
893
    my $overlay_action = GetImportBatchOverlayAction($import_batch_id);
682
    my $overlay_action = GetImportBatchOverlayAction($import_batch_id);
894
    my $nomatch_action = GetImportBatchNoMatchAction($import_batch_id);
683
    my $nomatch_action = GetImportBatchNoMatchAction($import_batch_id);
895
    my $item_action    = GetImportBatchItemAction($import_batch_id);
684
    my $item_action    = GetImportBatchItemAction($import_batch_id);
896
    $template->param(
685
    my $result         = {
897
        import_biblio_list                 => \@list,
686
        import_biblio_list => \@list,
898
        num_results                        => $num_records,
687
        num_results        => $num_records,
899
        import_batch_id                    => $import_batch_id,
688
        import_batch_id    => $import_batch_id,
900
        "overlay_action_${overlay_action}" => 1,
689
        overlay_action     => $overlay_action,
901
        overlay_action                     => $overlay_action,
690
        nomatch_action     => $nomatch_action,
902
        "nomatch_action_${nomatch_action}" => 1,
691
        item_action        => $item_action,
903
        nomatch_action                     => $nomatch_action,
692
        item_error         => $item_error,
904
        "item_action_${item_action}"       => 1,
693
        locationloop       => \@locations,
905
        item_action                        => $item_action,
694
        ccodeloop          => \@ccodes,
906
        item_error                         => $item_error,
695
        notforloanloop     => \@notforloans,
907
        libraries                          => Koha::Libraries->search,
696
        batch              => $batch,
908
        locationloop                       => \@locations,
697
    };
909
        itemtypes                          => Koha::ItemTypes->search,
910
        ccodeloop                          => \@ccodes,
911
        notforloanloop                     => \@notforloans,
912
    );
913
    _batch_info( $template, $batch );
914
}
915
916
=head3
917
918
Creates a hash of information to be used about an import batch in the template
919
920
=cut
921
698
922
sub _batch_info {
923
    my ( $template, $batch ) = @_;
924
    $template->param(
925
        batch_info       => 1,
926
        file_name        => $batch->{'file_name'},
927
        comments         => $batch->{'comments'},
928
        import_status    => $batch->{'import_status'},
929
        upload_timestamp => $batch->{'upload_timestamp'},
930
        num_records      => $batch->{'num_records'},
931
        num_items        => $batch->{'num_items'}
932
    );
933
    if ( $batch->{'num_records'} > 0 ) {
699
    if ( $batch->{'num_records'} > 0 ) {
934
        if ( $batch->{'import_status'} eq 'staged' or $batch->{'import_status'} eq 'reverted' ) {
700
        if ( $batch->{'import_status'} eq 'staged' or $batch->{'import_status'} eq 'reverted' ) {
935
            $template->param( can_commit => 1 );
701
            $result->{can_commit} = 1;
936
        }
702
        }
937
        if ( $batch->{'import_status'} eq 'imported' ) {
703
        if ( $batch->{'import_status'} eq 'imported' ) {
938
            $template->param( can_revert => 1 );
704
            $result->{can_revert} = 1;
939
        }
705
        }
940
    }
706
    }
941
    if ( defined $batch->{'matcher_id'} ) {
707
    if ( defined $batch->{'matcher_id'} ) {
942
        my $matcher = C4::Matcher->fetch( $batch->{'matcher_id'} );
708
        my $matcher = C4::Matcher->fetch( $batch->{'matcher_id'} );
943
        if ( defined $matcher ) {
709
        if ( defined $matcher ) {
944
            $template->param(
710
            $result->{'current_matcher_id'}          = $batch->{'matcher_id'};
945
                'current_matcher_id'          => $batch->{'matcher_id'},
711
            $result->{'current_matcher_code'}        = $matcher->code();
946
                'current_matcher_code'        => $matcher->code(),
712
            $result->{'current_matcher_description'} = $matcher->description();
947
                'current_matcher_description' => $matcher->description()
948
            );
949
        }
713
        }
950
    }
714
    }
951
    _add_matcher_list( $batch->{'matcher_id'}, $template );
715
716
    my @matchers = C4::Matcher::GetMatcherList();
717
    if ( defined $batch->{'matcher_id'} ) {
718
        for ( my $i = 0 ; $i <= $#matchers ; $i++ ) {
719
            if ( $matchers[$i]->{'matcher_id'} == $batch->{'matcher_id'} ) {
720
                $matchers[$i]->{'selected'} = 1;
721
            }
722
        }
723
    }
724
    $result->{available_matchers} = \@matchers;
725
726
    return $result;
952
}
727
}
953
728
954
=head3
729
=head3 parse_input_into_order_line_fields
730
731
This function takes inputs from either the cronjob or UI and then parses that into a single set of order line fields that can be used to create items and order lines
732
733
my $order_line_fields = parse_input_into_order_line_fields(
734
    {
735
        agent        => $agent,
736
        biblionumber => $biblionumber,
737
        budget_id    => $budget_id,
738
        basket_id    => $basket_id,
739
        fields       => $item_fields,
740
    }
741
);
955
742
956
Adds a list of available matchers based on an import batch
957
743
958
=cut
744
=cut
959
745
960
sub _add_matcher_list {
746
sub parse_input_into_order_line_fields {
961
    my ( $current_matcher_id, $template ) = @_;
747
    my ($args) = @_;
962
    my @matchers = C4::Matcher::GetMatcherList();
748
963
    if ( defined $current_matcher_id ) {
749
    my $agent        = $args->{agent};
964
        for ( my $i = 0 ; $i <= $#matchers ; $i++ ) {
750
    my $client       = $agent eq 'client' ? 1 : 0;
965
            if ( $matchers[$i]->{'matcher_id'} == $current_matcher_id ) {
751
    my $biblionumber = $args->{biblionumber};
966
                $matchers[$i]->{'selected'} = 1;
752
    my $budget_id    = $args->{budget_id};
753
    my $basket_id    = $args->{basket_id};
754
    my $fields       = $args->{fields};
755
756
    my $quantity        = $fields->{quantity} || 1;
757
    my @homebranches    = $client ? @{ $fields->{homebranches} }    : ( ( $fields->{homebranch} ) x $quantity );
758
    my @holdingbranches = $client ? @{ $fields->{holdingbranches} } : ( ( $fields->{holdingbranch} ) x $quantity );
759
    my @itypes          = $client ? @{ $fields->{itypes} }          : ( ( $fields->{itype} ) x $quantity );
760
    my @nonpublic_notes = $client ? @{ $fields->{nonpublic_notes} } : ( ( $fields->{nonpublic_note} ) x $quantity );
761
    my @public_notes    = $client ? @{ $fields->{public_notes} }    : ( ( $fields->{public_note} ) x $quantity );
762
    my @locs            = $client ? @{ $fields->{locs} }            : ( ( $fields->{loc} ) x $quantity );
763
    my @ccodes          = $client ? @{ $fields->{ccodes} }          : ( ( $fields->{ccode} ) x $quantity );
764
    my @notforloans     = $client ? @{ $fields->{notforloans} }     : ( ( $fields->{notforloan} ) x $quantity );
765
    my @uris            = $client ? @{ $fields->{uris} }            : ( ( $fields->{uri} ) x $quantity );
766
    my @copynos         = $client ? @{ $fields->{copynos} }         : ( ( $fields->{copyno} ) x $quantity );
767
    my @itemprices      = $client ? @{ $fields->{itemprices} }      : ( ( $fields->{price} ) x $quantity );
768
    my @replacementprices =
769
        $client ? @{ $fields->{replacementprices} } : ( ( $fields->{replacementprice} ) x $quantity );
770
    my @itemcallnumbers     = $client ? @{ $fields->{itemcallnumbers} } : ( ( $fields->{itemcallnumber} ) x $quantity );
771
    my $c_quantity          = $client ? $fields->{c_quantity}           : $fields->{c_quantity};
772
    my $c_budget_id         = $client ? $fields->{c_budget_id}          : $fields->{c_budget_id};
773
    my $c_discount          = $client ? $fields->{c_discount}           : $fields->{c_discount};
774
    my $c_sort1             = $client ? $fields->{c_sort1}              : $fields->{c_sort1};
775
    my $c_sort2             = $client ? $fields->{c_sort2}              : $fields->{c_sort2};
776
    my $c_replacement_price = $client ? $fields->{c_replacement_price}  : $fields->{c_replacement_price};
777
    my $c_price             = $client ? $fields->{c_price}              : $fields->{c_price};
778
779
    # If using the cronjob, we want to default to the account budget if not mapped on the record
780
    my $item_budget_id;
781
    if ( !$client && ( $fields->{budget_code} || $fields->{c_budget_code} ) ) {
782
        my $budget_code = $fields->{budget_code} || $fields->{c_budget_code};
783
        my $item_budget = GetBudgetByCode($budget_code);
784
        if ($item_budget) {
785
            $item_budget_id = $item_budget->{budget_id};
786
        } else {
787
            $item_budget_id = $budget_id;
788
        }
789
    } else {
790
        $item_budget_id = $budget_id;
791
    }
792
    my @budget_codes = $client ? @{ $fields->{budget_codes} } : ($item_budget_id);
793
    my $loop_limit   = $client ? scalar(@homebranches)        : $quantity;
794
795
    my $order_line_fields = {
796
        biblionumber        => $biblionumber,
797
        homebranch          => \@homebranches,
798
        holdingbranch       => \@holdingbranches,
799
        itemnotes_nonpublic => \@nonpublic_notes,
800
        itemnotes           => \@public_notes,
801
        location            => \@locs,
802
        ccode               => \@ccodes,
803
        itype               => \@itypes,
804
        notforloan          => \@notforloans,
805
        uri                 => \@uris,
806
        copynumber          => \@copynos,
807
        price               => \@itemprices,
808
        replacementprice    => \@replacementprices,
809
        itemcallnumber      => \@itemcallnumbers,
810
        budget_code         => \@budget_codes,
811
        loop_limit          => $loop_limit,
812
        basket_id           => $basket_id,
813
        budget_id           => $budget_id,
814
        c_quantity          => $c_quantity,
815
        c_budget_id         => $c_budget_id,
816
        c_discount          => $c_discount,
817
        c_sort1             => $c_sort1,
818
        c_sort2             => $c_sort2,
819
        c_replacement_price => $c_replacement_price,
820
        c_price             => $c_price,
821
    };
822
823
    return $order_line_fields;
824
}
825
826
=head3 create_items_and_generate_order_hash
827
828
This method is used from both the cronjob and the UI to create items and generate order line details for those new items
829
830
my $order_line_details = create_items_and_generate_order_hash(
831
    {
832
        fields          => $order_line_fields,
833
        vendor          => $vendor,
834
        agent           => $agent,
835
        active_currency => $active_currency,
836
    }
837
);
838
839
=cut
840
841
sub create_items_and_generate_order_hash {
842
    my ($args) = @_;
843
844
    my $agent           = $args->{agent};
845
    my $fields          = $args->{fields};
846
    my $loop_limit      = $fields->{loop_limit};
847
    my $basket_id       = $fields->{basket_id};
848
    my $budget_id       = $fields->{budget_id};
849
    my $vendor          = $args->{vendor};
850
    my $active_currency = $args->{active_currency};
851
    my @order_line_details;
852
    my $itemcreation = 0;
853
854
    for ( my $i = 0 ; $i < $loop_limit ; $i++ ) {
855
        $itemcreation = 1;
856
        my $item = Koha::Item->new(
857
            {
858
                biblionumber        => $fields->{biblionumber},
859
                homebranch          => @{ $fields->{homebranch} }[$i],
860
                holdingbranch       => @{ $fields->{holdingbranch} }[$i],
861
                itemnotes_nonpublic => @{ $fields->{itemnotes_nonpublic} }[$i],
862
                itemnotes           => @{ $fields->{itemnotes} }[$i],
863
                location            => @{ $fields->{location} }[$i],
864
                ccode               => @{ $fields->{ccode} }[$i],
865
                itype               => @{ $fields->{itype} }[$i],
866
                notforloan          => @{ $fields->{notforloan} }[$i],
867
                uri                 => @{ $fields->{uri} }[$i],
868
                copynumber          => @{ $fields->{copynumber} }[$i],
869
                price               => @{ $fields->{price} }[$i],
870
                replacementprice    => @{ $fields->{replacementprice} }[$i],
871
                itemcallnumber      => @{ $fields->{itemcallnumber} }[$i],
967
            }
872
            }
873
        )->store;
874
875
        my %order_detail_hash = (
876
            biblionumber => $fields->{biblionumber},
877
            itemnumbers  => ( $item->itemnumber ),
878
            basketno     => $basket_id,
879
            quantity     => 1,
880
            budget_id    => @{ $fields->{budget_code} }[$i]
881
                || $budget_id,
882
            currency => $vendor->listprice,
883
        );
884
885
        if ( @{ $fields->{price} }[$i] ) {
886
            $order_detail_hash{tax_rate_on_ordering}  = $vendor->tax_rate;
887
            $order_detail_hash{tax_rate_on_receiving} = $vendor->tax_rate;
888
            my $order_discount = $fields->{c_discount} ? $fields->{c_discount} : $vendor->discount;
889
            $order_detail_hash{discount} = $order_discount;
890
            $order_detail_hash{rrp}      = @{ $fields->{price} }[$i];
891
            $order_detail_hash{ecost} =
892
                $order_discount ? @{ $fields->{price} }[$i] * ( 1 - $order_discount / 100 ) : @{ $fields->{price} }[$i];
893
            $order_detail_hash{listprice} = $order_detail_hash{rrp} / $active_currency->rate;
894
            $order_detail_hash{unitprice} = $order_detail_hash{ecost};
895
        } else {
896
            $order_detail_hash{listprice} = 0;
968
        }
897
        }
898
        $order_detail_hash{replacementprice} = @{ $fields->{replacementprice} }[$i] || 0;
899
        $order_detail_hash{uncertainprice}   = 0 if $order_detail_hash{listprice};
900
901
        push @order_line_details, \%order_detail_hash;
902
969
    }
903
    }
970
    $template->param( available_matchers => \@matchers );
904
    return \@order_line_details;
971
}
905
}
972
906
973
1;
907
1;
(-)a/acqui/addorderiso2709.pl (-17 / +56 lines)
Lines 95-101 if ( $op eq "" ) { Link Here
95
    $template->param( "basketno" => $cgiparams->{'basketno'} );
95
    $template->param( "basketno" => $cgiparams->{'basketno'} );
96
96
97
    #display batches
97
    #display batches
98
    Koha::MarcOrder->import_batches_list($template);
98
    my $batches_list = Koha::MarcOrder->import_batches_list();
99
    $template->param(
100
        batch_list => $batches_list->{list},
101
        num_results => $batches_list->{num_results}
102
    );
99
    #
103
    #
100
    # 2nd step = display the content of the chosen file
104
    # 2nd step = display the content of the chosen file
101
    #
105
    #
Lines 112-118 if ( $op eq "" ) { Link Here
112
        bookseller => $bookseller,
116
        bookseller => $bookseller,
113
        "allmatch" => $allmatch,
117
        "allmatch" => $allmatch,
114
    );
118
    );
115
    Koha::MarcOrder->import_biblios_list( $template, $cgiparams->{'import_batch_id'} );
119
    my $biblios_list = Koha::MarcOrder->import_biblios_list( $cgiparams->{'import_batch_id'} );
120
    my $overlay_action = $biblios_list->{overlay_action};
121
    my $nomatch_action = $biblios_list->{nomatch_action};
122
    my $item_action    = $biblios_list->{item_action};
123
    my $batch          = $biblios_list->{batch};
124
125
    $template->param(
126
        import_biblio_list                 => $biblios_list->{import_biblio_list},
127
        num_results                        => $biblios_list->{num_results},
128
        import_batch_id                    => $biblios_list->{import_batch_id},
129
        "overlay_action_${overlay_action}" => 1,
130
        overlay_action                     => $overlay_action,
131
        "nomatch_action_${nomatch_action}" => 1,
132
        nomatch_action                     => $nomatch_action,
133
        "item_action_${item_action}"       => 1,
134
        item_action                        => $biblios_list->{item_action},
135
        item_error                         => $biblios_list->{item_error},
136
        libraries                          => Koha::Libraries->search,
137
        locationloop                       => $biblios_list->{locationloop},
138
        itemtypes                          => Koha::ItemTypes->search,
139
        ccodeloop                          => $biblios_list->{ccodeloop},
140
        notforloanloop                     => $biblios_list->{notforloanloop},
141
        can_commit                         => $biblios_list->{can_commit},
142
        can_revert                         => $biblios_list->{can_revert},
143
        current_matcher_id                 => $biblios_list->{current_matcher_id},
144
        current_matcher_code               => $biblios_list->{current_matcher_code},
145
        current_matcher_description        => $biblios_list->{current_matcher_description},
146
        available_matchers                 => $biblios_list->{available_matchers},
147
        batch_info                         => 1,
148
        file_name                          => $batch->{'file_name'},
149
        comments                           => $batch->{'comments'},
150
        import_status                      => $batch->{'import_status'},
151
        upload_timestamp                   => $batch->{'upload_timestamp'},
152
        num_records                        => $batch->{'num_records'},
153
        num_items                          => $batch->{'num_items'}
154
    );
155
116
    if ( $basket->effective_create_items eq 'ordering' && !$basket->is_standing ) {
156
    if ( $basket->effective_create_items eq 'ordering' && !$basket->is_standing ) {
117
157
118
        # prepare empty item form
158
        # prepare empty item form
Lines 158-170 if ( $op eq "" ) { Link Here
158
    my $duplinbatch;
198
    my $duplinbatch;
159
    my $imported                  = 0;
199
    my $imported                  = 0;
160
    my @import_record_id_selected = $input->multi_param("import_record_id");
200
    my @import_record_id_selected = $input->multi_param("import_record_id");
161
    my @quantities                = $input->multi_param('quantity');
162
    my @prices                    = $input->multi_param('price');
163
    my @orderreplacementprices    = $input->multi_param('replacementprice');
164
    my @budgets_id                = $input->multi_param('budget_id');
165
    my @discount                  = $input->multi_param('discount');
166
    my @sort1                     = $input->multi_param('sort1');
167
    my @sort2                     = $input->multi_param('sort2');
168
    my $matcher_id                = $input->param('matcher_id');
201
    my $matcher_id                = $input->param('matcher_id');
169
    my $active_currency           = Koha::Acquisition::Currencies->get_active;
202
    my $active_currency           = Koha::Acquisition::Currencies->get_active;
170
203
Lines 182-191 if ( $op eq "" ) { Link Here
182
        my @copynos           = $input->multi_param( 'copyno_' . $import_record->import_record_id );
215
        my @copynos           = $input->multi_param( 'copyno_' . $import_record->import_record_id );
183
        my @budget_codes      = $input->multi_param( 'budget_code_' . $import_record->import_record_id );
216
        my @budget_codes      = $input->multi_param( 'budget_code_' . $import_record->import_record_id );
184
        my @itemprices        = $input->multi_param( 'itemprice_' . $import_record->import_record_id );
217
        my @itemprices        = $input->multi_param( 'itemprice_' . $import_record->import_record_id );
185
        my @replacementprices = $input->multi_param( 'replacementprice_' . $import_record->import_record_id );
218
        my @replacementprices = $input->multi_param( 'itemreplacementprice_' . $import_record->import_record_id );
186
        my @itemcallnumbers   = $input->multi_param( 'itemcallnumber_' . $import_record->import_record_id );
219
        my @itemcallnumbers   = $input->multi_param( 'itemcallnumber_' . $import_record->import_record_id );
187
220
188
        my $client_item_fields = {
221
        my $client_item_fields = {
222
            quantity          => scalar(@homebranches),
189
            homebranches      => \@homebranches,
223
            homebranches      => \@homebranches,
190
            holdingbranches   => \@holdingbranches,
224
            holdingbranches   => \@holdingbranches,
191
            itypes            => \@itypes,
225
            itypes            => \@itypes,
Lines 200-214 if ( $op eq "" ) { Link Here
200
            itemprices        => \@itemprices,
234
            itemprices        => \@itemprices,
201
            replacementprices => \@replacementprices,
235
            replacementprices => \@replacementprices,
202
            itemcallnumbers   => \@itemcallnumbers,
236
            itemcallnumbers   => \@itemcallnumbers,
203
            c_quantity        => shift(@quantities)
237
            c_quantity =>
238
                $input->param( 'quantity_' . $import_record->import_record_id )
204
                || GetMarcQuantity( $marcrecord, C4::Context->preference('marcflavour') )
239
                || GetMarcQuantity( $marcrecord, C4::Context->preference('marcflavour') )
205
                || 1,
240
                || 1,
206
            c_budget_id         => shift(@budgets_id) || $input->param('all_budget_id') || $budget_id,
241
            c_budget_id =>
207
            c_discount          => shift(@discount),
242
                $input->param( 'budget_id_' . $import_record->import_record_id )
208
            c_sort1             => shift(@sort1) || $input->param('all_sort1') || '',
243
                || $input->param('all_budget_id')
209
            c_sort2             => shift(@sort2) || $input->param('all_sort2') || '',
244
                || $budget_id,
210
            c_replacement_price => shift(@orderreplacementprices),
245
            c_discount => $input->param( 'discount_' . $import_record->import_record_id ),
211
            c_price => shift(@prices) || GetMarcPrice( $marcrecord, C4::Context->preference('marcflavour') ),
246
            c_sort1 => $input->param( 'sort1_' . $import_record->import_record_id ) || $input->param('all_sort1') || '',
247
            c_sort2 => $input->param( 'sort2_' . $import_record->import_record_id ) || $input->param('all_sort2') || '',
248
            c_replacement_price => $input->param( 'replacementprice_' . $import_record->import_record_id ),
249
            c_price             => $input->param( 'price_' . $import_record->import_record_id )
250
                || GetMarcPrice( $marcrecord, C4::Context->preference('marcflavour') ),
212
        };
251
        };
213
252
214
        my $args = {
253
        my $args = {
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/addorderiso2709.tt (-2 / +1 lines)
Lines 368-374 Link Here
368
                                                                                </li>
368
                                                                                </li>
369
                                                                                <li>
369
                                                                                <li>
370
                                                                                    <label for="replacementprice_item_[% item.item_id | html %]">replacement price</label>
370
                                                                                    <label for="replacementprice_item_[% item.item_id | html %]">replacement price</label>
371
                                                                                    <input type="text" id="replacementprice_item_[% item.item_id | html %]" class="decimal" name="replacementprice_[% biblio.import_record_id | html %]" value="[% item.replacementprice | $Price on_editing => 1 %]">
371
                                                                                    <input type="text" id="replacementprice_item_[% item.item_id | html %]" class="decimal" name="itemreplacementprice_[% biblio.import_record_id | html %]" value="[% item.replacementprice | $Price on_editing => 1 %]">
372
                                                                                </li>
372
                                                                                </li>
373
                                                                                <li>
373
                                                                                <li>
374
                                                                                    <label for="callnumber_item_[% item.item_id | html %]">callnumber</label>
374
                                                                                    <label for="callnumber_item_[% item.item_id | html %]">callnumber</label>
375
- 

Return to bug 35026