Bug 29689: (bug 28445 follow-up) Fix AutoBarcode=hbyymmincr

The selector is not correct, we must to not rely on the number.
This patch fixes a regression caused by bug 28445, but also a
long-standing bug.

* Regression:
The barcode plugin is broken is autoBarcode=<branchcode>yymm0001
There is a JS error in the console:
  Uncaught TypeError: form.field_value is undefined
      Focustag_952_subfield_p_878344
      Focustag_952_subfield_p_878344_handler
      jQuery 11
      BindEventstag_952_subfield_p_878344

* Long standing bug:
If there are several item forms on the same page, the branchcode is not
correctly retrieved. For instance on the "Serial edition" page there are
2 item forms, the homebranch that is used by the barcode plugin will be
the one from the last form.

Test plan:
* regression
Set autoBarcode=<branchcode>yymm0001
Catalogue a new item, click into the barcode input
Notice that without this patch you get a JS error in the console

* long standing bug
Create a new subscription, select "Create an item record when receiving this serial".
Receive a serial
Open the 2 item forms ("Click to add item")
Select 2 different home library and click the barcode inputs.
The prefix (branchcode) should be correct with this patch applied.

QA Note: it would be way easier if all add item forms were using the new
methods, it could be:
  let loc = document.getElementsByName('items.homebranch')[0].value;
Yes, that's all!

Signed-off-by: Hayley Pelham <hayleypelham@catalyst.net.nz>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
This commit is contained in:
Jonathan Druart 2021-12-14 12:08:13 +01:00 committed by Fridolin Somers
parent 3d1556dafa
commit 0c8496a85a
5 changed files with 11 additions and 20 deletions

View File

@ -56,23 +56,17 @@ sub get_barcode {
$nextnum++;
$nextnum = sprintf("%0*d", "4",$nextnum);
$nextnum = $year . $month . $nextnum;
my $scr = "
var form = document.getElementById('f');
if ( !form ) {
form = document.getElementById('serials_edit');
my $scr = qq~
let elt = \$("#"+id);
let homebranch = elt.parents('fieldset.rows:first')
.find('input[name="kohafield"][value="items.homebranch"]')
.siblings("select")
.val();
if ( \$(elt).val() == '' ) {
\$(elt).val(homebranch + '$nextnum');
}
if ( !form ) {
form = document.getElementById('Aform');
}
for (i=0 ; i<form.field_value.length ; i++) {
if (form.tag[i].value == '$args->{loctag}' && form.subfield[i].value == '$args->{locsubfield}') {
fnum = i;
}
}
if (\$('#' + id).val() == '') {
\$('#' + id).val(form.field_value[fnum].value + '$nextnum');
}
";
~;
return $nextnum, $scr;
}

View File

@ -37,7 +37,6 @@ my $builder = sub {
# find today's date
($args{year}, $args{mon}, $args{day}) = split('-', output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }));
($args{tag},$args{subfield}) = GetMarcFromKohaField( "items.barcode" );
($args{loctag},$args{locsubfield}) = GetMarcFromKohaField( "items.homebranch" );
my $nextnum;
my $scr;

View File

@ -38,7 +38,6 @@ my $builder = sub {
# find today's date
($args{year}, $args{mon}, $args{day}) = split('-', output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }));
($args{tag},$args{subfield}) = GetMarcFromKohaField( "items.barcode" );
($args{loctag},$args{locsubfield}) = GetMarcFromKohaField( "items.homebranch" );
my $nextnum;
my $scr;

View File

@ -148,6 +148,7 @@
<input type="hidden" name="items.more_subfields_xml" value="[% subfield.subfield | html %]" />
[% END %]
<input type="hidden" name="tag" value="[% subfield.tag | html %]" />
<input type="hidden" name="kohafield" value="[% subfield.kohafield | html %]" /> [%# We should not need that but all item forms are not rewritten yet %]
<input type="hidden" name="subfield" value="[% subfield.subfield | html %]" />
<input type="hidden" name="mandatory" value="[% subfield.mandatory | html %]" />
<input type="hidden" name="important" value="[% subfield.important | html %]" />

View File

@ -61,8 +61,6 @@ my %args = (
day => '30',
tag => '952',
subfield => 'p',
loctag => '952',
locsubfield => 'a'
);
my ($nextnum, $scr) = C4::Barcodes::ValueBuilder::incremental::get_barcode(\%args);