View | Details | Raw Unified | Return to bug 7412
Collapse All | Expand All

(-)a/cataloguing/additem.pl (-15 / +111 lines)
Lines 33-38 use C4::ClassSource; Link Here
33
use C4::Dates;
33
use C4::Dates;
34
use List::MoreUtils qw/any/;
34
use List::MoreUtils qw/any/;
35
use C4::Search;
35
use C4::Search;
36
use Storable qw(thaw freeze);
37
use URI::Escape;
38
36
39
37
use MARC::File::XML;
40
use MARC::File::XML;
38
use URI::Escape;
41
use URI::Escape;
Lines 277-282 sub generate_subfield_form { Link Here
277
        return \%subfield_data;
280
        return \%subfield_data;
278
}
281
}
279
282
283
# Removes some subfields when prefilling items
284
# This function will remove any subfield that is not in the SubfieldsToUseWhenPrefill syspref
285
sub removeFieldsForPrefill {
286
287
    my $item = shift;
288
289
    # Getting item tag
290
    my ($tag, $subtag) = GetMarcFromKohaField("items.barcode", '');
291
292
    # Getting list of subfields to keep
293
    my $subfieldsToUseWhenPrefill = C4::Context->preference('SubfieldsToUseWhenPrefill');
294
295
    # Removing subfields that are not in the syspref
296
    if ($tag && $subfieldsToUseWhenPrefill) {
297
        my $field = $item->field($tag);
298
        my @subfieldsToUse= split(/ /,$subfieldsToUseWhenPrefill);
299
        foreach my $subfield ($field->subfields()) {
300
            if (!grep { $subfield->[0] eq $_ } @subfieldsToUse) {
301
                $field->delete_subfield(code => $subfield->[0]);
302
            }
303
304
        }
305
    }
306
307
    return $item;
308
309
}
280
310
281
my $input        = new CGI;
311
my $input        = new CGI;
282
my $error        = $input->param('error');
312
my $error        = $input->param('error');
Lines 315-323 my $oldrecord = TransformMarcToKoha($dbh,$record); Link Here
315
my $itemrecord;
345
my $itemrecord;
316
my $nextop="additem";
346
my $nextop="additem";
317
my @errors; # store errors found while checking data BEFORE saving item.
347
my @errors; # store errors found while checking data BEFORE saving item.
348
349
# Getting last created item cookie
350
my $prefillitem = C4::Context->preference('PrefillItem');
351
my $justaddeditem;
352
my $cookieitemrecord;
353
if ($prefillitem) {
354
    my $lastitemcookie = $input->cookie('LastCreatedItem');
355
    if ($lastitemcookie) {
356
    $lastitemcookie = uri_unescape($lastitemcookie);
357
    if ( thaw($lastitemcookie) ) {
358
        $cookieitemrecord = thaw($lastitemcookie) ;
359
        $cookieitemrecord = removeFieldsForPrefill($cookieitemrecord);
360
    }
361
    }
362
}
363
318
#-------------------------------------------------------------------------------
364
#-------------------------------------------------------------------------------
319
if ($op eq "additem") {
365
if ($op eq "additem") {
320
#-------------------------------------------------------------------------------
366
367
    #-------------------------------------------------------------------------------
321
    # rebuild
368
    # rebuild
322
    my @tags      = $input->param('tag');
369
    my @tags      = $input->param('tag');
323
    my @subfields = $input->param('subfield');
370
    my @subfields = $input->param('subfield');
Lines 334-359 if ($op eq "additem") { Link Here
334
    my $add_multiple_copies_submit = $input->param('add_multiple_copies_submit');
381
    my $add_multiple_copies_submit = $input->param('add_multiple_copies_submit');
335
    my $number_of_copies           = $input->param('number_of_copies');
382
    my $number_of_copies           = $input->param('number_of_copies');
336
383
384
    # This is a bit tricky : if there is a cookie for the last created item and
385
    # we just added an item, the cookie value is not correct yet (it will be updated
386
    # next page). To prevent the form from being filled with outdated values, we
387
    # force the use of "add and duplicate" feature, so the form will be filled with
388
    # correct values.
389
    $add_duplicate_submit = 1 if ($prefillitem);
390
    $justaddeditem = 1;
391
392
    # if autoBarcode is set to 'incremental', calculate barcode...
393
    # NOTE: This code is subject to change in 3.2 with the implemenation of ajax based autobarcode code
394
    # NOTE: 'incremental' is the ONLY autoBarcode option available to those not using javascript
395
    if ( C4::Context->preference('autoBarcode') eq 'incremental' ) {
396
        my ( $tagfield, $tagsubfield ) = &GetMarcFromKohaField( "items.barcode", $frameworkcode );
397
        unless ( $record->field($tagfield)->subfield($tagsubfield) ) {
398
            my $sth_barcode = $dbh->prepare("select max(abs(barcode)) from items");
399
            $sth_barcode->execute;
400
            my ($newbarcode) = $sth_barcode->fetchrow;
401
            $newbarcode++;
402
403
            # OK, we have the new barcode, now create the entry in MARC record
404
            my $fieldItem = $record->field($tagfield);
405
            $record->delete_field($fieldItem);
406
            $fieldItem->add_subfields( $tagsubfield => $newbarcode );
407
            $record->insert_fields_ordered($fieldItem);
408
        }
409
    }
410
411
337
    if (C4::Context->preference('autoBarcode') eq 'incremental') {
412
    if (C4::Context->preference('autoBarcode') eq 'incremental') {
338
        $record = _increment_barcode($record, $frameworkcode);
413
        $record = _increment_barcode($record, $frameworkcode);
339
    }
414
    }
340
415
341
    my $addedolditem = TransformMarcToKoha($dbh,$record);
416
    my $addedolditem = TransformMarcToKoha( $dbh, $record );
342
417
343
    # If we have to add or add & duplicate, we add the item
418
    # If we have to add or add & duplicate, we add the item
344
    if ($add_submit || $add_duplicate_submit) {
419
    if ( $add_submit || $add_duplicate_submit ) {
345
	# check for item barcode # being unique
420
346
	my $exist_itemnumber = get_item_from_barcode($addedolditem->{'barcode'});
421
        # check for item barcode # being unique
347
	push @errors,"barcode_not_unique" if($exist_itemnumber);
422
        my $exist_itemnumber = get_item_from_barcode( $addedolditem->{'barcode'} );
348
	# if barcode exists, don't create, but report The problem.
423
        push @errors, "barcode_not_unique" if ($exist_itemnumber);
349
    unless ($exist_itemnumber) {
424
350
	    my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = AddItemFromMarc($record,$biblionumber);
425
        # if barcode exists, don't create, but report The problem.
351
        set_item_default_location($oldbibitemnum);
426
        unless ($exist_itemnumber) {
352
    }
427
            my ( $oldbiblionumber, $oldbibnum, $oldbibitemnum ) = AddItemFromMarc( $record, $biblionumber );
353
	$nextop = "additem";
428
            set_item_default_location($oldbibitemnum);
354
	if ($exist_itemnumber) {
429
355
	    $itemrecord = $record;
430
      # Pushing the last created item cookie back
356
	}
431
      if ($prefillitem && defined $record) {
432
                my $itemcookie = $input->cookie(
433
                    -name => 'LastCreatedItem',
434
                    # We uri_escape the whole freezed structure so we're sure we won't have any encoding problems
435
                    -value   => uri_escape( freeze( $record ) ),
436
                    -expires => ''
437
                );
438
439
        $cookie = ( $cookie, $itemcookie );
440
        }
441
442
        }
443
        $nextop = "additem";
444
        if ($exist_itemnumber) {
445
            $itemrecord = $record;
446
        }
357
    }
447
    }
358
448
359
    # If we have to add & duplicate
449
    # If we have to add & duplicate
Lines 370-375 if ($op eq "additem") { Link Here
370
            $fieldItem->delete_subfields($tagsubfield);
460
            $fieldItem->delete_subfields($tagsubfield);
371
            $itemrecord->insert_fields_ordered($fieldItem);
461
            $itemrecord->insert_fields_ordered($fieldItem);
372
        }
462
        }
463
    $itemrecord = removeFieldsForPrefill($itemrecord) if ($prefillitem);
373
    }
464
    }
