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

(-)a/C4/CourseReserves.pm (-71 / +12 lines)
Lines 459-469 sub ModCourseItem { Link Here
459
    my (%params) = @_;
459
    my (%params) = @_;
460
    warn identify_myself(%params) if $DEBUG;
460
    warn identify_myself(%params) if $DEBUG;
461
461
462
    my $itemnumber    = $params{'itemnumber'};
462
    my $itemnumber = $params{'itemnumber'};
463
    my $itype         = $params{'itype'};
464
    my $ccode         = $params{'ccode'};
465
    my $holdingbranch = $params{'holdingbranch'};
466
    my $location      = $params{'location'};
467
463
468
    return unless ($itemnumber);
464
    return unless ($itemnumber);
469
465
Lines 503-512 sub _AddCourseItem { Link Here
503
    push( @values, $params{'itemnumber'} );
499
    push( @values, $params{'itemnumber'} );
504
500
505
    foreach (@FIELDS) {
501
    foreach (@FIELDS) {
506
        if ( $params{$_} ) {
502
        push( @fields, "$_ = ?" );
507
            push( @fields, "$_ = ?" );
503
        push( @values, $params{$_} || undef );
508
            push( @values, $params{$_} );
509
        }
510
    }
504
    }
511
505
512
    my $query = "INSERT INTO course_items SET " . join( ',', @fields );
506
    my $query = "INSERT INTO course_items SET " . join( ',', @fields );
Lines 530-539 sub _UpdateCourseItem { Link Here
530
524
531
    my $ci_id         = $params{'ci_id'};
525
    my $ci_id         = $params{'ci_id'};
532
    my $course_item   = $params{'course_item'};
526
    my $course_item   = $params{'course_item'};
533
    my $itype         = $params{'itype'};
534
    my $ccode         = $params{'ccode'};
535
    my $holdingbranch = $params{'holdingbranch'};
536
    my $location      = $params{'location'};
537
527
538
    return unless ( $ci_id || $course_item );
528
    return unless ( $ci_id || $course_item );
539
529
Lines 541-589 sub _UpdateCourseItem { Link Here
541
      unless ($course_item);
531
      unless ($course_item);
542
    $ci_id = $course_item->{'ci_id'} unless ($ci_id);
532
    $ci_id = $course_item->{'ci_id'} unless ($ci_id);
543
533
544
    ## Revert fields that had an 'original' value, but now don't
545
    ## Update the item fields to the stored values from course_items
546
    ## and then set those fields in course_items to NULL
547
    my @fields_to_revert;
548
    foreach (@FIELDS) {
549
        if ( !$params{$_} && $course_item->{$_} ) {
550
            push( @fields_to_revert, $_ );
551
        }
552
    }
553
    _RevertFields(
554
        ci_id       => $ci_id,
555
        fields      => \@fields_to_revert,
556
        course_item => $course_item
557
    ) if (@fields_to_revert);
558
559
    ## Update fields that still have an original value, but it has changed
560
    ## This necessitates only changing the current item values, as we still
561
    ## have the original values stored in course_items
562
    my %mod_params;
563
    foreach (@FIELDS) {
564
        if (   $params{$_}
565
            && $course_item->{$_}
566
            && $params{$_} ne $course_item->{$_} ) {
567
            $mod_params{$_} = $params{$_};
568
        }
569
    }
570
    ModItem( \%mod_params, undef, $course_item->{'itemnumber'} ) if %mod_params;
571
534
572
    ## Update fields that didn't have an original value, but now do
535
    my %mod_params;
573
    ## We must save the original value in course_items, and also
574
    ## update the item fields to the new value
575
    my $item = GetItem( $course_item->{'itemnumber'} );
576
    my %mod_params_new;
577
    my %mod_params_old;
578
    foreach (@FIELDS) {
536
    foreach (@FIELDS) {
579
        if ( $params{$_} && !$course_item->{$_} ) {
537
        $mod_params{$_} = $params{$_};
580
            $mod_params_new{$_} = $params{$_};
581
            $mod_params_old{$_} = $item->{$_};
582
        }
583
    }
538
    }
584
    _ModStoredFields( 'ci_id' => $params{'ci_id'}, %mod_params_old );
585
    ModItem( \%mod_params_new, undef, $course_item->{'itemnumber'} ) if %mod_params_new;
586
539
540
    ModItem( \%mod_params, undef, $course_item->{'itemnumber'} );
587
}
541
}
588
542
589
=head2 _ModStoredFields
543
=head2 _ModStoredFields
Lines 627-657 sub _RevertFields { Link Here
627
    my (%params) = @_;
581
    my (%params) = @_;
628
    warn identify_myself(%params) if $DEBUG;
582
    warn identify_myself(%params) if $DEBUG;
629
583
630
    my $ci_id       = $params{'ci_id'};
584
    my $ci_id = $params{'ci_id'};
631
    my $course_item = $params{'course_item'};
632
    my $fields      = $params{'fields'};
633
    my @fields      = @$fields;
634
585
635
    return unless ($ci_id);
586
    return unless ($ci_id);
636
587
637
    $course_item = GetCourseItem( ci_id => $params{'ci_id'} )
588
    my $course_item = GetCourseItem( ci_id => $params{'ci_id'} );
638
      unless ($course_item);
639
589
640
    my $mod_item_params;
590
    my $mod_item_params;
641
    my @fields_to_null;
591
    foreach my $field ( @FIELDS ) {
642
    foreach my $field (@fields) {
592
        $mod_item_params->{$field} = $course_item->{$field};
643
        foreach (@FIELDS) {
644
            if ( $field eq $_ && $course_item->{$_} ) {
645
                $mod_item_params->{$_} = $course_item->{$_};
646
                push( @fields_to_null, $_ );
647
            }
648
        }
649
    }
593
    }
650
    ModItem( $mod_item_params, undef, $course_item->{'itemnumber'} ) if $mod_item_params && %$mod_item_params;
651
594
652
    my $query = "UPDATE course_items SET " . join( ',', map { "$_=NULL" } @fields_to_null ) . " WHERE ci_id = ?";
595
    ModItem( $mod_item_params, undef, $course_item->{'itemnumber'} ) if $mod_item_params && %$mod_item_params;
653
654
    C4::Context->dbh->do( $query, undef, $ci_id ) if (@fields_to_null);
655
}
596
}
656
597
657
=head2 _SwapAllFields
598
=head2 _SwapAllFields
Lines 736-742 sub DelCourseItem { Link Here
736
677
737
    return unless ($ci_id);
678
    return unless ($ci_id);
738
679
739
    _RevertFields( ci_id => $ci_id, fields => \@FIELDS );
680
    _RevertFields( ci_id => $ci_id );
740
681
741
    my $query = "
682
    my $query = "
742
        DELETE FROM course_items
683
        DELETE FROM course_items
(-)a/t/db_dependent/CourseReserves/CourseItems.t (-6 / +73 lines)
Lines 23-29 use C4::CourseReserves qw/ModCourseItem ModCourseReserve DelCourseReserve GetCou Link Here
23
use C4::Context;
23
use C4::Context;
24
use Koha::Items;
24
use Koha::Items;
25
25
26
use Test::More tests => 17;
26
use Test::More tests => 27;
27
27
28
BEGIN {
28
BEGIN {
29
    require_ok('C4::CourseReserves');
29
    require_ok('C4::CourseReserves');
Lines 37-46 my $builder = t::lib::TestBuilder->new(); Link Here
37
create_dependent_objets();
37
create_dependent_objets();
38
my ($biblionumber, $itemnumber) = create_bib_and_item();
38
my ($biblionumber, $itemnumber) = create_bib_and_item();
39
39
40
my $course = $builder->build({
41
    source => 'CourseReserve',
42
});
43
44
my $ci_id = ModCourseItem(
40
my $ci_id = ModCourseItem(
45
    itemnumber    => $itemnumber,
41
    itemnumber    => $itemnumber,
46
    itype         => 'BK_foo',
42
    itype         => 'BK_foo',
Lines 49-54 my $ci_id = ModCourseItem( Link Here
49
    location      => 'TH',
45
    location      => 'TH',
50
);
46
);
51
47
48
my $course = $builder->build({
49
    source => 'CourseReserve',
50
    value => {
51
        ci_id => $ci_id,
52
    }
53
});
54
52
my $cr_id = ModCourseReserve(
55
my $cr_id = ModCourseReserve(
53
    course_id   => $course->{course_id},
56
    course_id   => $course->{course_id},
54
    ci_id       => $ci_id,
57
    ci_id       => $ci_id,
Lines 68-73 is($item->ccode, 'BOOK', 'Item ccode in course should be BOOK'); Link Here
68
is($item->holdingbranch, 'B2', 'Item holding branch in course should be B2');
71
is($item->holdingbranch, 'B2', 'Item holding branch in course should be B2');
69
is($item->location, 'TH', 'Item location in course should be TH');
72
is($item->location, 'TH', 'Item location in course should be TH');
70
73
74
ModCourseItem(
75
    itemnumber    => $itemnumber,
76
    itype         => 'BK_foo',
77
    ccode         => 'DVD',
78
    holdingbranch => 'B3',
79
    location      => 'TH',
80
);
81
82
ModCourseReserve(
83
    course_id   => $course->{course_id},
84
    ci_id       => $ci_id,
85
    staff_note  => '',
86
    public_note => '',
87
);
88
89
$course_item = GetCourseItem( ci_id => $ci_id );
90
is($course_item->{itype}, 'CD_foo', 'Course item itype should be CD_foo');
91
is($course_item->{ccode}, 'CD', 'Course item ccode should be CD');
92
is($course_item->{holdingbranch}, 'B1', 'Course item holding branch should be B1');
93
is($course_item->{location}, 'HR', 'Course item location should be HR');
94
95
$item = Koha::Items->find($itemnumber);
96
is($item->itype, 'BK_foo', 'Item type in course should be BK_foo');
97
is($item->ccode, 'DVD', 'Item ccode in course should be DVD');
98
is($item->holdingbranch, 'B3', 'Item holding branch in course should be B3');
99
is($item->location, 'TH', 'Item location in course should be TH');
100
71
DelCourseReserve( cr_id => $cr_id );
101
DelCourseReserve( cr_id => $cr_id );
72
$item = Koha::Items->find($itemnumber);
102
$item = Koha::Items->find($itemnumber);
73
is($item->itype, 'CD_foo', 'Item type removed from course should be set back to CD_foo');
103
is($item->itype, 'CD_foo', 'Item type removed from course should be set back to CD_foo');
Lines 102-107 is($item->ccode, 'BOOK', 'Item ccode should be BOOK'); Link Here
102
my $course_item2 = GetCourseItem( ci_id => $ci_id2 );
132
my $course_item2 = GetCourseItem( ci_id => $ci_id2 );
103
is($course_item2->{ccode}, '', 'Course item ccode should be empty');
133
is($course_item2->{ccode}, '', 'Course item ccode should be empty');
104
134
135
ModCourseItem(
136
    itemnumber    => $itemnumber,
137
    itype         => 'CD_foo',
138
    ccode         => 'DVD',
139
    holdingbranch => 'B1',
140
    location      => 'HR',
141
);
142
143
ModCourseReserve(
144
    course_id   => $course->{course_id},
145
    ci_id       => $ci_id2,
146
    staff_note  => '',
147
    public_note => '',
148
);
149
150
$item = Koha::Items->find($itemnumber);
151
is($item->ccode, 'DVD', 'Item ccode should be BOOK');
152
153
$course_item2 = GetCourseItem( ci_id => $ci_id2 );
154
is($course_item2->{ccode}, '', 'Course item ccode should be empty');
155
105
DelCourseReserve( cr_id => $cr_id2 );
156
DelCourseReserve( cr_id => $cr_id2 );
106
$item = Koha::Items->find($itemnumber);
157
$item = Koha::Items->find($itemnumber);
107
is($item->ccode, '', 'Item ccode should be set back to empty');
158
is($item->ccode, '', 'Item ccode should be set back to empty');
Lines 142-147 sub create_dependent_objets { Link Here
142
    });
193
    });
143
194
144
    $builder->build({
195
    $builder->build({
196
        source => 'Branch',
197
        value  => {
198
            branchcode => 'B3',
199
            branchname => 'Branch 3'
200
        }
201
    });
202
203
    $builder->build({
145
        source => 'AuthorisedValue',
204
        source => 'AuthorisedValue',
146
        value  => {
205
        value  => {
147
            category => 'CCODE',
206
            category => 'CCODE',
Lines 154-159 sub create_dependent_objets { Link Here
154
        source => 'AuthorisedValue',
213
        source => 'AuthorisedValue',
155
        value  => {
214
        value  => {
156
            category => 'CCODE',
215
            category => 'CCODE',
216
            authorised_value => 'DVD',
217
            lib => 'Book'
218
        }
219
    });
220
221
    $builder->build({
222
        source => 'AuthorisedValue',
223
        value  => {
224
            category => 'CCODE',
157
            authorised_value => 'CD',
225
            authorised_value => 'CD',
158
            lib => 'Compact Disk'
226
            lib => 'Compact Disk'
159
        }
227
        }
160
- 

Return to bug 10382