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

(-)a/C4/Items.pm (-6 / +11 lines)
Lines 449-460 Returns item record Link Here
449
449
450
=cut
450
=cut
451
451
452
our %default_values_for_mod_from_marc;
453
454
sub _build_default_values_for_mod_marc {
452
sub _build_default_values_for_mod_marc {
455
    my ($frameworkcode) = @_;
453
    my ($frameworkcode) = @_;
456
    return $default_values_for_mod_from_marc{$frameworkcode}
454
457
      if exists $default_values_for_mod_from_marc{$frameworkcode};
455
    my $cache     = Koha::Cache->get_instance();
456
    my $cache_key = "default_value_for_mod_marc-$frameworkcode";
457
    my $cached    = $cache->get_from_cache($cache_key);
458
    return $cached if $cached;
459
458
    my $default_values = {
460
    my $default_values = {
459
        barcode                  => undef,
461
        barcode                  => undef,
460
        booksellerid             => undef,
462
        booksellerid             => undef,
Lines 486-500 sub _build_default_values_for_mod_marc { Link Here
486
        uri                      => undef,
488
        uri                      => undef,
487
        withdrawn                => 0,
489
        withdrawn                => 0,
488
    };
490
    };
491
    my %default_values_for_mod_from_marc;
489
    while ( my ( $field, $default_value ) = each %$default_values ) {
492
    while ( my ( $field, $default_value ) = each %$default_values ) {
490
        my $kohafield = $field;
493
        my $kohafield = $field;
491
        $kohafield =~ s|^([^\.]+)$|items.$1|;
494
        $kohafield =~ s|^([^\.]+)$|items.$1|;
492
        $default_values_for_mod_from_marc{$frameworkcode}{$field} =
495
        $default_values_for_mod_from_marc{$field} =
493
          $default_value
496
          $default_value
494
          if C4::Koha::IsKohaFieldLinked(
497
          if C4::Koha::IsKohaFieldLinked(
495
            { kohafield => $kohafield, frameworkcode => $frameworkcode } );
498
            { kohafield => $kohafield, frameworkcode => $frameworkcode } );
496
    }
499
    }
497
    return $default_values_for_mod_from_marc{$frameworkcode};
500
501
    $cache->set_in_cache($cache_key, \%default_values_for_mod_from_marc);
502
    return \%default_values_for_mod_from_marc;
498
}
503
}
499
504
500
sub ModItemFromMarc {
505
sub ModItemFromMarc {
(-)a/admin/biblio_framework.pl (+2 lines)
Lines 80-85 if ( $op eq 'add_form' ) { Link Here
80
    }
80
    }
81
    $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
81
    $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
82
    $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
82
    $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
83
    $cache->clear_from_cache("default_value_for_mod_marc-$frameworkcode");
83
    $op = 'list';
84
    $op = 'list';
84
} elsif ( $op eq 'delete_confirm' ) {
85
} elsif ( $op eq 'delete_confirm' ) {
85
    my $framework = Koha::BiblioFrameworks->find($frameworkcode);
86
    my $framework = Koha::BiblioFrameworks->find($frameworkcode);
Lines 109-114 if ( $op eq 'add_form' ) { Link Here
109
    }
110
    }
110
    $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
111
    $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
111
    $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
112
    $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
113
    $cache->clear_from_cache("default_value_for_mod_marc-$frameworkcode");
112
    $op = 'list';
114
    $op = 'list';
113
}
115
}
114
116
(-)a/admin/marc_subfields_structure.pl (+2 lines)
Lines 341-346 elsif ( $op eq 'add_validate' ) { Link Here
341
    $sth_update->finish;
341
    $sth_update->finish;
342
    $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
342
    $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
343
    $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
343
    $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
344
    $cache->clear_from_cache("default_value_for_mod_marc-$frameworkcode");
344
345
345
    print $input->redirect("/cgi-bin/koha/admin/marc_subfields_structure.pl?tagfield=$tagfield&frameworkcode=$frameworkcode");
346
    print $input->redirect("/cgi-bin/koha/admin/marc_subfields_structure.pl?tagfield=$tagfield&frameworkcode=$frameworkcode");
346
    exit;
347
    exit;
Lines 384-389 elsif ( $op eq 'delete_confirmed' ) { Link Here
384
    }
385
    }
385
    $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
386
    $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
386
    $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
