Koha/installer/onboarding.pl
Martin Renvoize 3c4232e746 Bug 22489: Update onboarding tool for bug 18925
When going through the onboarding process, the tool fails on submit of step 5,
due to changes made in the database structure and rule definitions by bug
18925.

This patch fixes this, adding code that creates a circulation rule where an
issuing rule is also created in onboarding.pl. It removes maxissueqty from
being sent with params to make an issuing rule, and adds it instead to the
params to make a circulation rule, to reflect the changes that have been made
in the database.

Test plan:
1) Drop and recreate your database
2) Reload the staff client and follow the installer and onboarding
process
3) Confirm that the process finishes without errors

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Liz Rea <wizzyrea@gmail.com>

Bug 22489: (follow-up) Correctly set success messages

The original patch was duplicating the success message upon successful
circ rule insertion. This corrects that.

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Liz Rea <wizzyrea@gmail.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Patches squashed for readability

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
2019-03-15 11:33:09 +00:00

322 lines
11 KiB
Perl
Executable file

#!/usr/bin/perl
# This file is part of Koha.
#
# Copyright (C) 2017 Catalyst IT
#
# Koha is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Koha is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
use Modern::Perl;
use C4::Context;
use C4::InstallAuth;
use CGI qw ( -utf8 );
use C4::Output;
use C4::Members qw(checkcardnumber);
use Koha::Patrons;
use Koha::Libraries;
use Koha::Database;
use Koha::DateUtils;
use Koha::Patrons;
use Koha::Patron::Categories;
use Koha::ItemTypes;
use Koha::IssuingRules;
#Setting variables
my $input = new CGI;
unless ( C4::Context->preference('Version') ) {
print $input->redirect("/cgi-bin/koha/installer/install.pl");
exit;
}
my ( $user, $cookie, $sessionID, $flags ) =
C4::InstallAuth::checkauth( $input, 0, undef, 'intranet' );
die "Not logged in"
unless $user
; # Should not happen, we should be redirect if the user is not logged in. But do not trust authentication...
my $step = $input->param('step') || 1;
my $op = $input->param('op') || '';
my $template_params = {};
$template_params->{op} = $op;
my $schema = Koha::Database->new()->schema();
my @messages;
if ( $step == 1 ) {
if ( $op eq 'add_validate_library' ) {
my $branchcode = $input->param('branchcode');
$branchcode = uc($branchcode);
$branchcode =~ s|\s||g
; # Use a regular expression to check the value of the inputted branchcode
my $library = Koha::Library->new(
{
branchcode => $branchcode,
branchname => scalar $input->param('branchname'),
}
);
eval { $library->store; };
unless ($@) {
push @messages, { code => 'success_on_insert_library' };
}
else {
push @messages, { code => 'error_on_insert_library' };
}
}
$step++ if Koha::Libraries->count;
}
if ( $step == 2 ) {
if ( $op eq "add_validate_category" ) {
my $searchfield = $input->param('description') // q||;
my $categorycode = $input->param('categorycode');
my $category;
$template_params->{categorycode} = $categorycode;
$categorycode = $input->param('categorycode');
my $description = $input->param('description');
my $overduenoticerequired = $input->param('overduenoticerequired');
my $category_type = $input->param('category_type');
my $default_privacy = $input->param('default_privacy');
my $enrolmentperiod = $input->param('enrolmentperiod');
my $enrolmentperioddate = $input->param('enrolmentperioddate') || undef;
#Converts the string into a date format
if ($enrolmentperioddate) {
$enrolmentperioddate = output_pref(
{
dt => dt_from_string($enrolmentperioddate),
dateformat => 'DateTime',
dateonly => 1,
}
);
}
#Adds a new patron category to the database
$category = Koha::Patron::Category->new(
{
categorycode => $categorycode,
description => $description,
overduenoticerequired => $overduenoticerequired,
category_type => $category_type,
default_privacy => $default_privacy,
enrolmentperiod => $enrolmentperiod,
enrolmentperioddate => $enrolmentperioddate
}
);
eval { $category->store; };
unless ($@) {
push @messages, { code => 'success_on_insert_category' };
}
else {
push @messages, { code => 'error_on_insert_category' };
}
}
$step++ if Koha::Patron::Categories->count;
}
if ( $step == 3 ) {
if ( $op eq 'add_validate_patron' ) {
#Create a patron
my $firstpassword = $input->param('password') || '';
my $secondpassword = $input->param('password2') || '';
my $cardnumber = $input->param('cardnumber');
my $userid = $input->param('userid');
my ( $is_valid, $passworderror) = Koha::AuthUtils::is_password_valid( $firstpassword );
if ( my $error_code = checkcardnumber($cardnumber) ) {
if ( $error_code == 1 ) {
push @messages, { code => 'ERROR_cardnumber_already_exists' };
}
elsif ( $error_code == 2 ) {
push @messages, { code => 'ERROR_cardnumber_length' };
}
}
elsif ( $firstpassword ne $secondpassword ) {
push @messages, { code => 'ERROR_password_mismatch' };
}
elsif ( $passworderror) {
push @messages, { code => 'ERROR_password_too_short'} if $passworderror eq 'too_short';
push @messages, { code => 'ERROR_password_too_weak'} if $passworderror eq 'too_weak';
push @messages, { code => 'ERROR_password_has_whitespaces'} if $passworderror eq 'has_whitespaces';
}
else {
my $patron_data = {
surname => scalar $input->param('surname'),
firstname => scalar $input->param('firstname'),
cardnumber => scalar $input->param('cardnumber'),
branchcode => scalar $input->param('libraries'),
categorycode => scalar $input->param('categorycode_entry'),
userid => scalar $input->param('userid'),
privacy => "default",
address => "",
city => "",
flags => 1, # Will be superlibrarian
};
my $patron_category =
Koha::Patron::Categories->find( $patron_data->{categorycode} );
$patron_data->{dateexpiry} =
$patron_category->get_expiry_date( $patron_data->{dateenrolled} );
eval {
my $patron = Koha::Patron->new($patron_data)->store;
$patron->set_password({ password => $firstpassword });
};
#Error handling checking if the patron was created successfully
unless ($@) {
push @messages, { code => 'success_on_insert_patron' };
}
else {
warn $@;
push @messages, { code => 'error_on_insert_patron' };
}
}
}
$step++ if Koha::Patrons->search( { flags => 1 } )->count;
}
if ( $step == 4 ) {
if ( $op eq 'add_validate_itemtype' ) {
my $description = $input->param('description');
my $itemtype_code = $input->param('itemtype');
$itemtype_code = uc($itemtype_code);
my $itemtype = Koha::ItemType->new(
{
itemtype => $itemtype_code,
description => $description,
}
);
eval { $itemtype->store; };
unless ($@) {
push @messages, { code => 'success_on_insert_itemtype' };
}
else {
push @messages, { code => 'error_on_insert_itemtype' };
}
}
$step++ if Koha::ItemTypes->count;
}
if ( $step == 5 ) {
if ( $op eq 'add_validate_circ_rule' ) {
#If no libraries exist then set the $branch value to *
my $branch = $input->param('branch') || '*';
my $type = $input->param('type');
my $branchcode = $input->param('branch');
my $categorycode = $input->param('categorycode');
my $itemtype = $input->param('itemtype');
my $maxissueqty = $input->param('maxissueqty');
my $issuelength = $input->param('issuelength');
my $lengthunit = $input->param('lengthunit');
my $renewalsallowed = $input->param('renewalsallowed');
my $renewalperiod = $input->param('renewalperiod');
my $onshelfholds = $input->param('onshelfholds') || 0;
$maxissueqty =~ s/\s//g;
$maxissueqty = undef if $maxissueqty !~ /^\d+/;
$issuelength = $issuelength eq q{} ? undef : $issuelength;
my $params = {
branchcode => $branchcode,
categorycode => $categorycode,
itemtype => $itemtype,
renewalsallowed => $renewalsallowed,
renewalperiod => $renewalperiod,
issuelength => $issuelength,
lengthunit => $lengthunit,
onshelfholds => $onshelfholds,
};
my $issuingrule = Koha::IssuingRule->new($params);
eval { $issuingrule->store; };
if ($@) {
push @messages, { code => 'error_on_insert_circ_rule' };
} else {
eval {
Koha::CirculationRules->set_rules(
{
categorycode => $categorycode,
itemtype => $itemtype,
branchcode => $branchcode,
rules => {
maxissueqty => $maxissueqty,
}
}
);
};
unless ($@) {
push @messages, { code => 'success_on_insert_circ_rule' };
}
else {
push @messages, { code => 'error_on_insert_circ_rule' };
}
}
}
$step++ if Koha::IssuingRules->count;
}
my $libraries = Koha::Libraries->search( {}, { order_by => ['branchcode'] }, );
$template_params->{libraries} = $libraries;
if ( $step > 5 ) {
$template_params->{all_done} = 1; # If step 5 is complete, we are done!
$step = 5;
}
#Getting the appropriate template to display to the user
my ( $template, $loggedinuser );
( $template, $loggedinuser, $cookie ) = C4::InstallAuth::get_template_and_user(
{
template_name => "onboarding/onboardingstep${step}.tt",
query => $input,
type => "intranet",
authnotrequired => 0,
debug => 1,
}
);
$template_params->{messages} = \@messages;
my $categories = Koha::Patron::Categories->search();
$template_params->{categories} = $categories;
my $itemtypes = Koha::ItemTypes->search();
$template_params->{itemtypes} = $itemtypes;
$template->param(%$template_params);
output_html_with_http_headers $input, $cookie, $template->output;