4 use Test::More tests => 16;
8 use DateTime::Duration;
14 use t::lib::TestBuilder;
16 my $dbh = C4::Context->dbh;
17 $dbh->{AutoCommit} = 0;
18 $dbh->{RaiseError} = 1;
20 # this test assumes a CPL branch
21 my $builder = t::lib::TestBuilder->new;
22 if( !$builder->schema->resultset('Branch')->find('CPL') ) {
23 $builder->build( { source => 'Branch', value => { branchcode => 'CPL' }});
27 DELETE FROM marc_subfield_structure
28 WHERE kohafield = 'items.new_status' OR kohafield = 'items.stocknumber'
31 my $new_tagfield = 'i';
33 INSERT INTO marc_subfield_structure(tagfield, tagsubfield, kohafield, frameworkcode)
34 VALUES ( 952, '$new_tagfield', 'items.new_status', '' )
37 my $record = MARC::Record->new();
38 $record->append_fields(
39 MARC::Field->new('100', ' ', ' ', a => 'Moffat, Steven'),
40 MARC::Field->new('245', ' ', ' ', a => 'Silence in the library'),
41 MARC::Field->new('942', ' ', ' ', c => 'ITEMTYPE_T'),
43 my ($biblionumber, undef) = C4::Biblio::AddBiblio($record, '');
45 my ($item_bibnum, $item_bibitemnum, $itemnumber) = C4::Items::AddItem(
48 holdingbranch => 'CPL',
49 new_status => 'new_value',
55 my $item = C4::Items::GetItem( $itemnumber );
56 is ( $item->{new_status}, 'new_value', q|AddItem insert the 'new_status' field| );
58 my ( $tagfield, undef ) = GetMarcFromKohaField('items.itemnumber', '');
59 my $marc_item = C4::Items::GetMarcItem( $biblionumber, $itemnumber );
60 is( $marc_item->subfield($tagfield, $new_tagfield), 'new_value', q|Koha mapping is correct|);
62 # Update the items.new_status field if items.ccode eq 'FIC' => should be updated
67 field => 'items.ccode',
73 field => 'items.new_status',
74 value => 'updated_value',
81 C4::Items::ToggleNewStatus( { rules => \@rules } );
83 my $modified_item = C4::Items::GetItem( $itemnumber );
84 is( $modified_item->{new_status}, 'updated_value', q|ToggleNewStatus: The new_status value is updated|);
85 $marc_item = C4::Items::GetMarcItem( $biblionumber, $itemnumber );
86 is( $marc_item->subfield($tagfield, $new_tagfield), 'updated_value', q|ToggleNewStatus: The new_status value is updated| );
88 # Update the items.new_status field if items.ccode eq 'DONT_EXIST' => should not be updated
93 field => 'items.ccode',
94 value => 'DONT_EXIST',
99 field => 'items.new_status',
100 value => 'new_updated_value',
107 C4::Items::ToggleNewStatus( { rules => \@rules } );
109 $modified_item = C4::Items::GetItem( $itemnumber );
110 is( $modified_item->{new_status}, 'updated_value', q|ToggleNewStatus: The new_status value is not updated|);
111 $marc_item = C4::Items::GetMarcItem( $biblionumber, $itemnumber );
112 is( $marc_item->subfield($tagfield, $new_tagfield), 'updated_value', q|ToggleNewStatus: The new_status value is not updated| );
115 $item = C4::Items::GetItem( $itemnumber );
116 my $dt_today = dt_from_string;
117 my $days5ago = $dt_today->add_duration( DateTime::Duration->new( days => -5 ) );
119 C4::Items::ModItem( { dateaccessioned => $days5ago }, $biblionumber, $itemnumber );
120 $item = C4::Items::GetItem( $itemnumber );
126 field => 'items.ccode',
132 field => 'items.new_status',
133 value => 'new_updated_value',
139 C4::Items::ToggleNewStatus( { rules => \@rules } );
140 $modified_item = C4::Items::GetItem( $itemnumber );
141 is( $modified_item->{new_status}, 'updated_value', q|ToggleNewStatus: Age = 10 : The new_status value is not updated|);
143 $rules[0]->{age} = 5;
144 $rules[0]->{substitutions}[0]{value} = 'new_updated_value5';
145 C4::Items::ToggleNewStatus( { rules => \@rules } );
146 $modified_item = C4::Items::GetItem( $itemnumber );
147 is( $modified_item->{new_status}, 'new_updated_value5', q|ToggleNewStatus: Age = 5 : The new_status value is updated|);
149 $rules[0]->{age} = '';
150 $rules[0]->{substitutions}[0]{value} = 'new_updated_value_empty_string';
151 C4::Items::ToggleNewStatus( { rules => \@rules } );
152 $modified_item = C4::Items::GetItem( $itemnumber );
153 is( $modified_item->{new_status}, 'new_updated_value_empty_string', q|ToggleNewStatus: Age = '' : The new_status value is updated|);
155 $rules[0]->{age} = undef;
156 $rules[0]->{substitutions}[0]{value} = 'new_updated_value_undef';
157 C4::Items::ToggleNewStatus( { rules => \@rules } );
158 $modified_item = C4::Items::GetItem( $itemnumber );
159 is( $modified_item->{new_status}, 'new_updated_value_undef', q|ToggleNewStatus: Age = undef : The new_status value is updated|);
166 field => 'items.ccode',
172 field => 'items.new_status',
180 C4::Items::ToggleNewStatus( { rules => \@rules } );
182 $modified_item = C4::Items::GetItem( $itemnumber );
183 is( $modified_item->{new_status}, '', q|ToggleNewStatus: The new_status value is empty|);
184 $marc_item = C4::Items::GetMarcItem( $biblionumber, $itemnumber );
185 is( $marc_item->subfield($tagfield, $new_tagfield), undef, q|ToggleNewStatus: The new_status field is removed from the item marc| );
187 # conditions multiple
192 field => 'items.ccode',
196 field => 'items.homebranch',
202 field => 'items.new_status',
203 value => 'new_value',
210 C4::Items::ToggleNewStatus( { rules => \@rules } );
212 $modified_item = C4::Items::GetItem( $itemnumber );
213 is( $modified_item->{new_status}, 'new_value', q|ToggleNewStatus: conditions multiple: all match, the new_status value is updated|);
219 field => 'items.ccode',
223 field => 'items.homebranch',
224 value => 'DONT_EXIST',
229 field => 'items.new_status',
230 value => 'new_updated_value',
237 C4::Items::ToggleNewStatus( { rules => \@rules } );
239 $modified_item = C4::Items::GetItem( $itemnumber );
240 is( $modified_item->{new_status}, 'new_value', q|ToggleNewStatus: conditions multiple: at least 1 condition does not match, the new_status value is not updated|);
246 field => 'items.ccode',
250 field => 'items.homebranch',
256 field => 'items.new_status',
257 value => 'new_updated_value',
264 C4::Items::ToggleNewStatus( { rules => \@rules } );
266 $modified_item = C4::Items::GetItem( $itemnumber );
267 is( $modified_item->{new_status}, 'new_updated_value', q|ToggleNewStatus: conditions multiple: the 2 conditions match, the new_status value is updated|);
273 field => 'biblioitems.itemtype',
274 value => 'ITEMTYPE_T',
279 field => 'items.new_status',
280 value => 'another_new_updated_value',
287 C4::Items::ToggleNewStatus( { rules => \@rules } );
289 $modified_item = C4::Items::GetItem( $itemnumber );
290 is( $modified_item->{new_status}, 'another_new_updated_value', q|ToggleNewStatus: conditions on biblioitems|);