Bugzilla – Attachment 29093 Details for
Bug 7817
Items Permanent location (shelving location) is set to NULL when item is edited
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 7817: A DB field without a default mapping is set to a default value on editing
Bug-7817-A-DB-field-without-a-default-mapping-is-s.patch (text/plain), 6.84 KB, created by
Jonathan Druart
on 2014-06-20 11:44:27 UTC
(
hide
)
Description:
Bug 7817: A DB field without a default mapping is set to a default value on editing
Filename:
MIME Type:
Creator:
Jonathan Druart
Created:
2014-06-20 11:44:27 UTC
Size:
6.84 KB
patch
obsolete
>From e754b7a0913c519ee43ac2808fe0d23a109091da Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@biblibre.com> >Date: Thu, 19 Jun 2014 15:18:23 +0200 >Subject: [PATCH] Bug 7817: A DB field without a default mapping is set to a > default value on editing > >If an item is edited and a field is not mapped to Koha, it is to 0 or >NULL (depending on the default value defined). > >This patch adds a check on the mapping before editing the item. It there >is no mapping, the DB value is not erased. > >Test plan: >1/ Edit an item and fill a value for a field >2/ Unmap this field >3/ Edit the item >4/ Verify that the value is not erased (using the MySQL CLI) >--- > C4/Items.pm | 80 ++++++++++++++++++++------------- > C4/Koha.pm | 25 +++++++++++ > t/db_dependent/Koha/IsKohaFieldLinked.t | 44 ++++++++++++++++++ > 3 files changed, 117 insertions(+), 32 deletions(-) > create mode 100644 t/db_dependent/Koha/IsKohaFieldLinked.t > >diff --git a/C4/Items.pm b/C4/Items.pm >index c183644..c2c7eb8 100644 >--- a/C4/Items.pm >+++ b/C4/Items.pm >@@ -442,36 +442,50 @@ Returns item record > > =cut > >-my %default_values_for_mod_from_marc = ( >- barcode => undef, >- booksellerid => undef, >- ccode => undef, >- 'items.cn_source' => undef, >- coded_location_qualifier => undef, >- copynumber => undef, >- damaged => 0, >-# dateaccessioned => undef, >- enumchron => undef, >- holdingbranch => undef, >- homebranch => undef, >- itemcallnumber => undef, >- itemlost => 0, >- itemnotes => undef, >- itype => undef, >- location => undef, >- permanent_location => undef, >- materials => undef, >- notforloan => 0, >- paidfor => undef, >- price => undef, >- replacementprice => undef, >- replacementpricedate => undef, >- restricted => undef, >- stack => undef, >- stocknumber => undef, >- uri => undef, >- withdrawn => 0, >-); >+our %default_values_for_mod_from_marc; >+ >+sub _build_default_values_for_mod_marc { >+ my ( $frameworkcode ) = @_; >+ return $default_values_for_mod_from_marc{$frameworkcode} if exists $default_values_for_mod_from_marc{$frameworkcode}; >+ my $marc_structure = C4::Biblio::GetMarcStructure( 1 , $frameworkcode ); >+ my $default_values = { >+ barcode => undef, >+ booksellerid => undef, >+ ccode => undef, >+ 'items.cn_source' => undef, >+ coded_location_qualifier => undef, >+ copynumber => undef, >+ damaged => 0, >+ enumchron => undef, >+ holdingbranch => undef, >+ homebranch => undef, >+ itemcallnumber => undef, >+ itemlost => 0, >+ itemnotes => undef, >+ itype => undef, >+ location => undef, >+ permanent_location => undef, >+ materials => undef, >+ notforloan => 0, >+ paidfor => undef, >+ price => undef, >+ replacementprice => undef, >+ replacementpricedate => undef, >+ restricted => undef, >+ stack => undef, >+ stocknumber => undef, >+ uri => undef, >+ withdrawn => 0, >+ }; >+ while ( my ( $field, $default_value ) = each %$default_values ) { >+ $field =~ s|[^\.]*\.?(.*)|items.$1|; >+ $default_values_for_mod_from_marc{$frameworkcode}{$field} = >+ $default_value >+ if C4::Koha::IsKohaFieldLinked( >+ { kohafield => $field, frameworkcode => $frameworkcode } ); >+ } >+ return $default_values_for_mod_from_marc{$frameworkcode}; >+}; > > sub ModItemFromMarc { > my $item_marc = shift; >@@ -485,8 +499,10 @@ sub ModItemFromMarc { > my $localitemmarc = MARC::Record->new; > $localitemmarc->append_fields( $item_marc->field($itemtag) ); > my $item = &TransformMarcToKoha( $dbh, $localitemmarc, $frameworkcode, 'items' ); >- foreach my $item_field ( keys %default_values_for_mod_from_marc ) { >- $item->{$item_field} = $default_values_for_mod_from_marc{$item_field} unless (exists $item->{$item_field}); >+ my $default_values = _build_default_values_for_mod_marc(); >+ foreach my $item_field ( keys %$default_values ) { >+ $item->{$item_field} = $default_values->{$item_field} >+ unless exists $item->{$item_field}; > } > my $unlinked_item_subfields = _get_unlinked_item_subfields( $localitemmarc, $frameworkcode ); > >diff --git a/C4/Koha.pm b/C4/Koha.pm >index 6f98ac6..2b049bb 100644 >--- a/C4/Koha.pm >+++ b/C4/Koha.pm >@@ -1667,6 +1667,31 @@ sub GetVariationsOfISBNs { > return wantarray ? @isbns : join( " | ", @isbns ); > } > >+=head2 IsKohaFieldLinked >+ >+ my $is_linked = IsKohaFieldLinked({ >+ kohafield => $kohafield, >+ frameworkcode => $frameworkcode, >+ }); >+ >+ Return 1 if the field is linked >+ >+=cut >+ >+sub IsKohaFieldLinked { >+ my ( $params ) = @_; >+ my $kohafield = $params->{kohafield}; >+ my $frameworkcode = $params->{frameworkcode} || ''; >+ my $dbh = C4::Context->dbh; >+ my $is_linked = $dbh->selectcol_arrayref( q| >+ SELECT COUNT(*) >+ FROM marc_subfield_structure >+ WHERE frameworkcode = ? >+ AND kohafield = ? >+ |,{}, $frameworkcode, $kohafield ); >+ return $is_linked->[0]; >+} >+ > 1; > > __END__ >diff --git a/t/db_dependent/Koha/IsKohaFieldLinked.t b/t/db_dependent/Koha/IsKohaFieldLinked.t >new file mode 100644 >index 0000000..90a5704 >--- /dev/null >+++ b/t/db_dependent/Koha/IsKohaFieldLinked.t >@@ -0,0 +1,44 @@ >+use Modern::Perl; >+use Test::More; >+ >+use C4::Context; >+use C4::Koha; >+ >+my $dbh = C4::Context->dbh; >+$dbh->{RaiseError} = 1; >+$dbh->{AutoCommit} = 0; >+ >+my $frameworkcode = 'FCUT'; >+$dbh->do( qq| >+ INSERT INTO marc_subfield_structure( >+ tagfield, tagsubfield, liblibrarian, kohafield, frameworkcode >+ ) VALUES >+ ('952', 'p', 'Barcode', 'items.barcode', '$frameworkcode'), >+ ('952', '8', 'Collection code', 'items.ccode', '$frameworkcode'), >+ ('952', '7', 'Not for loan', 'items.notforloan', '$frameworkcode'), >+ ('952', 'y', 'Koha item type', 'items.itype', '$frameworkcode'), >+ ('952', 'c', 'Permanent location', '', '$frameworkcode') >+|); >+ >+is ( C4::Koha::IsKohaFieldLinked( { >+ kohafield => 'items.barcode', >+ frameworkcode => $frameworkcode, >+}), 1, 'items.barcode is linked' ); >+ >+is ( C4::Koha::IsKohaFieldLinked( { >+ kohafield => 'items.notforloan', >+ frameworkcode => $frameworkcode, >+}), 1, 'items.notforloan is linked' ); >+ >+is ( C4::Koha::IsKohaFieldLinked( { >+ kohafield => 'notforloan', >+ frameworkcode => $frameworkcode, >+}), 0, 'notforloan is not linked' ); >+ >+is ( C4::Koha::IsKohaFieldLinked( { >+ kohafield => 'items.permanent_location', >+ frameworkcode => $frameworkcode, >+}), 0, 'items.permanent_location is not linked' ); >+ >+ >+done_testing; >-- >2.0.0.rc2
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 7817
:
28949
|
28970
|
28971
|
29093
|
30350
|
30923
|
30924
|
31133
|
31134
|
31464