Because of the "Library" filter on the left of the "Suggestions management" screen, there is something wrong happening:
1. Create a suggestion from library A, login from library B
2. Go to Home › Acquisitions › Suggestions management
=> The suggestion does not appear - OK
3. In the filter on the left, select "all library"
=> The suggestion appears on the pending tab - KO
4. Select the suggestion and mark is as 'Accepted'
=> The suggestion still appears on the pending tab - Failure
The log says:
DBD::mysql::st execute failed: Cannot add or update a child row: a foreign key constraint fails (`koha_kohadev`.`suggestions`, CONSTRAINT `suggestions_ibfk_branchcode` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE SET NULL ON UPDATE CASCADE) [for Statement "UPDATE `suggestions` SET `accepteddate` = ?, `branchcode` = ?, `currency` = ?, `manageddate` = ?, `price` = ?, `reason` = ?, `suggesteddate` = ?, `total` = ? WHERE ( `suggestionid` = ? )" with ParamValues: 0='2019-05-14T15:48:18', 1="", 2="CAD", 3='2019-05-14T15:48:18', 4="0.00", 5="", 6='2019-05-14T00:00:00', 7="0.00", 8=3] at /usr/share/perl5/DBIx/Class/Storage/DBI.pm line 1836.
Let forget what could have happened earlier in the script and do it the regular
way, from $input. Then call ModSuggestion with only what we need.
Test plan:
Confirm that the steps described before work as expected once this patch is applied
Signed-off-by: Liz Rea <wizzyrea@gmail.com>
https://bugs.koha-community.org/show_bug.cgi?id=22907
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
$op ='save';
}
elsif ($op eq "change" ) {
$op ='save';
}
elsif ($op eq "change" ) {
# set accepted/rejected/managed informations if applicable
# ie= if the librarian has chosen some action on the suggestions
# set accepted/rejected/managed informations if applicable
# ie= if the librarian has chosen some action on the suggestions
- if ($suggestion_only->{"STATUS"} eq "ACCEPTED"){
- $suggestion_only->{accepteddate} = dt_from_string;
- $suggestion_only->{"acceptedby"}=C4::Context->userenv->{number};
- } elsif ($suggestion_only->{"STATUS"} eq "REJECTED"){
- $suggestion_only->{rejecteddate} = dt_from_string;
- $suggestion_only->{"rejectedby"}=C4::Context->userenv->{number};
+ my $STATUS = $input->param('STATUS');
+ my $accepted_by = $input->param('acceptedby');
+ if ( $STATUS eq "ACCEPTED" ) {
+ $suggestion = {
+ STATUS => $STATUS,
+ accepteddate => dt_from_string,
+ acceptedby => C4::Context->userenv->{number},
+ };
- if ($suggestion_only->{"STATUS"}){
- $suggestion_only->{manageddate} = dt_from_string;
- $suggestion_only->{"managedby"}=C4::Context->userenv->{number};
+ elsif ( $STATUS eq "REJECTED" ) {
+ $suggestion = {
+
+ STATUS => $STATUS,
+ rejecteddate => dt_from_string,
+ rejectedby => C4::Context->userenv->{number},
+ };
- if ( my $reason = $$suggestion_ref{"reason$tabcode"}){
+ if ($STATUS) {
+ $suggestion->{manageddate} = dt_from_string;
+ $suggestion->{managedby} = C4::Context->userenv->{number};
+ }
+ if ( my $reason = $input->param("reason$tabcode") ) {
if ( $reason eq "other" ) {
if ( $reason eq "other" ) {
- $reason = $$suggestion_ref{"other_reason$tabcode"};
+ $reason = $input->param("other_reason$tabcode");
- $suggestion_only->{reason}=$reason;
+ $suggestion->{reason} = $reason;
}
foreach my $suggestionid (@editsuggestions) {
next unless $suggestionid;
}
foreach my $suggestionid (@editsuggestions) {
next unless $suggestionid;
- $suggestion_only->{'suggestionid'}=$suggestionid;
- &ModSuggestion($suggestion_only);
+ $suggestion->{suggestionid} = $suggestionid;
+ use Data::Printer colored => 1; warn p $suggestion;
+ &ModSuggestion($suggestion);
}
my $params = '';
foreach my $key (
}
my $params = '';
foreach my $key (