Bugzilla – Attachment 11267 Details for
Bug 7412
Pre-filling items in cataloging
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Rebased patch
patch.txt (text/plain), 11.61 KB, created by
Marcel de Rooy
on 2012-08-01 14:54:09 UTC
(
hide
)
Description:
Rebased patch
Filename:
MIME Type:
Creator:
Marcel de Rooy
Created:
2012-08-01 14:54:09 UTC
Size:
11.61 KB
patch
obsolete
>From 7fcf5f842eb0a4fce85aaa9f95b76254a7f7f75d Mon Sep 17 00:00:00 2001 >From: Matthias Meusburger <matthias.meusburger@biblibre.com> >Date: Fri, 6 Jan 2012 14:55:45 +0100 >Subject: [PATCH] Bug 7412: Pre-filling items in cataloguing >Content-Type: text/plain; charset="utf-8" > >Pre-filling of items: remember what was in the previous item filled, to be able to create multiple items quickly. > >By default, all subfields are prefilled when the PrefillItem syspref is on, unless you specify which fields >you want to prefill in the SubfieldsToUseWhenPrefill syspref. >With a value of "f u v", only the $f, $u and $v will be prefilled, for example. > >Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de> >Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> >Rebased and QAed. >--- > cataloguing/additem.pl | 126 +++++++++++++++++--- > installer/data/mysql/sysprefs.sql | 2 + > installer/data/mysql/updatedatabase.pl | 14 ++- > .../en/modules/admin/preferences/cataloguing.pref | 10 ++ > 4 files changed, 135 insertions(+), 17 deletions(-) > >diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl >index 8543297..c488f93 100755 >--- a/cataloguing/additem.pl >+++ b/cataloguing/additem.pl >@@ -33,6 +33,9 @@ use C4::ClassSource; > use C4::Dates; > use List::MoreUtils qw/any/; > use C4::Search; >+use Storable qw(thaw freeze); >+use URI::Escape; >+ > > use MARC::File::XML; > use URI::Escape; >@@ -277,6 +280,33 @@ sub generate_subfield_form { > return \%subfield_data; > } > >+# Removes some subfields when prefilling items >+# This function will remove any subfield that is not in the SubfieldsToUseWhenPrefill syspref >+sub removeFieldsForPrefill { >+ >+ my $item = shift; >+ >+ # Getting item tag >+ my ($tag, $subtag) = GetMarcFromKohaField("items.barcode", ''); >+ >+ # Getting list of subfields to keep >+ my $subfieldsToUseWhenPrefill = C4::Context->preference('SubfieldsToUseWhenPrefill'); >+ >+ # Removing subfields that are not in the syspref >+ if ($tag && $subfieldsToUseWhenPrefill) { >+ my $field = $item->field($tag); >+ my @subfieldsToUse= split(/ /,$subfieldsToUseWhenPrefill); >+ foreach my $subfield ($field->subfields()) { >+ if (!grep { $subfield->[0] eq $_ } @subfieldsToUse) { >+ $field->delete_subfield(code => $subfield->[0]); >+ } >+ >+ } >+ } >+ >+ return $item; >+ >+} > > my $input = new CGI; > my $error = $input->param('error'); >@@ -315,9 +345,26 @@ my $oldrecord = TransformMarcToKoha($dbh,$record); > my $itemrecord; > my $nextop="additem"; > my @errors; # store errors found while checking data BEFORE saving item. >+ >+# Getting last created item cookie >+my $prefillitem = C4::Context->preference('PrefillItem'); >+my $justaddeditem; >+my $cookieitemrecord; >+if ($prefillitem) { >+ my $lastitemcookie = $input->cookie('LastCreatedItem'); >+ if ($lastitemcookie) { >+ $lastitemcookie = uri_unescape($lastitemcookie); >+ if ( thaw($lastitemcookie) ) { >+ $cookieitemrecord = thaw($lastitemcookie) ; >+ $cookieitemrecord = removeFieldsForPrefill($cookieitemrecord); >+ } >+ } >+} >+ > #------------------------------------------------------------------------------- > if ($op eq "additem") { >-#------------------------------------------------------------------------------- >+ >+ #------------------------------------------------------------------------------- > # rebuild > my @tags = $input->param('tag'); > my @subfields = $input->param('subfield'); >@@ -334,26 +381,69 @@ if ($op eq "additem") { > my $add_multiple_copies_submit = $input->param('add_multiple_copies_submit'); > my $number_of_copies = $input->param('number_of_copies'); > >+ # This is a bit tricky : if there is a cookie for the last created item and >+ # we just added an item, the cookie value is not correct yet (it will be updated >+ # next page). To prevent the form from being filled with outdated values, we >+ # force the use of "add and duplicate" feature, so the form will be filled with >+ # correct values. >+ $add_duplicate_submit = 1 if ($prefillitem); >+ $justaddeditem = 1; >+ >+ # if autoBarcode is set to 'incremental', calculate barcode... >+ # NOTE: This code is subject to change in 3.2 with the implemenation of ajax based autobarcode code >+ # NOTE: 'incremental' is the ONLY autoBarcode option available to those not using javascript >+ if ( C4::Context->preference('autoBarcode') eq 'incremental' ) { >+ my ( $tagfield, $tagsubfield ) = &GetMarcFromKohaField( "items.barcode", $frameworkcode ); >+ unless ( $record->field($tagfield)->subfield($tagsubfield) ) { >+ my $sth_barcode = $dbh->prepare("select max(abs(barcode)) from items"); >+ $sth_barcode->execute; >+ my ($newbarcode) = $sth_barcode->fetchrow; >+ $newbarcode++; >+ >+ # OK, we have the new barcode, now create the entry in MARC record >+ my $fieldItem = $record->field($tagfield); >+ $record->delete_field($fieldItem); >+ $fieldItem->add_subfields( $tagsubfield => $newbarcode ); >+ $record->insert_fields_ordered($fieldItem); >+ } >+ } >+ >+ > if (C4::Context->preference('autoBarcode') eq 'incremental') { > $record = _increment_barcode($record, $frameworkcode); > } > >- my $addedolditem = TransformMarcToKoha($dbh,$record); >+ my $addedolditem = TransformMarcToKoha( $dbh, $record ); > > # If we have to add or add & duplicate, we add the item >- if ($add_submit || $add_duplicate_submit) { >- # check for item barcode # being unique >- my $exist_itemnumber = get_item_from_barcode($addedolditem->{'barcode'}); >- push @errors,"barcode_not_unique" if($exist_itemnumber); >- # if barcode exists, don't create, but report The problem. >- unless ($exist_itemnumber) { >- my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = AddItemFromMarc($record,$biblionumber); >- set_item_default_location($oldbibitemnum); >- } >- $nextop = "additem"; >- if ($exist_itemnumber) { >- $itemrecord = $record; >- } >+ if ( $add_submit || $add_duplicate_submit ) { >+ >+ # check for item barcode # being unique >+ my $exist_itemnumber = get_item_from_barcode( $addedolditem->{'barcode'} ); >+ push @errors, "barcode_not_unique" if ($exist_itemnumber); >+ >+ # if barcode exists, don't create, but report The problem. >+ unless ($exist_itemnumber) { >+ my ( $oldbiblionumber, $oldbibnum, $oldbibitemnum ) = AddItemFromMarc( $record, $biblionumber ); >+ set_item_default_location($oldbibitemnum); >+ >+ # Pushing the last created item cookie back >+ if ($prefillitem && defined $record) { >+ my $itemcookie = $input->cookie( >+ -name => 'LastCreatedItem', >+ # We uri_escape the whole freezed structure so we're sure we won't have any encoding problems >+ -value => uri_escape( freeze( $record ) ), >+ -expires => '' >+ ); >+ >+ $cookie = ( $cookie, $itemcookie ); >+ } >+ >+ } >+ $nextop = "additem"; >+ if ($exist_itemnumber) { >+ $itemrecord = $record; >+ } > } > > # If we have to add & duplicate >@@ -370,6 +460,7 @@ if ($op eq "additem") { > $fieldItem->delete_subfields($tagsubfield); > $itemrecord->insert_fields_ordered($fieldItem); > } >+ $itemrecord = removeFieldsForPrefill($itemrecord) if ($prefillitem); > } > > # If we have to add multiple copies >@@ -693,6 +784,11 @@ if($itemrecord){ > } > # and now we add fields that are empty > >+# Using last created item if it exists >+ >+$itemrecord = $cookieitemrecord if ($prefillitem and not $justaddeditem and $op ne "edititem"); >+ >+# We generate form, and fill with values if defined > foreach my $tag ( keys %{$tagslib}){ > foreach my $subtag (keys %{$tagslib->{$tag}}){ > next if subfield_is_koha_internal_p($subtag); >diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql >index 6a53379..1f16368 100644 >--- a/installer/data/mysql/sysprefs.sql >+++ b/installer/data/mysql/sysprefs.sql >@@ -375,3 +375,5 @@ INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ( > INSERT INTO systempreferences (variable,value,explanation,type) VALUES('EnableBorrowerFiles','0','If enabled, allows librarians to upload and attach arbitrary files to a borrower record.','YesNo'); > INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UpdateTotalIssuesOnCirc','0','Whether to update the totalissues field in the biblio on each circ.',NULL,'YesNo'); > INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('IntranetSlipPrinterJS','','Use this JavaScript for printing slips. Define at least function printThenClose(). For use e.g. with Firefox PlugIn jsPrintSetup, see http://jsprintsetup.mozdev.org/','','Free'); >+INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('PrefillItem','0','When a new item is added, should it be prefilled with last created item values?','','YesNo'); >+INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SubfieldsToUseWhenPrefill','','Define a list of subfields to use when prefilling items (separated by space)','','Free'); >diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl >index 608a1bf..918b996 100755 >--- a/installer/data/mysql/updatedatabase.pl >+++ b/installer/data/mysql/updatedatabase.pl >@@ -5566,6 +5566,18 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) { > SetVersion ($DBversion); > } > >+$DBversion = "3.09.00.XXX"; >+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { >+ $dbh->do(" >+ INSERT IGNORE INTO `systempreferences` (variable,value,explanation,options,type) VALUES('PrefillItem','0','When a new item is added, should it be prefilled with last created item values?','','YesNo'); >+ "); >+ $dbh->do( >+ "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SubfieldsToUseWhenPrefill','','Define a list of subfields to use when prefilling items (separated by space)','','Free'); >+ "); >+ print "Upgrade to $DBversion done (Adding PrefillItem and SubfieldsToUseWhenPrefill sysprefs)\n"; >+ SetVersion($DBversion); >+} >+ > =head1 FUNCTIONS > > =head2 TableExists($table) >@@ -5588,8 +5600,6 @@ sub TableExists { > Drop all foreign keys of the table $table > > =cut >- >- > sub DropAllForeignKeys { > my ($table) = @_; > # get the table description >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref >index fe5fd05..ebb7a12 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref >@@ -94,6 +94,16 @@ Cataloging: > annual: generated in the form <year>-0001, <year>-0002. > hbyymmincr: generated in the form <branchcode>yymm0001. > "OFF": not generated automatically. >+ - >+ - When a new item is added, should it be prefilled with last created item values? >+ - pref: PrefillItem >+ choices: >+ yes: the new item is prefilled with last created item values >+ no: the new item is not prefilled with last created item values >+ - >+ - Define a list of subfields to use when prefilling items (separated by space) >+ - pref: SubfieldsToUseWhenPrefill >+ > Display: > - > - 'Separate multiple displayed authors, series or subjects with ' >-- >1.7.7.6 >
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 7412
:
7069
|
7095
|
7685
|
8718
|
10088
|
11267
|
11723
|
12504
|
12640