From bdcb77d9c4b8b59a77234bf3fd631ffa2958208b Mon Sep 17 00:00:00 2001 From: Alex Arnaud Date: Wed, 8 Mar 2017 11:23:12 +0000 Subject: [PATCH] Bug 14973: Check existing biblio when submitting a purchase suggestion (staff side) Signed-off-by: Lisette Scheer --- C4/Suggestions.pm | 2 +- .../prog/en/modules/suggestion/suggestion.tt | 32 ++++++- suggestion/suggestion.pl | 100 ++++++++++++--------- 3 files changed, 92 insertions(+), 42 deletions(-) diff --git a/C4/Suggestions.pm b/C4/Suggestions.pm index 260bc98588..ff3bc89090 100644 --- a/C4/Suggestions.pm +++ b/C4/Suggestions.pm @@ -688,7 +688,7 @@ sub MarcRecordFromNewSuggestion { } else { $record->append_fields( - MARC::Field->new($it_tag, ' ', ' ', $it_subfield => $suggestion->{author}) + MARC::Field->new($it_tag, ' ', ' ', $it_subfield => $suggestion->{itemtype}) ); } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt index 30ab2b46b9..fead7f4474 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt @@ -239,6 +239,16 @@ [% END %] [% IF ( op_save ) %] + [% FOR m IN messages %] +
+ [% SWITCH m.code %] + [% CASE 'biblio_exists' %] + A similar document already exists: [% m.title %]. Click on "Confirm your suggestion" to ignore this message. + [% CASE %] + [% m.code %] + [% END %] +
+ [% END %]
@@ -410,7 +420,25 @@ -
[% IF ( suggestionid ) %] Cancel[% ELSE %] Cancel[% END %] +
+ + [% IF ( suggestionid ) %] + [% IF ( need_confirm ) %] + + + [% ELSE %] + + [% END %] + Cancel + [% ELSE %] + [% IF ( need_confirm ) %] + + + [% ELSE %] + + [% END %] + Cancel + [% END %]
[% END %] @@ -428,6 +456,8 @@ [% SWITCH m.code %] [% CASE 'already_exists' %] The suggestion has not been added. A suggestion with this title already exists (suggestion #[% m.id | html %]) + [% CASE 'biblio_exists' %] + A similar document already exists: [% m.title %]. Click on "Confirm your suggestion" to ignore this message. [% CASE %] [% m.code | html %] [% END %] diff --git a/suggestion/suggestion.pl b/suggestion/suggestion.pl index ef153ba88b..60dc7ffdf0 100755 --- a/suggestion/suggestion.pl +++ b/suggestion/suggestion.pl @@ -91,6 +91,8 @@ my $returnsuggested = $input->param('returnsuggested'); my $managedby = $input->param('managedby'); my $displayby = $input->param('displayby') || ''; my $tabcode = $input->param('tabcode'); +my $save_confirmed = $input->param('save_confirmed') || 0; + my $reasonsloop = GetAuthorisedValues("SUGGEST"); # filter informations which are not suggestion related. @@ -122,60 +124,78 @@ my $branchfilter = $input->param('branchcode') || C4::Context->userenv->{'branch ######################################### ## Operations ## -if ( $op =~ /save/i ) { - for my $date_key ( qw( suggesteddate manageddate accepteddate rejecteddate ) ) { - $suggestion_only->{$date_key} = dt_from_string( $suggestion_only->{$date_key} ) - if $suggestion_only->{$date_key}; +if ( $op =~ /save/i ) { + my @messages; + my $biblio = MarcRecordFromNewSuggestion({ + title => $suggestion_only->{title}, + author => $suggestion_only->{author}, + itemtype => $suggestion_only->{itemtype}, + }); + + if ( ( my ($duplicatebiblionumber, $duplicatetitle) = FindDuplicate($biblio) ) && !$save_confirmed ) { + push @messages, { type => 'error', code => 'biblio_exists', id => $duplicatebiblionumber, title => $duplicatetitle }; + $template->param( + messages => \@messages, + need_confirm => 1 + ); + delete $suggestion_ref->{suggesteddate}; + Init($suggestion_ref); } + else { - if ( $suggestion_only->{"STATUS"} ) { - if ( my $tmpstatus = lc( $suggestion_only->{"STATUS"} ) =~ /ACCEPTED|REJECTED/i ) { - $suggestion_only->{ lc( $suggestion_only->{"STATUS"}) . "date" } = dt_from_string; - $suggestion_only->{ lc( $suggestion_only->{"STATUS"}) . "by" } = C4::Context->userenv->{number}; + for my $date_key ( qw( suggesteddate manageddate accepteddate rejecteddate ) ) { + $suggestion_only->{$date_key} = dt_from_string( $suggestion_only->{$date_key} ) + if $suggestion_only->{$date_key}; } - $suggestion_only->{manageddate} = dt_from_string; - $suggestion_only->{"managedby"} = C4::Context->userenv->{number}; - } - my $otherreason = $input->param('other_reason'); - if ($suggestion_only->{reason} eq 'other' && $otherreason) { - $suggestion_only->{reason} = $otherreason; - } + if ( $suggestion_only->{"STATUS"} ) { + if ( my $tmpstatus = lc( $suggestion_only->{"STATUS"} ) =~ /ACCEPTED|REJECTED/i ) { + $suggestion_only->{ lc( $suggestion_only->{"STATUS"}) . "date" } = dt_from_string; + $suggestion_only->{ lc( $suggestion_only->{"STATUS"}) . "by" } = C4::Context->userenv->{number}; + } + $suggestion_only->{manageddate} = dt_from_string; + $suggestion_only->{"managedby"} = C4::Context->userenv->{number}; + } + + my $otherreason = $input->param('other_reason'); + if ($suggestion_only->{reason} eq 'other' && $otherreason) { + $suggestion_only->{reason} = $otherreason; + } - if ( $suggestion_only->{'suggestionid'} > 0 ) { - &ModSuggestion($suggestion_only); - } else { - ###FIXME:Search here if suggestion already exists. - my $suggestions_loop = - SearchSuggestion( $suggestion_only ); - if (@$suggestions_loop>=1){ - #some suggestion are answering the request Donot Add - my @messages; - for my $suggestion ( @$suggestions_loop ) { - push @messages, { type => 'error', code => 'already_exists', id => $suggestion->{suggestionid} }; + if ( $suggestion_only->{'suggestionid'} > 0 ) { + &ModSuggestion($suggestion_only); + } else { + ###FIXME:Search here if suggestion already exists. + my $suggestions_loop = + SearchSuggestion( $suggestion_only ); + if (@$suggestions_loop>=1){ + #some suggestion are answering the request Donot Add + my @messages; + for my $suggestion ( @$suggestions_loop ) { + push @messages, { type => 'error', code => 'already_exists', id => $suggestion->{suggestionid} }; + } + $template->param( messages => \@messages ); + } + else { + ## Adding some informations related to suggestion + &NewSuggestion($suggestion_only); } - $template->param( messages => \@messages ); - } - else { - ## Adding some informations related to suggestion - &NewSuggestion($suggestion_only); + # empty fields, to avoid filter in "SearchSuggestion" } - # empty fields, to avoid filter in "SearchSuggestion" - } - map{delete $$suggestion_ref{$_}} keys %$suggestion_ref; - $op = 'else'; + map{delete $$suggestion_ref{$_}} keys %$suggestion_ref; + $op = 'else'; - if( $redirect eq 'purchase_suggestions' ) { - print $input->redirect("/cgi-bin/koha/members/purchase-suggestions.pl?borrowernumber=$borrowernumber"); + if( $redirect eq 'purchase_suggestions' ) { + print $input->redirect("/cgi-bin/koha/members/purchase-suggestions.pl?borrowernumber=$borrowernumber"); + } } - } elsif ($op=~/add/) { - #Adds suggestion + #Adds suggestion Init($suggestion_ref); $op ='save'; -} +} elsif ($op=~/edit/) { #Edit suggestion $suggestion_ref=&GetSuggestion($$suggestion_ref{'suggestionid'}); -- 2.11.0