Bugzilla – Attachment 95913 Details for
Bug 23463
Move C4::Items CRUD subroutines to Koha::Item
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 23463: Remove DelItem
Bug-23463-Remove-DelItem.patch (text/plain), 7.46 KB, created by
Jonathan Druart
on 2019-12-02 12:05:04 UTC
(
hide
)
Description:
Bug 23463: Remove DelItem
Filename:
MIME Type:
Creator:
Jonathan Druart
Created:
2019-12-02 12:05:04 UTC
Size:
7.46 KB
patch
obsolete
>From 21b6ce630e883a849ce79c7782c2277255ffca2e Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@bugs.koha-community.org> >Date: Tue, 6 Aug 2019 11:29:27 -0500 >Subject: [PATCH] Bug 23463: Remove DelItem > >--- > C4/Items.pm | 81 ++---------------------------------------- > Koha/Item.pm | 37 +++++++++++++++++++ > t/db_dependent/Items.t | 2 +- > t/db_dependent/Items/DelItem.t | 29 ++++----------- > 4 files changed, 48 insertions(+), 101 deletions(-) > >diff --git a/C4/Items.pm b/C4/Items.pm >index 99f06f6cd2..4a455fc140 100644 >--- a/C4/Items.pm >+++ b/C4/Items.pm >@@ -33,7 +33,6 @@ BEGIN { > Item2Marc > ModDateLastSeen > ModItemTransfer >- DelItem > CheckItemPreSave > GetItemsForInventory > GetItemsInfo >@@ -427,40 +426,6 @@ sub ModDateLastSeen { > $item->store({ log_action => 0 }); > } > >-=head2 DelItem >- >- DelItem({ itemnumber => $itemnumber, [ biblionumber => $biblionumber ] } ); >- >-Exported function (core API) for deleting an item record in Koha. >- >-=cut >- >-sub DelItem { >- my ( $params ) = @_; >- >- my $itemnumber = $params->{itemnumber}; >- my $biblionumber = $params->{biblionumber}; >- >- unless ($biblionumber) { >- my $item = Koha::Items->find( $itemnumber ); >- $biblionumber = $item ? $item->biblio->biblionumber : undef; >- } >- >- # If there is no biblionumber for the given itemnumber, there is nothing to delete >- return 0 unless $biblionumber; >- >- # FIXME check the item has no current issues >- my $deleted = _koha_delete_item( $itemnumber ); >- >- ModZebra( $biblionumber, "specialUpdate", "biblioserver" ); >- >- _after_item_action_hooks({ action => 'delete', item_id => $itemnumber }); >- >- #search item field code >- logaction("CATALOGUING", "DELETE", $itemnumber, "item") if C4::Context->preference("CataloguingLog"); >- return $deleted; >-} >- > =head2 CheckItemPreSave > > my $item_ref = TransformMarcToKoha($marc, 'items'); >@@ -1481,12 +1446,9 @@ sub DelItemCheck { > my $status = ItemSafeToDelete( $biblionumber, $itemnumber ); > > if ( $status == 1 ) { >- DelItem( >- { >- biblionumber => $biblionumber, >- itemnumber => $itemnumber >- } >- ); >+ my $item = Koha::Items->find($itemnumber); >+ $item->move_to_deleted; >+ $item->delete; > } > return $status; > } >@@ -1519,43 +1481,6 @@ sub _mod_item_dates { # date formatting for date fields in item hash > } > } > >-=head2 _koha_delete_item >- >- _koha_delete_item( $itemnum ); >- >-Internal function to delete an item record from the koha tables >- >-=cut >- >-sub _koha_delete_item { >- my ( $itemnum ) = @_; >- >- my $dbh = C4::Context->dbh; >- # save the deleted item to deleteditems table >- my $sth = $dbh->prepare("SELECT * FROM items WHERE itemnumber=?"); >- $sth->execute($itemnum); >- my $data = $sth->fetchrow_hashref(); >- >- # There is no item to delete >- return 0 unless $data; >- >- my $query = "INSERT INTO deleteditems SET "; >- my @bind = (); >- foreach my $key ( keys %$data ) { >- next if ( $key eq 'timestamp' ); # timestamp will be set by db >- $query .= "$key = ?,"; >- push( @bind, $data->{$key} ); >- } >- $query =~ s/\,$//; >- $sth = $dbh->prepare($query); >- $sth->execute(@bind); >- >- # delete from items table >- $sth = $dbh->prepare("DELETE FROM items WHERE itemnumber=?"); >- my $deleted = $sth->execute($itemnum); >- return ( $deleted == 1 ) ? 1 : 0; >-} >- > =head2 _marc_from_item_hash > > my $item_marc = _marc_from_item_hash($item, $frameworkcode[, $unlinked_item_subfields]); >diff --git a/Koha/Item.pm b/Koha/Item.pm >index 56104e111d..aed9945829 100644 >--- a/Koha/Item.pm >+++ b/Koha/Item.pm >@@ -154,6 +154,43 @@ sub store { > return $self->SUPER::store; > } > >+=head3 delete >+ >+=cut >+ >+sub delete { >+ my ( $self ) = @_; >+ >+ # FIXME check the item has no current issues >+ # i.e. raise the appropriate exception >+ >+ C4::Biblio::ModZebra( $self->biblionumber, "specialUpdate", "biblioserver" ); >+ >+ $self->_after_item_action_hooks({ action => 'delete' }); >+ >+ logaction( "CATALOGUING", "DELETE", $self->itemnumber, "item" ) >+ if C4::Context->preference("CataloguingLog"); >+ >+ return $self->SUPER::delete; >+} >+ >+=head3 move_to_deleted >+ >+my $is_moved = $item->move_to_deleted; >+ >+Move an item to the deleteditems table. >+This can be done before deleting an item, to make sure the data are not completely deleted. >+ >+=cut >+ >+sub move_to_deleted { >+ my ($self) = @_; >+ my $item_infos = $self->unblessed; >+ delete $item_infos->{timestamp}; #This ensures the timestamp date in deleteditems will be set to the current timestamp >+ return Koha::Database->new->schema->resultset('Deleteditem')->create($item_infos); >+} >+ >+ > =head3 effective_itemtype > > Returns the itemtype for the item based on whether item level itemtypes are set or not. >diff --git a/t/db_dependent/Items.t b/t/db_dependent/Items.t >index b22d90c605..2b088a2459 100755 >--- a/t/db_dependent/Items.t >+++ b/t/db_dependent/Items.t >@@ -91,7 +91,7 @@ subtest 'General Add, Get and Del tests' => sub { > cmp_ok($moditem->barcode, '==', '987654321', 'Modified item barcode successfully to: '.$moditem->barcode . '.'); > > # Delete item. >- DelItem({ biblionumber => $biblio->biblionumber, itemnumber => $itemnumber }); >+ $moditem->delete; > my $getdeleted = Koha::Items->find($itemnumber); > is($getdeleted, undef, "Item deleted as expected."); > >diff --git a/t/db_dependent/Items/DelItem.t b/t/db_dependent/Items/DelItem.t >index 5f2355f1e3..6b778ddaf8 100644 >--- a/t/db_dependent/Items/DelItem.t >+++ b/t/db_dependent/Items/DelItem.t >@@ -1,5 +1,7 @@ > use Modern::Perl; > >+# FIXME This file must be removed and the test moved to Koha::Item->delete >+ > use MARC::Record; > use C4::Items; > use C4::Biblio; >@@ -8,7 +10,7 @@ use Koha::Items; > > use t::lib::TestBuilder; > >-use Test::More tests => 6; >+use Test::More tests => 2; > > my $schema = Koha::Database->schema; > $schema->storage->txn_begin; >@@ -20,31 +22,14 @@ my $library = $builder->build({ > > my $biblio = $builder->build_sample_biblio(); > >-my $itemnumber = $builder->build_sample_item( >+my $item = $builder->build_sample_item( > { > biblionumber => $biblio->biblionumber, > library => $library->{branchcode} > } >-)->itemnumber; >+); > >-my $deleted = DelItem( { biblionumber => $biblio->biblionumber, itemnumber => $itemnumber } ); >+my $deleted = $item->delete; > is( $deleted, 1, "DelItem should return 1 if the item has been deleted" ); >-my $deleted_item = Koha::Items->find($itemnumber); >+my $deleted_item = Koha::Items->find($item->itemnumber); > is( $deleted_item, undef, "DelItem with biblionumber parameter - the item should be deleted." ); >- >-$itemnumber = $builder->build_sample_item( >- { >- biblionumber => $biblio->biblionumber, >- library => $library->{branchcode} >- } >-)->itemnumber; >-$deleted = DelItem( { biblionumber => $biblio->biblionumber, itemnumber => $itemnumber } ); >-is( $deleted, 1, "DelItem should return 1 if the item has been deleted" ); >-$deleted_item = Koha::Items->find($itemnumber); >-is( $deleted_item, undef, "DelItem without biblionumber parameter - the item should be deleted." ); >- >-$deleted = DelItem( { itemnumber => $itemnumber + 1} ); >-is ( $deleted, 0, "DelItem should return 0 if no item has been deleted" ); >- >-$deleted = DelItem( { itemnumber => $itemnumber + 1, biblionumber => $biblio->biblionumber } ); >-is ( $deleted, 0, "DelItem should return 0 if no item has been deleted" ); >-- >2.11.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 23463
:
95899
|
95900
|
95901
|
95902
|
95903
|
95904
|
95905
|
95906
|
95907
|
95908
|
95909
|
95910
|
95911
|
95912
|
95913
|
95914
|
95915
|
95916
|
95917
|
95918
|
95919
|
95920
|
95921
|
95922
|
95923
|
95925
|
96145
|
97895
|
97896
|
97897
|
97898
|
97899
|
97900
|
97901
|
97902
|
97903
|
97904
|
97905
|
97906
|
97907
|
97908
|
97909
|
97910
|
97911
|
97912
|
97913
|
97914
|
97915
|
97916
|
97917
|
97918
|
97919
|
97920
|
97921
|
101151
|
101152
|
101153
|
101154
|
101156
|
101157
|
101158
|
101161
|
101163
|
101165
|
101167
|
101169
|
101170
|
101171
|
101172
|
101173
|
101174
|
101175
|
101176
|
101177
|
101178
|
101179
|
101180
|
101181
|
101182
|
101183
|
101184
|
101185
|
101186
|
101188
|
101189
|
101190
|
101191
|
101192
|
101193
|
101194
|
101195
|
101196
|
101197
|
101246
|
101247
|
101248
|
101249
|
101250
|
101251
|
101252
|
101253
|
101254
|
101255
|
101256
|
101257
|
101258
|
101259
|
101260
|
101261
|
101262
|
101263
|
101264
|
101265
|
101266
|
101267
|
101268
|
101269
|
101270
|
101271
|
101272
|
101273
|
101274
|
101275
|
101276
|
101277
|
101278
|
101279
|
101280
|
101281
|
101282
|
101283
|
101284
|
101413
|
101414
|
101415
|
101416
|
101432
|
101476
|
102071
|
103129
|
113581