[Koha-patches] [PATCH 1/1] Bug 7303: Adds unicity for budget and fund
Jonathan Druart
jonathan.druart at biblibre.com
Thu Feb 16 13:07:30 CET 2012
This patch adds a unique key on fields:
aqbudgets.budget_name
aqbudgets.budget_code
aqbudgetperiods.budget_period_description
To test, try to:
- create 2 budgets with same description
- create 2 funds with same name
- create 2 funds with same code
All of these cases should be generate an error
---
admin/aqbudgetperiods.pl | 30 ++++++++++++--------
admin/aqbudgets.pl | 8 ++++-
installer/data/mysql/kohastructure.sql | 13 +++++---
installer/data/mysql/updatedatabase.pl | 25 ++++++++++++++++
.../prog/en/modules/admin/aqbudgetperiods.tt | 6 ++++
.../prog/en/modules/admin/aqbudgets.tt | 6 ++++
6 files changed, 69 insertions(+), 19 deletions(-)
diff --git a/admin/aqbudgetperiods.pl b/admin/aqbudgetperiods.pl
index 64b333a..5bda84a 100755
--- a/admin/aqbudgetperiods.pl
+++ b/admin/aqbudgetperiods.pl
@@ -69,8 +69,8 @@ my $budget_period_id = $input->param('budget_period_id');
my $op = $input->param('op')||"else";
my $budget_period_hashref= $input->Vars;
-#my $sort1_authcat = $input->param('sort1_authcat');
-#my $sort2_authcat = $input->param('sort2_authcat');
+
+my $sql_error;
my $pagesize = 20;
$searchfield =~ s/\,//g;
@@ -140,15 +140,18 @@ if ( $op eq 'add_form' ) {
elsif ( $op eq 'add_validate' ) {
## add or modify a budget period (confirmation)
- ## update budget period data
- if ( $budget_period_id ne '' ) {
- $$budget_period_hashref{$_}||=0 for qw(budget_period_active budget_period_locked);
- my $status=ModBudgetPeriod($budget_period_hashref);
- }
- else { # ELSE ITS AN ADD
- my $budget_period_id=AddBudgetPeriod($budget_period_hashref);
- }
- $op='else';
+ ## update budget period data
+ my $r;
+ if ( $budget_period_id ne '' ) {
+ $$budget_period_hashref{$_}||=0 for qw(budget_period_active budget_period_locked);
+ $r = ModBudgetPeriod($budget_period_hashref);
+ }
+ else { # ELSE ITS AN ADD
+ $r = AddBudgetPeriod($budget_period_hashref);
+ }
+
+ $sql_error = 1 unless $r;
+ $op='else';
}
#--------------------------------------------------
@@ -267,5 +270,8 @@ elsif ( $op eq 'duplicate_budget' ){
pagination_bar => pagination_bar("aqbudgetperiods.pl",getnbpages(scalar(@$results),$pagesize),$page),
);
-$template->param($op=>1);
+$template->param(
+ $op => 1,
+ sql_error => $sql_error,
+);
output_html_with_http_headers $input, $cookie, $template->output;
diff --git a/admin/aqbudgets.pl b/admin/aqbudgets.pl
index db99759..21d3b1e 100755
--- a/admin/aqbudgets.pl
+++ b/admin/aqbudgets.pl
@@ -40,6 +40,7 @@ use C4::Debug;
my $input = new CGI;
my $dbh = C4::Context->dbh;
+my $sql_error;
my ($template, $borrowernumber, $cookie, $staffflags ) = get_template_and_user(
{ template_name => "admin/aqbudgets.tmpl",
@@ -217,11 +218,13 @@ if ($op eq 'add_form') {
if ( $op eq 'delete_confirmed' ) {
my $rc = DelBudget($budget_id);
}elsif( $op eq 'add_validate' ) {
+ my $r;
if ( defined $$budget_hash{budget_id} ) {
- ModBudget( $budget_hash );
+ $r = ModBudget( $budget_hash );
} else {
- AddBudget( $budget_hash );
+ $r = AddBudget( $budget_hash );
}
+ $sql_error = 1 unless $r;
}
my $branches = GetBranches();
$template->param(
@@ -332,6 +335,7 @@ if ($op eq 'add_form') {
period_alloc_total => $num->format_price($period_alloc_total),
base_spent_total => $num->format_price($base_spent_total),
branchloop => \@branchloop2,
+ sql_error => $sql_error,
);
} #---- END $OP eq DEFAULT
diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql
index 37113c2..f1ca330 100644
--- a/installer/data/mysql/kohastructure.sql
+++ b/installer/data/mysql/kohastructure.sql
@@ -2510,8 +2510,8 @@ DROP TABLE IF EXISTS `aqbudgets`;
CREATE TABLE `aqbudgets` (
`budget_id` int(11) NOT NULL auto_increment,
`budget_parent_id` int(11) default NULL,
- `budget_code` varchar(30) default NULL,
- `budget_name` varchar(80) default NULL,
+ `budget_code` varchar(30) NOT NULL,
+ `budget_name` varchar(80) NOT NULL,
`budget_branchcode` varchar(10) default NULL,
`budget_amount` decimal(28,6) NULL default '0.00',
`budget_encumb` decimal(28,6) NULL default '0.00',
@@ -2523,7 +2523,9 @@ CREATE TABLE `aqbudgets` (
`sort2_authcat` varchar(80) default NULL,
`budget_owner_id` int(11) default NULL,
`budget_permission` int(1) default '0',
- PRIMARY KEY (`budget_id`)
+ PRIMARY KEY (`budget_id`),
+ UNIQUE KEY `uniq_budget_name_aqbudgets` (`budget_name`),
+ UNIQUE KEY `uniq_budget_code_aqbudgets` (`budget_code`
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
@@ -2538,12 +2540,13 @@ CREATE TABLE `aqbudgetperiods` (
`budget_period_startdate` date NOT NULL,
`budget_period_enddate` date NOT NULL,
`budget_period_active` tinyint(1) default '0',
- `budget_period_description` mediumtext,
+ `budget_period_description` varchar(255) NOT NULL,
`budget_period_total` decimal(28,6),
`budget_period_locked` tinyint(1) default NULL,
`sort1_authcat` varchar(10) default NULL,
`sort2_authcat` varchar(10) default NULL,
- PRIMARY KEY (`budget_period_id`)
+ PRIMARY KEY (`budget_period_id`),
+ UNIQUE KEY `uniq_aqbudgetperiods` (`budget_period_description`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl
index 0ef0b1f..bb26522 100755
--- a/installer/data/mysql/updatedatabase.pl
+++ b/installer/data/mysql/updatedatabase.pl
@@ -4684,6 +4684,31 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
SetVersion($DBversion);
}
+$DBversion = "3.07.00.XXX";
+if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
+ $dbh->do(q{
+ ALTER TABLE `aqbudgetperiods` MODIFY COLUMN `budget_period_description` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
+ });
+ $dbh->do(q{
+ ALTER TABLE `aqbudgetperiods` ADD UNIQUE ( budget_period_description);
+ });
+ $dbh->do(q{
+ ALTER TABLE `aqbudgets` MODIFY COLUMN `budget_name` VARCHAR(80) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
+ });
+ $dbh->do(q{
+ ALTER TABLE `aqbudgets` MODIFY COLUMN `budget_code` VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
+ });
+ $dbh->do(q{
+ ALTER TABLE `aqbudgets` ADD UNIQUE ( budget_name );
+ });
+ $dbh->do(q{
+ ALTER TABLE `aqbudgets` ADD UNIQUE ( budget_code );
+ });
+
+ print "Upgrade to $DBversion done (aqbudgets and aqbudgetperiods. Unique constraint on field.)\n";
+ SetVersion ($DBversion);
+}
+
=head1 FUNCTIONS
=head2 DropAllForeignKeys($table)
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt
index 29dcf7f..21af3f0 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt
@@ -149,6 +149,12 @@
<div id="yui-main">
<div class="yui-b">
+[% IF ( sql_error ) %]
+ <div class="error">
+ This budget name already exists
+ </div>
+[% END %]
+
[% INCLUDE 'budgets-admin-toolbar.inc' %]
[% IF ( duplicate_form ) %]
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tt
index 12a70bc..bfbc923 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tt
@@ -155,6 +155,12 @@
<div id="yui-main">
<div class="yui-b" id="content">
+[% IF ( sql_error ) %]
+ <div class="error">
+ This fund name (or code) already exists
+ </div>
+[% END %]
+
[% UNLESS ( delete_confirm ) %][% INCLUDE 'budgets-admin-toolbar.inc' %][% END %]
[% IF ( else ) %]
--
1.7.7.3
More information about the Koha-patches
mailing list