Bug 23064: Use Koha::Subscription in ModSubscription

We must use Koha::Subscription instead of raw SQL.
It will fix issue with default and integer values.

Test plan:
Edit a subscription and set number of issues = "f"
Save
=> Without this patch there is a SQL error in the log:
  Incorrect integer value: 'f' for column 'numberlength'
=> With this patch the other changes are effective.

Note: We also could change the type attribute of the input to "number",
to have a client-side check

Also, the return value of ModSuggestion is never used, so we are safe
with that.

Signed-off-by: Hayley Mapley <hayleymapley@catalyst.net.nz>
The <strict_sql_modes> flag must be present and set to 1 in the <config> section of koha-conf.xml

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>

Signed-off-by: Hayley Mapley <hayleymapley@catalyst.net.nz>
This commit is contained in:
Jonathan Druart 2019-11-20 12:22:58 +01:00 committed by Hayley Mapley
parent 610a6cf78b
commit 89ab97da99
1 changed files with 44 additions and 29 deletions

View File

@ -1305,37 +1305,52 @@ sub ModSubscription {
$itemtype, $previousitemtype
) = @_;
my $dbh = C4::Context->dbh;
my $query = "UPDATE subscription
SET librarian=?, branchcode=?, aqbooksellerid=?, cost=?, aqbudgetid=?,
startdate=?, periodicity=?, firstacquidate=?, irregularity=?,
numberpattern=?, locale=?, numberlength=?, weeklength=?, monthlength=?,
lastvalue1=?, innerloop1=?, lastvalue2=?, innerloop2=?,
lastvalue3=?, innerloop3=?, status=?, biblionumber=?,
callnumber=?, notes=?, letter=?, manualhistory=?,
internalnotes=?, serialsadditems=?, staffdisplaycount=?,
opacdisplaycount=?, graceperiod=?, location = ?, enddate=?,
skip_serialseq=?, itemtype=?, previousitemtype=?
WHERE subscriptionid = ?";
my $sth = $dbh->prepare($query);
$sth->execute(
$auser, $branchcode, $aqbooksellerid, $cost,
$aqbudgetid, $startdate, $periodicity, $firstacquidate,
$irregularity, $numberpattern, $locale, $numberlength,
$weeklength, $monthlength, $lastvalue1, $innerloop1,
$lastvalue2, $innerloop2, $lastvalue3, $innerloop3,
$status, $biblionumber, $callnumber, $notes,
$letter, ($manualhistory ? $manualhistory : 0),
$internalnotes, $serialsadditems, $staffdisplaycount, $opacdisplaycount,
$graceperiod, $location, $enddate, $skip_serialseq,
$itemtype, $previousitemtype,
$subscriptionid
);
my $rows = $sth->rows;
my $subscription = Koha::Subscriptions->find($subscriptionid);
$subscription->set(
{
librarian => $auser,
branchcode => $branchcode,
aqbooksellerid => $aqbooksellerid,
cost => $cost,
aqbudgetid => $aqbudgetid,
biblionumber => $biblionumber,
startdate => $startdate,
periodicity => $periodicity,
numberlength => $numberlength,
weeklength => $weeklength,
monthlength => $monthlength,
lastvalue1 => $lastvalue1,
innerloop1 => $innerloop1,
lastvalue2 => $lastvalue2,
innerloop2 => $innerloop2,
lastvalue3 => $lastvalue3,
innerloop3 => $innerloop3,
status => $status,
notes => $notes,
letter => $letter,
firstacquidate => $firstacquidate,
irregularity => $irregularity,
numberpattern => $numberpattern,
locale => $locale,
callnumber => $callnumber,
manualhistory => $manualhistory,
internalnotes => $internalnotes,
serialsadditems => $serialsadditems,
staffdisplaycount => $staffdisplaycount,
opacdisplaycount => $opacdisplaycount,
graceperiod => $graceperiod,
location => $location,
enddate => $enddate,
skip_serialseq => $skip_serialseq,
itemtype => $itemtype,
previousitemtype => $previousitemtype,
}
)->store;
logaction( "SERIAL", "MODIFY", $subscriptionid, "" ) if C4::Context->preference("SubscriptionLog");
return $rows;
$subscription->discard_changes;
return $subscription;
}
=head2 NewSubscription