387
    $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
388
    $cache->clear_from_cache("default_value_for_mod_marc-$frameworkcode");
387
    print $input->redirect("/cgi-bin/koha/admin/marc_subfields_structure.pl?tagfield=$tagfield&frameworkcode=$frameworkcode");
389
    print $input->redirect("/cgi-bin/koha/admin/marc_subfields_structure.pl?tagfield=$tagfield&frameworkcode=$frameworkcode");
388
    exit;
390
    exit;
389
391
(-)a/admin/marctagstructure.pl (+3 lines)
Lines 164-169 if ($op eq 'add_form') { Link Here
164
        }
164
        }
165
        $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
165
        $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
166
        $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
166
        $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
167
        $cache->clear_from_cache("default_value_for_mod_marc-$frameworkcode");
167
    }
168
    }
168
    print $input->redirect("/cgi-bin/koha/admin/marctagstructure.pl?searchfield=$tagfield&frameworkcode=$frameworkcode");
169
    print $input->redirect("/cgi-bin/koha/admin/marctagstructure.pl?searchfield=$tagfield&frameworkcode=$frameworkcode");
169
    exit;
170
    exit;
Lines 190-195 if ($op eq 'add_form') { Link Here
190
        $sth2->execute($searchfield, $frameworkcode);
191
        $sth2->execute($searchfield, $frameworkcode);
191
        $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
192
        $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
192
        $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
193
        $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
194
        $cache->clear_from_cache("default_value_for_mod_marc-$frameworkcode");
193
	}
195
	}
