From d4a0635d8221685ad4371c5d2bba4c11553a35a1 Mon Sep 17 00:00:00 2001
From: Nick Clemens <nick@bywatersolutions.com>
Date: Wed, 19 Jul 2017 13:10:41 +0000
Subject: [PATCH] Bug 17672 - Items table should have a damaged_on column
This patchset adds a 'damaged_on' column to store the date an item is
marked damaged, analogous to withdrawn_on and itemlost_on
To test:
1 - Apply patch
2 - Mark an item damaged via moredetail.pl (Items tab on left in
details)
3 - Note the damaged on date apears below
4 - Unmark the item, the date is removed
5 - Go to the edit items screen (from top bar 'Edit->edit items')
6 - Mark item damaged - check db or moredetails.pl to see damaged_on
date
7 - Unmark item damaged - confirm date is removed
8 - prove t/db_dependent/Items.t
---
C4/Items.pm | 4 +--
admin/columns_settings.yml | 3 +-
.../bug17672_add_damaged_on_column_to_items.perl | 9 +++++
installer/data/mysql/kohastructure.sql | 2 ++
koha-tmpl/intranet-tmpl/prog/en/columns.def | 1 +
.../prog/en/modules/catalogue/moredetail.tt | 3 ++
t/db_dependent/Items.t | 39 +++++++++++++++++++++-
7 files changed, 57 insertions(+), 4 deletions(-)
create mode 100644 installer/data/mysql/atomicupdate/bug17672_add_damaged_on_column_to_items.perl
diff --git a/C4/Items.pm b/C4/Items.pm
index 036b4f7..5db7104 100644
--- a/C4/Items.pm
+++ b/C4/Items.pm
@@ -562,10 +562,10 @@ sub ModItem {
$item->{'itemnumber'} = $itemnumber or return;
- my @fields = qw( itemlost withdrawn );
+ my @fields = qw( itemlost withdrawn damaged );
# Only call GetItem if we need to set an "on" date field
- if ( $item->{itemlost} || $item->{withdrawn} ) {
+ if ( $item->{itemlost} || $item->{withdrawn} || $item->{damaged} ) {
my $pre_mod_item = GetItem( $item->{'itemnumber'} );
for my $field (@fields) {
if ( defined( $item->{$field} )
diff --git a/admin/columns_settings.yml b/admin/columns_settings.yml
index 5198c0d..d71b659 100644
--- a/admin/columns_settings.yml
+++ b/admin/columns_settings.yml
@@ -88,7 +88,8 @@ modules:
itemst:
# NOTE: These columns are in the same order as kohastructure.sql, and contain all items
# columns except for the following internal/obsolete fields: stack, more_subfields_xml,
- # cn_sort, permanent_location, itemlost_on, withdrawn_on, issues, renewals and reserves.
+ # cn_sort, permanent_location, damaged_on itemlost_on, withdrawn_on, issues, renewals and
+ # reserves.
-
columnname: barcode
-
diff --git a/installer/data/mysql/atomicupdate/bug17672_add_damaged_on_column_to_items.perl b/installer/data/mysql/atomicupdate/bug17672_add_damaged_on_column_to_items.perl
new file mode 100644
index 0000000..5e63d5f
--- /dev/null
+++ b/installer/data/mysql/atomicupdate/bug17672_add_damaged_on_column_to_items.perl
@@ -0,0 +1,9 @@
+$DBversion = 'XXX'; # will be replaced by the RM
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do( "ALTER TABLE items ADD COLUMN damaged_on DATETIME NULL AFTER damaged");
+ $dbh->do( "ALTER TABLE deleteditems ADD COLUMN damaged_on DATETIME NULL AFTER damaged");
+
+ # Always end with this (adjust the bug info)
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 17672 - Items table should have a damaged_on column)\n";
+}
diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql
index e227125..525cbbb 100644
--- a/installer/data/mysql/kohastructure.sql
+++ b/installer/data/mysql/kohastructure.sql
@@ -663,6 +663,7 @@ CREATE TABLE `deleteditems` (
`stack` tinyint(1) default NULL,
`notforloan` tinyint(1) NOT NULL default 0, -- authorized value defining why this item is not for loan (MARC21 952$7)
`damaged` tinyint(1) NOT NULL default 0, -- authorized value defining this item as damaged (MARC21 952$4)
+ `damaged_on` datetime DEFAULT NULL, -- the date and time an item was last marked as damaged, NULL if not damaged
`itemlost` tinyint(1) NOT NULL default 0, -- authorized value defining this item as lost (MARC21 952$1)
`itemlost_on` datetime DEFAULT NULL, -- the date and time an item was last marked as lost, NULL if not lost
`withdrawn` tinyint(1) NOT NULL default 0, -- authorized value defining this item as withdrawn (MARC21 952$0)
@@ -923,6 +924,7 @@ CREATE TABLE `items` ( -- holdings/item information
`stack` tinyint(1) default NULL,
`notforloan` tinyint(1) NOT NULL default 0, -- authorized value defining why this item is not for loan (MARC21 952$7)
`damaged` tinyint(1) NOT NULL default 0, -- authorized value defining this item as damaged (MARC21 952$4)
+ `damaged_on` datetime DEFAULT NULL, -- the date and time an item was last marked as damaged, NULL if not damaged
`itemlost` tinyint(1) NOT NULL default 0, -- authorized value defining this item as lost (MARC21 952$1)
`itemlost_on` datetime DEFAULT NULL, -- the date and time an item was last marked as lost, NULL if not lost
`withdrawn` tinyint(1) NOT NULL default 0, -- authorized value defining this item as withdrawn (MARC21 952$0)
diff --git a/koha-tmpl/intranet-tmpl/prog/en/columns.def b/koha-tmpl/intranet-tmpl/prog/en/columns.def
index 8d7c174..21c74f2 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/columns.def
+++ b/koha-tmpl/intranet-tmpl/prog/en/columns.def
@@ -100,6 +100,7 @@
<field name="items.itype">Koha itemtype</field>
<field name="items.stocknumber">Inventory number</field>
<field name="items.damaged">Damaged status</field>
+<field name="items.damaged_on">Damaged on</field>
<field name="items.materials">Materials specified</field>
<field name="items.uri">Uniform Resource Identifier</field>
<field name="items.more_subfields_xml">Additional subfields (XML)</field>
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt
index b04fd39..0d086e1 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt
@@ -162,6 +162,9 @@
[% END %]
</li>
+ [% IF ITEM_DAT.damaged != "" && ITEM_DAT.damaged_on %]
+ <li><span class="label">Damaged on:</span>[% ITEM_DAT.damaged_on | $KohaDates %] </li>
+ [% END %]
[% END %]
[% IF itemwithdrawnloop %]
diff --git a/t/db_dependent/Items.t b/t/db_dependent/Items.t
index f85d48a..f390aee 100755
--- a/t/db_dependent/Items.t
+++ b/t/db_dependent/Items.t
@@ -22,11 +22,12 @@ use MARC::Record;
use C4::Biblio;
use Koha::Database;
use Koha::Library;
+use Koha::DateUtils;
use t::lib::Mocks;
use t::lib::TestBuilder;
-use Test::More tests => 11;
+use Test::More tests => 12;
use Test::Warn;
@@ -103,6 +104,41 @@ subtest 'General Add, Get and Del tests' => sub {
$schema->storage->txn_rollback;
};
+subtest 'ModItem tests' => sub {
+ plan tests => 6;
+
+ $schema->storage->txn_begin;
+
+ my $builder = t::lib::TestBuilder->new;
+ my $item = $builder->build({
+ source => 'Item',
+ value => {
+ itemlost => 0,
+ damaged => 0,
+ withdrawn => 0,
+ itemlost_on => undef,
+ damaged_on => undef,
+ withdrawn_on => undef,
+ }
+ });
+
+ my @fields = qw( itemlost withdrawn damaged );
+ for my $field (@fields) {
+ $item->{$field} = 1;
+ ModItem( $item, $item->{biblionumber}, $item->{itemnumber} );
+ my $post_mod_item = Koha::Items->find({ itemnumber => $item->{itemnumber} })->unblessed;
+ is( output_pref({ str => $post_mod_item->{$field."_on"}, dateonly => 1 }), output_pref({ dt => dt_from_string(), dateonly => 1 }), "When updating $field, $field"."_on is updated" );
+
+ $item->{$field} = 0;
+ ModItem( $item, $item->{biblionumber}, $item->{itemnumber} );
+ $post_mod_item = Koha::Items->find({ itemnumber => $item->{itemnumber} })->unblessed;
+ is( $post_mod_item->{$field."_on"}, undef, "When clearing $field, $field"."_on is cleared" );
+ }
+
+ $schema->storage->txn_rollback;
+
+};
+
subtest 'GetHiddenItemnumbers tests' => sub {
plan tests => 9;
@@ -769,6 +805,7 @@ subtest '_mod_item_dates' => sub {
# check if itemlost_on was not touched
$item->{itemlost_on} = '12345678';
$item->{withdrawn_on} = '12/31/2015 23:59:00';
+ $item->{damaged_on} = '01/20/2017 09:00:00';
$orgitem = { %$item };
C4::Items::_mod_item_dates($item);
is_deeply( $item, $orgitem, 'Colums with _on are not touched' );
--
2.1.4