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

(-)a/C4/MarcModificationTemplates.pm (-5 / +26 lines)
Lines 585-593 sub ModifyRecordWithTemplate { Link Here
585
                    }
585
                    }
586
                ];
586
                ];
587
                $field_numbers = [Koha::MoreUtils::singleton ( @$field_numbers, @$all_fields ) ];
587
                $field_numbers = [Koha::MoreUtils::singleton ( @$field_numbers, @$all_fields ) ];
588
                $do = $conditional eq 'if'
588
                if ( $from_field == $conditional_field ){
589
                    ? @$field_numbers
589
                    $do = $conditional eq 'if'
590
                    : not @$field_numbers;
590
                        ? @$field_numbers
591
                        : not @$field_numbers;
592
                } else {
593
                    $do = $conditional eq 'if'
594
                        ? not @$field_numbers
595
                        : @$field_numbers;
596
                }
591
            }
597
            }
592
        }
598
        }
593
599
Lines 599-606 sub ModifyRecordWithTemplate { Link Here
599
            # A condition has been given
605
            # A condition has been given
600
            if ( @$field_numbers > 0 ) {
606
            if ( @$field_numbers > 0 ) {
601
                if ( $field_number == 1 ) {
607
                if ( $field_number == 1 ) {
602
                    # We want only the first matching
608
                    # We want only the first
603
                    $field_numbers = [ $field_numbers->[0] ];
609
                    if ( $from_field == $conditional_field ){
610
                        # want first field matching condition
611
                        $field_numbers = [ $field_numbers->[0] ];
612
                    } else {
613
                        # condition doesn't match, so just want first occurrence of from field
614
                        $field_numbers = [ 1 ];
615
                    }
616
                } else {
617
                    unless ( $from_field == $conditional_field ){
618
                        # condition doesn't match from fields so need all occurrences of from fields for action
619
                        $field_numbers = field_exists({
620
                            record => $record,
621
                            field => $from_field,
622
                            subfield => $from_subfield,
623
                        });
624
                    }
604
                }
625
                }
605
            }
626
            }
606
            # There was no condition
627
            # There was no condition
(-)a/t/db_dependent/MarcModificationTemplates.t (-2 / +121 lines)
Lines 1-6 Link Here
1
use Modern::Perl;
1
use Modern::Perl;
2
2
3
use Test::More tests => 125;
3
use Test::More tests => 126;
4
4
5
use Koha::Database;
5
use Koha::Database;
6
use Koha::SimpleMARC;
6
use Koha::SimpleMARC;
Lines 415-420 subtest "not_equals" => sub { Link Here
415
    is_deeply( $record, $expected_record, 'None 650 have been moved, no $650$b exists' );
415
    is_deeply( $record, $expected_record, 'None 650 have been moved, no $650$b exists' );
416
};
416
};
417
417
418
subtest "when conditional field doesn't match the from field" => sub {
419
    plan tests => 3;
420
    $dbh->do(q|DELETE FROM marc_modification_templates|);
421
    my $template_id = AddModificationTemplate("template_name");
422
    AddModificationTemplateAction(
423
        $template_id, 'delete_field', 0,
424
        '650', '9', '', '', '',
425
        '', '', '',
426
        'if', '245', 'a', 'equals', 'Bad title', '',
427
        'Delete fields 650$9 if 245$a == "Bad title"'
428
    );
429
    my $record = new_record();
430
    ModifyRecordWithTemplate( $template_id, $record );
431
    my $expected_record = expected_record_3();
432
    is_deeply( $record, $expected_record, '650$9 fields have been deleted when 245$a == "Bad title"' );
433
434
    $dbh->do(q|DELETE FROM marc_modification_templates|);
435
    $template_id = AddModificationTemplate("template_name");
436
    AddModificationTemplateAction(
437
        $template_id, 'delete_field', 0,
438
        '650', '9', '', '', '',
439
        '', '', '',
440
        'if', '245', 'a', 'exists', '', '',
441
        'Delete fields 650$9 if 245$a exists'
442
    );
443
    $record = new_record();
444
    ModifyRecordWithTemplate( $template_id, $record );
445
    $expected_record = expected_record_3();
446
    is_deeply( $record, $expected_record, '650$9 fields have been deleted because 245$a exists' );
447
448
    $dbh->do(q|DELETE FROM marc_modification_templates|);
449
    $template_id = AddModificationTemplate("template_name");
450
    AddModificationTemplateAction(
451
        $template_id, 'delete_field', 1,
452
        '650', '', '', '', '',
453
        '', '', '',
454
        'if', '245', 'a', 'exists', '', '',
455
        'Delete 1st field 650 if 245$a exists'
456
    );
457
    $record = new_record();
458
    ModifyRecordWithTemplate( $template_id, $record );
459
    $expected_record = expected_record_4();
460
    is_deeply( $record, $expected_record, '1st 650 field has been deleted because 245$a exists' );
461
};
462
418
sub new_record {
463
sub new_record {
419
    my $record = MARC::Record->new;
464
    my $record = MARC::Record->new;
420
    $record->leader('03174nam a2200445 a 4500');
465
    $record->leader('03174nam a2200445 a 4500');
Lines 547-552 sub expected_record_2 { Link Here
547
    return $record;
592
    return $record;
548
}
593
}
549
594
595
sub expected_record_3 {
596
    my $record = MARC::Record->new;
597
    $record->leader('03174nam a2200445 a 4500');
598
    my @fields = (
599
        MARC::Field->new(
600
            100, '1', ' ',
601
            a => 'Knuth, Donald Ervin',
602
            d => '1938',
603
        ),
604
        MARC::Field->new(
605
            245, '1', '4',
606
            a => 'The art of computer programming',
607
            c => 'Donald E. Knuth.',
608
        ),
609
        MARC::Field->new(
610
            245, '1', '4',
611
            a => 'Bad title',
612
            c => 'Donald E. Knuth.',
613
        ),
614
        MARC::Field->new(
615
            650, ' ', '0',
616
            a => 'Computer programming.',
617
        ),
618
        MARC::Field->new(
619
            650, ' ', '0',
620
            a => 'Computer programming.',
621
        ),
622
        MARC::Field->new(
623
            952, ' ', ' ',
624
            p => '3010023917',
625
            y => 'BK',
626
            c => 'GEN',
627
            d => '2001-06-25',
628
        ),
629
    );
630
    $record->append_fields(@fields);
631
    return $record;
632
}
633
634
sub expected_record_4 {
635
    my $record = MARC::Record->new;
636
    $record->leader('03174nam a2200445 a 4500');
637
    my @fields = (
638
        MARC::Field->new(
639
            100, '1', ' ',
640
            a => 'Knuth, Donald Ervin',
641
            d => '1938',
642
        ),
643
        MARC::Field->new(
644
            245, '1', '4',
645
            a => 'The art of computer programming',
646
            c => 'Donald E. Knuth.',
647
        ),
648
        MARC::Field->new(
649
            245, '1', '4',
650
            a => 'Bad title',
651
            c => 'Donald E. Knuth.',
652
        ),
653
        MARC::Field->new(
654
            650, ' ', '0',
655
            a => 'Computer programming.',
656
            9 => '499',
657
        ),
658
        MARC::Field->new(
659
            952, ' ', ' ',
660
            p => '3010023917',
661
            y => 'BK',
662
            c => 'GEN',
663
            d => '2001-06-25',
664
        ),
665
    );
666
    $record->append_fields(@fields);
667
    return $record;
668
}
669
550
# Tests related to use of subfield 0 ($0)
670
# Tests related to use of subfield 0 ($0)
551
671
552
sub new_record_0 {
672
sub new_record_0 {
553
- 

Return to bug 24900