Bugzilla – Attachment 63309 Details for
Bug 17944
Remove the sql code from itemtypes.pl administrative perl script
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 17944 - Add Koha::ItemType->can_be_deleted and use it from admin/itemtypes.pl
Bug-17944---Add-KohaItemType-canbedeleted-and-use-.patch (text/plain), 6.32 KB, created by
Jonathan Druart
on 2017-05-09 19:00:51 UTC
(
hide
)
Description:
Bug 17944 - Add Koha::ItemType->can_be_deleted and use it from admin/itemtypes.pl
Filename:
MIME Type:
Creator:
Jonathan Druart
Created:
2017-05-09 19:00:51 UTC
Size:
6.32 KB
patch
obsolete
>From de0d4ca4dc39b4abdf66057327b257d5e1f4aa6d Mon Sep 17 00:00:00 2001 >From: Alex Buckley <alexbuckley@catalyst.net.nz> >Date: Sun, 22 Jan 2017 01:52:50 +0000 >Subject: [PATCH] Bug 17944 - Add Koha::ItemType->can_be_deleted and use it > from admin/itemtypes.pl > >Removed the sql code from Itemtypes.pm and replaced it with DBIx >database query in the itemtypes.pl administrative script > >Test plan: >1. In the staff interface, stage and manage MARC records for import > >2. Try to delete an itemtype. If there are items of that itemtype in the > database then a message telling you the number of items of that > itemtype there are will be displayed. > >3. Record that number > >4. View the admin/itemtpes.pl script and confirm that there is sql code > written in this file. > >5. Apply this patch > >6. View the admin/itemtypes.pl script and observe that there is no sql > in this file. There is however DBIx code, for example > $schema->resultset('Item')->search({ 'itype' => $itemtype_code} ); > which is searching for items with the itype value matching > $itemtype_code value. > >7. In the staff interface try to delete the same itemtype > >8. Record the number of items there are with that itemtype in the > resulting message > >9. The numbers recorded in steps 3 and 8 should match showing that the > DBIx code is working as intended > >Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> >--- > Koha/ItemType.pm | 16 +++++++++++++ > admin/itemtypes.pl | 26 ++++++++-------------- > .../prog/en/modules/admin/itemtypes.tt | 2 +- > t/db_dependent/Koha/ItemTypes.t | 24 +++++++++++++++++++- > 4 files changed, 49 insertions(+), 19 deletions(-) > >diff --git a/Koha/ItemType.pm b/Koha/ItemType.pm >index 8f2279b37c..0b84e80af6 100644 >--- a/Koha/ItemType.pm >+++ b/Koha/ItemType.pm >@@ -23,6 +23,7 @@ use C4::Koha; > use C4::Languages; > use Koha::Database; > use Koha::Localizations; >+use Koha::Exceptions; > > use base qw(Koha::Object); > >@@ -89,6 +90,21 @@ sub translated_descriptions { > } @translated_descriptions ]; > } > >+ >+=head3 can_be_deleted >+my $overalltotal = Koha::ItemType->can_be_deleted(); >+ >+Counts up the number of biblioitems and items with itemtype (code) and hands back the combined number of biblioitems and items with the itemtype >+ >+=cut >+ >+sub can_be_deleted { >+ my ($self) = @_; >+ my $nb_items = Koha::Items->search( { 'itype' => $self->itemtype} )->count; >+ my $nb_biblioitems = Koha::Biblioitems->search( { 'itemtype' => $self->itemtype} )->count; >+ return $nb_items + $nb_biblioitems == 0 ? 1 : 0; >+} >+ > =head3 type > > =cut >diff --git a/admin/itemtypes.pl b/admin/itemtypes.pl >index c8c224e703..756910d470 100755 >--- a/admin/itemtypes.pl >+++ b/admin/itemtypes.pl >@@ -31,8 +31,8 @@ use C4::Koha; > use C4::Context; > use C4::Auth; > use C4::Output; >- > use Koha::ItemTypes; >+use Koha::ItemType; > use Koha::Localizations; > > my $input = new CGI; >@@ -137,27 +137,19 @@ if ( $op eq 'add_form' ) { > > $searchfield = ''; > $op = 'list'; >-} elsif ( $op eq 'delete_confirm' ) { >- >- # Check both items and biblioitems >- my ($total) = $dbh->selectrow_array( ' >- SELECT COUNT(*) AS total FROM ( >- SELECT itemtype AS t FROM biblioitems >- UNION ALL >- SELECT itype AS t FROM items >- ) AS tmp >- WHERE tmp.t=? >- ', {}, $itemtype_code ); >- >- if ($total) { >- push @messages, { type => 'error', code => 'cannot_be_deleted', total => $total }; >+ >+ } elsif ( $op eq 'delete_confirm' ) { >+ my $ItemType = Koha::ItemTypes->find($itemtype_code); >+ my $overalltotal = $ItemType->can_be_deleted(); >+ if ($overalltotal == 0) { >+ push @messages, { type => 'error', code => 'cannot_be_deleted'}; > $op = 'list'; > } else { >- my $itemtype = Koha::ItemTypes->find($itemtype_code); >- $template->param( itemtype => $itemtype, ); >+ $template->param( itemtype => $ItemType, ); > } > > } elsif ( $op eq 'delete_confirmed' ) { >+ > my $itemtype = Koha::ItemTypes->find($itemtype_code); > my $deleted = eval { $itemtype->delete }; > if ( $@ or not $deleted ) { >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt >index 040b52e538..0d0718748e 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt >@@ -110,7 +110,7 @@ Item types administration > [% CASE 'already_exists' %] > This item type already exists. > [% CASE 'cannot_be_deleted' %] >- Cannot delete this item type. <p><strong>This record is used [% m.total %] times</strong>. Deletion is not possible.</p> >+ Cannot delete this item type. <p><strong>This record is in use</strong>. Deletion is not possible.</p> > [% CASE %] > [% m.code %] > [% END %] >diff --git a/t/db_dependent/Koha/ItemTypes.t b/t/db_dependent/Koha/ItemTypes.t >index e1ae330a28..082d733611 100755 >--- a/t/db_dependent/Koha/ItemTypes.t >+++ b/t/db_dependent/Koha/ItemTypes.t >@@ -19,10 +19,13 @@ > > use Modern::Perl; > >-use Test::More tests => 20; >+use Test::More tests => 26; > use Data::Dumper; > use Koha::Database; > use t::lib::Mocks; >+use Koha::Items; >+use Koha::Biblioitems; >+use t::lib::TestBuilder; > > BEGIN { > use_ok('Koha::ItemType'); >@@ -126,4 +129,23 @@ is( > 'item types should be sorted by translated description' > ); > >+my $builder = t::lib::TestBuilder->new; >+my $item_type = $builder->build_object({ class => 'Koha::ItemTypes' }); >+ >+is( $item_type->can_be_deleted, 1, 'An item type that is not used can be deleted'); >+ >+my $item = $builder->build_object({ class => 'Koha::Items', value => { itype => $item_type->itemtype }}); >+ >+is( $item_type->can_be_deleted, 0, 'An item type that is used by an item cannot be deleted' ); >+ >+my $biblio = $builder->build_object({ class => 'Koha::Biblioitems', value => { itemtype => $item_type->itemtype }}); >+ >+is ( $item_type->can_be_deleted, 0, 'An item type that is used by an item and a biblioitem cannot be deleted' ); >+ >+is ( $item->delete, 1, 'An item has been deleted' ); >+ >+is ( $biblio->delete, 1, 'A biblioitem has been deleted' ); >+ >+is ( $item_type->can_be_deleted, 1, 'The item type that was being used by the removed item and biblioitem can now be deleted' ); >+ > $schema->txn_rollback; >-- >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 17944
:
59391
|
59564
|
59565
|
59655
|
59656
|
59657
|
59715
|
59716
|
59717
|
59718
|
59953
|
59954
|
62499
|
62500
|
62501
|
62502
|
62503
|
62504
|
62505
|
63045
|
63152
|
63220
|
63259
|
63307
|
63308
|
63309
|
63310
|
63924
|
63925