From 2bf68df6834e078b60549964410e0d98dd670143 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) --- C4/Suggestions.pm | 2 +- .../prog/en/modules/suggestion/suggestion.tt | 32 +++++++- suggestion/suggestion.pl | 88 +++++++++++++--------- 3 files changed, 85 insertions(+), 37 deletions(-) diff --git a/C4/Suggestions.pm b/C4/Suggestions.pm index 63defc6..65d1de2 100644 --- a/C4/Suggestions.pm +++ b/C4/Suggestions.pm @@ -655,7 +655,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 62335e8..f23d4c3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt @@ -317,6 +317,16 @@ h4.local_collapse a { font-size : 80%; text-decoration: none; } fieldset.brief o
[% 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 %]
@@ -465,7 +475,25 @@ h4.local_collapse a { font-size : 80%; text-decoration: none; } fieldset.brief o -
[% IF ( suggestionid ) %] Cancel[% ELSE %] Cancel[% END %] +
+ + [% IF ( suggestionid ) %] + [% IF ( need_confirm ) %] + + + [% ELSE %] + + [% END %] + Cancel + [% ELSE %] + [% IF ( need_confirm ) %] + + + [% ELSE %] + + [% END %] + Cancel + [% END %]
[% END %] @@ -483,6 +511,8 @@ h4.local_collapse a { font-size : 80%; text-decoration: none; } fieldset.brief o [% SWITCH m.code %] [% CASE 'already_exists' %] The suggestion has not been added. A suggestion with this title already exists (suggestion #[% m.id %]) + [% CASE 'biblio_exists' %] + A similar document already exists: [% m.title %]. Click on "Confirm your suggestion" to ignore this message. [% CASE %] [% m.code %] [% END %] diff --git a/suggestion/suggestion.pl b/suggestion/suggestion.pl index 91ab741..8655c2a 100755 --- a/suggestion/suggestion.pl +++ b/suggestion/suggestion.pl @@ -91,6 +91,7 @@ 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; # filter informations which are not suggestion related. my $suggestion_ref = $input->Vars; @@ -120,51 +121,68 @@ $template->param('borrowernumber' => $borrowernumber); ######################################### ## Operations ## -if ( $op =~ /save/i ) { - $suggestion_only->{suggesteddate} = dt_from_string( $suggestion_only->{suggesteddate} ) - if $suggestion_only->{suggesteddate}; - 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}; +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); } - 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} }; + else { + $suggestion_only->{suggesteddate} = dt_from_string( $suggestion_only->{suggesteddate} ) + if $suggestion_only->{suggesteddate}; + + 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}; } - $template->param( messages => \@messages ); - } - else { - ## Adding some informations related to suggestion - &NewSuggestion($suggestion_only); + $suggestion_only->{manageddate} = dt_from_string; + $suggestion_only->{"managedby"} = C4::Context->userenv->{number}; } - # empty fields, to avoid filter in "SearchSuggestion" - } - map{delete $$suggestion_ref{$_}} keys %$suggestion_ref; - $op = 'else'; + 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 + 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); + } + # empty fields, to avoid filter in "SearchSuggestion" + } + 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.7.4