374
465
375
    # If we have to add multiple copies
466
    # If we have to add multiple copies
Lines 693-698 if($itemrecord){ Link Here
693
            }
784
            }
694
    # and now we add fields that are empty
785
    # and now we add fields that are empty
695
786
787
# Using last created item if it exists
788
789
$itemrecord = $cookieitemrecord if ($prefillitem and not $justaddeditem and $op ne "edititem");
790
791
# We generate form, and fill with values if defined
696
foreach my $tag ( keys %{$tagslib}){
792
foreach my $tag ( keys %{$tagslib}){
697
    foreach my $subtag (keys %{$tagslib->{$tag}}){
793
    foreach my $subtag (keys %{$tagslib->{$tag}}){
698
        next if subfield_is_koha_internal_p($subtag);
794
        next if subfield_is_koha_internal_p($subtag);
(-)a/installer/data/mysql/sysprefs.sql (+2 lines)
Lines 375-377 INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ( Link Here
375
INSERT INTO systempreferences (variable,value,explanation,type) VALUES('EnableBorrowerFiles','0','If enabled, allows librarians to upload and attach arbitrary files to a borrower record.','YesNo');
375
INSERT INTO systempreferences (variable,value,explanation,type) VALUES('EnableBorrowerFiles','0','If enabled, allows librarians to upload and attach arbitrary files to a borrower record.','YesNo');
376
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UpdateTotalIssuesOnCirc','0','Whether to update the totalissues field in the biblio on each circ.',NULL,'YesNo');
376
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UpdateTotalIssuesOnCirc','0','Whether to update the totalissues field in the biblio on each circ.',NULL,'YesNo');
377
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('IntranetSlipPrinterJS','','Use this JavaScript for printing slips. Define at least function printThenClose(). For use e.g. with Firefox PlugIn jsPrintSetup, see http://jsprintsetup.mozdev.org/','','Free');
377
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('IntranetSlipPrinterJS','','Use this JavaScript for printing slips. Define at least function printThenClose(). For use e.g. with Firefox PlugIn jsPrintSetup, see http://jsprintsetup.mozdev.org/','','Free');
378
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('PrefillItem','0','When a new item is added, should it be prefilled with last created item values?','','YesNo');
379
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SubfieldsToUseWhenPrefill','','Define a list of subfields to use when prefilling items (separated by space)','','Free');
(-)a/installer/data/mysql/updatedatabase.pl (-2 / +12 lines)
Lines 5566-5571 if (C4::Context->preference("Version") < TransformToNum($DBversion)) { Link Here
5566
    SetVersion ($DBversion);
5566
    SetVersion ($DBversion);
5567
}
5567
}
5568
5568
5569
$DBversion = "3.09.00.XXX";
5570
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5571
    $dbh->do("
5572
    INSERT IGNORE INTO `systempreferences` (variable,value,explanation,options,type) VALUES('PrefillItem','0','When a new item is added, should it be prefilled with last created item values?','','YesNo');
5573
    ");
5574
    $dbh->do(
5575
    "INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('SubfieldsToUseWhenPrefill','','Define a list of subfields to use when prefilling items (separated by space)','','Free');
5576
    ");
5577
    print "Upgrade to $DBversion done (Adding PrefillItem and SubfieldsToUseWhenPrefill sysprefs)\n";
5578
    SetVersion($DBversion);
5579
}
5580
5569
=head1 FUNCTIONS
5581
=head1 FUNCTIONS
5570
5582
5571
=head2 TableExists($table)
5583
=head2 TableExists($table)
Lines 5588-5595 sub TableExists { Link Here
5588
Drop all foreign keys of the table $table
5600
Drop all foreign keys of the table $table
5589
5601
5590
=cut
5602
=cut
5591
5592
5593
sub DropAllForeignKeys {
5603
sub DropAllForeignKeys {
5594
    my ($table) = @_;
5604
    my ($table) = @_;
5595
    # get the table description
5605
    # get the table description
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref (-1 / +10 lines)
Lines 94-99 Cataloging: Link Here
94
                  annual: generated in the form &lt;year&gt;-0001, &lt;year&gt;-0002.
94
                  annual: generated in the form &lt;year&gt;-0001, &lt;year&gt;-0002.
95
                  hbyymmincr: generated in the form &lt;branchcode&gt;yymm0001.
95
                  hbyymmincr: generated in the form &lt;branchcode&gt;yymm0001.
96
                  "OFF": not generated automatically.
96
                  "OFF": not generated automatically.
97
        -
98
            - When a new item is added, should it be prefilled with last created item values?
99
            - pref: PrefillItem
100
              choices:
101
                  yes: the new item is prefilled with last created item values
102
                  no: the new item is not prefilled with last created item values
103
        -
104
            - Define a list of subfields to use when prefilling items (separated by space)
105
            - pref: SubfieldsToUseWhenPrefill
106
97
    Display:
107
    Display:
98
        -
108
        -
99
            - 'Separate multiple displayed authors, series or subjects with '
109
            - 'Separate multiple displayed authors, series or subjects with '
100
- 

Return to bug 7412