194
	$template->param(
196
	$template->param(
195
          searchfield => $searchfield,
197
          searchfield => $searchfield,
Lines 355-359 sub duplicate_framework { Link Here
355
	}
357
	}
356
    $cache->clear_from_cache("MarcStructure-0-$newframeworkcode");
358
    $cache->clear_from_cache("MarcStructure-0-$newframeworkcode");
357
    $cache->clear_from_cache("MarcStructure-1-$newframeworkcode");
359
    $cache->clear_from_cache("MarcStructure-1-$newframeworkcode");
360
    $cache->clear_from_cache("default_value_for_mod_marc-$frameworkcode");
358
}
361
}
359
362
(-)a/t/db_dependent/Items.t (-3 / +114 lines)
Lines 26-32 use Koha::Library; Link Here
26
use t::lib::Mocks;
26
use t::lib::Mocks;
27
use t::lib::TestBuilder;
27
use t::lib::TestBuilder;
28
28
29
use Test::More tests => 9;
29
use Test::More tests => 10;
30
30
31
use Test::Warn;
31
use Test::Warn;
32
32
Lines 553-565 subtest 'C4::Biblio::EmbedItemsInMarcBiblio' => sub { Link Here
553
    $schema->storage->txn_rollback;
553
    $schema->storage->txn_rollback;
554
};
554
};
555
555
556
557
subtest 'C4::Items::_build_default_values_for_mod_marc' => sub {
558
    plan tests => 4;
559
560
    $schema->storage->txn_begin();
561
562
    # Clear cache
563
    $C4::Context::context->{marcfromkohafield} = undef;
564
    $C4::Biblio::inverted_field_map = undef;
565
566
    my $builder = t::lib::TestBuilder->new;
567
    my $framework = $builder->build({
568
        source => 'BiblioFramework',
569
    });
570
    # Link biblio.biblionumber and biblioitems.biblioitemnumber to avoid _koha_marc_update_bib_ids to fail with 'no biblio[item]number tag for framework"
571
    $builder->build({
572
        source => 'MarcSubfieldStructure',
573
        value => {
574
            frameworkcode => $framework->{frameworkcode},
575
            kohafield => 'biblio.biblionumber',
576
            tagfield => '999',
577
            tagsubfield => 'c',
578
        }
579
    });
580
    $builder->build({
581
        source => 'MarcSubfieldStructure',
582
        value => {
583
            frameworkcode => $framework->{frameworkcode},
584
            kohafield => 'biblioitems.biblioitemnumber',
585
            tagfield => '999',
586
            tagsubfield => 'd',
587
        }
588
    });
589
    my $mss_itemnumber = $builder->build({
590
        source => 'MarcSubfieldStructure',
591
        value => {
592
            frameworkcode => $framework->{frameworkcode},
593
            kohafield => 'items.itemnumber',
594
            tagfield => '952',
595
            tagsubfield => '9',
596
        }
597
    });
598
599
    my $mss_barcode = $builder->build({
600
        source => 'MarcSubfieldStructure',
601
        value => {
602
            frameworkcode => $framework->{frameworkcode},
603
            kohafield => 'items.barcode',
604
            tagfield => '952',
605
            tagsubfield => 'p',
606
        }
607
    });
608
609
    # Create a record with a barcode
610
    my ($biblionumber) = get_biblio( $framework->{frameworkcode} );
611
    my $item_record = new MARC::Record;
612
    my $a_barcode = 'a barcode';
613
    my $barcode_field = MARC::Field->new(
614
        '952', ' ', ' ',
615
        p => $a_barcode,
616
    );
617
    $item_record->append_fields( $barcode_field );
618
    my (undef, undef, $item_itemnumber) = AddItemFromMarc($item_record, $biblionumber);
619
620
    # Make sure everything has been set up
621
    my $item = GetItem($item_itemnumber);
622
    is( $item->{barcode}, $a_barcode, 'Everything has been set up correctly, the barcode is defined as expected' );
623
624
    # Delete the barcode field and save the record
625
    $item_record->delete_fields( $barcode_field );
626
    ModItemFromMarc($item_record, $biblionumber, $item_itemnumber);
627
    $item = GetItem($item_itemnumber);
628
    is( $item->{barcode}, undef, 'The default value should have been set to the barcode, the field is mapped to a kohafield' );
629
630
    # Re-add the barcode field and save the record
631
    $item_record->append_fields( $barcode_field );
632
    ModItemFromMarc($item_record, $biblionumber, $item_itemnumber);
633
    $item = GetItem($item_itemnumber);
634
    is( $item->{barcode}, $a_barcode, 'Everything has been set up correctly, the barcode is defined as expected' );
635
636
    # Remove the mapping
637
    my $dbh = C4::Context->dbh;
638
    $dbh->do(q|
639
        DELETE FROM marc_subfield_structure
640
        WHERE kohafield = 'items.barcode'
641
        AND frameworkcode = ?
642
    |, undef, $framework->{frameworkcode} );
643
644
    # And make sure the caches are cleared
645
    $C4::Context::context->{marcfromkohafield} = undef;
646
    $C4::Biblio::inverted_field_map = undef;
647
    my $cache     = Koha::Cache->get_instance();
648
    $cache->clear_from_cache("default_value_for_mod_marc-" . $framework->{frameworkcode} );
649
650
    # Update the MARC field with another value
651
    $item_record->delete_fields( $barcode_field );
652
    my $another_barcode = 'another_barcode';
653
    my $another_barcode_field = MARC::Field->new(
654
        '952', ' ', ' ',
655
        p => $another_barcode,
656
    );
657
    $item_record->append_fields( $another_barcode_field );
658
    # The DB value should not have been updated
659
    ModItemFromMarc($item_record, $biblionumber, $item_itemnumber);
660
    $item = GetItem($item_itemnumber);
661
    is ( $item->{barcode}, $a_barcode, 'items.barcode is not mapped anymore, so the DB column has not been updated' );
662
663
    $schema->storage->txn_rollback;
664
};
665
556
# Helper method to set up a Biblio.
666
# Helper method to set up a Biblio.
557
sub get_biblio {
667
sub get_biblio {
668
    my ( $frameworkcode ) = @_;
669
    $frameworkcode //= '';
558
    my $bib = MARC::Record->new();
670
    my $bib = MARC::Record->new();
559
    $bib->append_fields(
671
    $bib->append_fields(
560
        MARC::Field->new('100', ' ', ' ', a => 'Moffat, Steven'),
672
        MARC::Field->new('100', ' ', ' ', a => 'Moffat, Steven'),
561
        MARC::Field->new('245', ' ', ' ', a => 'Silence in the library'),
673
        MARC::Field->new('245', ' ', ' ', a => 'Silence in the library'),
562
    );
674
    );
563
    my ($bibnum, $bibitemnum) = AddBiblio($bib, '');
675
    my ($bibnum, $bibitemnum) = AddBiblio($bib, $frameworkcode);
564
    return ($bibnum, $bibitemnum);
676
    return ($bibnum, $bibitemnum);
565
}
677
}
566
- 

Return to bug 13074