Bugzilla – Attachment 5806 Details for
Bug 6963
When creating a new order, the item isn't added if its barcode already exists in the items table.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
[SIGNED-OFF] Corrects a problem when a new order is created with a duplicate barcode.
SIGNED-OFF-Corrects-a-problem-when-a-new-order-is-.patch (text/plain), 6.49 KB, created by
Katrin Fischer
on 2011-10-08 20:22:51 UTC
(
hide
)
Description:
[SIGNED-OFF] Corrects a problem when a new order is created with a duplicate barcode.
Filename:
MIME Type:
Creator:
Katrin Fischer
Created:
2011-10-08 20:22:51 UTC
Size:
6.49 KB
patch
obsolete
>From 43fbaca4220716884dd5e441a697ff44ee28e7d7 Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?Fr=C3=A9d=C3=A9rick=20Capovilla?= <frederick.capovilla@libeo.com> >Date: Mon, 3 Oct 2011 15:00:05 -0400 >Subject: [PATCH] [SIGNED-OFF] Corrects a problem when a new order is created with a duplicate barcode. > >If the AcqCreateItem preference is set to "ordering" and the barcode for >the new item is already in use, no error is returned, but an invalid >itemnumber is saved in the aqorders_items table and the item is never >created. > >This patch adds a duplicate barcode verification in neworderempty.pl >_koha_add_item is also modified so it won't return an invalid ID when >an item can't be added. > >http://bugs.koha-community.org/show_bug.cgi?id=6963 > >Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de> >1) Set AcqCreateItem on 'on order' >2) Make sure barcode was available in my ACQ framework >3) Create a new basket, first order, barcode 'barc' >4) create a second order in that basket, tried again with 'barc' >-> Alert message informs about the duplicate barcode >5) Change the barcode to be something else and saved >New record with item should be correctly created >--- > C4/Items.pm | 7 ++- > acqui/check_duplicate_barcode_ajax.pl | 55 ++++++++++++++++++++ > .../prog/en/modules/acqui/neworderempty.tt | 46 +++++++++++++++- > 3 files changed, 104 insertions(+), 4 deletions(-) > create mode 100755 acqui/check_duplicate_barcode_ajax.pl > >diff --git a/C4/Items.pm b/C4/Items.pm >index 2e85130..2ec96de 100644 >--- a/C4/Items.pm >+++ b/C4/Items.pm >@@ -2042,10 +2042,15 @@ sub _koha_new_item { > $item->{'copynumber'}, > $item->{'stocknumber'}, > ); >- my $itemnumber = $dbh->{'mysql_insertid'}; >+ >+ my $itemnumber; > if ( defined $sth->errstr ) { > $error.="ERROR in _koha_new_item $query".$sth->errstr; > } >+ else { >+ $itemnumber = $dbh->{'mysql_insertid'}; >+ } >+ > return ( $itemnumber, $error ); > } > >diff --git a/acqui/check_duplicate_barcode_ajax.pl b/acqui/check_duplicate_barcode_ajax.pl >new file mode 100755 >index 0000000..fe50b6d >--- /dev/null >+++ b/acqui/check_duplicate_barcode_ajax.pl >@@ -0,0 +1,55 @@ >+#!/usr/bin/perl >+ >+# Frédérick Capovilla, 2011 - Libéo >+# >+# This file is part of Koha. >+# >+# 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 2 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, write to the Free Software Foundation, Inc., >+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. >+ >+use strict; >+#use warnings; FIXME - Bug 2505 >+use CGI; >+use CGI::Cookie; >+use JSON; >+use C4::Auth; >+use C4::Items; >+use C4::Context; >+ >+my $input = new CGI; >+print $input->header('application/json'); >+ >+# Check the user's permissions >+my %cookies = fetch CGI::Cookie; >+my $sessid = $cookies{'CGISESSID'}->value || $input->param('CGISESSID'); >+my ($auth_status, $auth_sessid) = C4::Auth::check_cookie_auth($sessid, {acquisition => 'order_manage'}); >+if ($auth_status ne "ok") { >+ print to_json({status => 'UNAUTHORIZED'}); >+ exit 0; >+} >+ >+my $json; >+ >+#Check if the barcodes already exist. >+my @barcodes = $input->param('barcodes'); >+foreach my $barcode (@barcodes) { >+ my $existing_itemnumber = GetItemnumberFromBarcode($barcode); >+ if ($existing_itemnumber) { >+ $json->{status} = "DUPLICATES"; >+ push @{$json->{barcodes}}, $barcode; >+ } >+} >+ >+$json->{status} = 'OK' unless defined $json->{status}; >+print to_json($json); >+ >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt >index 39e9ca2..09a211b 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt >@@ -46,26 +46,66 @@ function Check(ff) { > } > > if ( ff.field_value ) { >+ var barcodes = []; > var empty_item_mandatory = 0; > for (i = 0; i < ff.field_value.length; i++) { > //alert("i = " + i + " => " + ff.kohafield[i] ); > if (ff.field_value[i].value.length == 0 && ff.mandatory[i].value == 1) { > empty_item_mandatory++; > } >+ if(ff.subfield[i].value == 'p') { >+ barcodes.push(ff.field_value[i].value); >+ } > } > if (empty_item_mandatory > 0) { > ok = 1; > _alertString += > "\n- " + empty_item_mandatory + _(" item mandatory fields empty"); > } >+ >+ // Check for duplicate barcodes in the form >+ barcodes = barcodes.sort(); >+ for(var i=0; i<barcodes.length-1; i++) { >+ if(barcodes[i] == barcodes[i+1]) { >+ ok = 1; >+ _alertString += "\n- " + _("The barcode ") + barcodes[i] + _(" is used more than once in the form. Every barcode must be unique"); >+ } >+ } >+ >+ // Check for duplicate barcodes in the database via an ajax call >+ $.ajax({ >+ url: "/cgi-bin/koha/acqui/check_duplicate_barcode_ajax.pl", >+ async:false, >+ method: "post", >+ data: {barcodes : barcodes}, >+ dataType: 'json', >+ >+ error: function(xhr) { >+ alert("Error: \n" + xhr.responseText); >+ }, >+ success: function(json) { >+ switch(json.status) { >+ case 'UNAUTHORIZED': >+ ok = 1; >+ _alertString += "\n- " + _("Error: Duplicate barcode verification failed. Insufficient user permissions."); >+ break; >+ case 'DUPLICATES': >+ ok = 1; >+ $.each(json.barcodes, function(index, barcode) { >+ _alertString += "\n- " + _("The barcode ") + barcode + _(" already exists in the database"); >+ }); >+ break; >+ } >+ }, >+ }); > } > >-if (ok) { >+ if (ok) { > alert(_alertString); >- return false; >+ return false; > } > >-ff.submit(); >+ ff.submit(); > > } > >-- >1.7.4.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 6963
:
5682
|
5806
|
5838
|
5944
|
5945
|
5946
|
5947
|
5954