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

(-)a/C4/Items.pm (-30 lines)
Lines 2071-2077 sub _koha_new_item { Link Here
2071
    my $dbh=C4::Context->dbh;  
2071
    my $dbh=C4::Context->dbh;  
2072
    my $error;
2072
    my $error;
2073
    $item->{permanent_location} //= $item->{location};
2073
    $item->{permanent_location} //= $item->{location};
2074
    _mod_item_dates( $item );
2075
    my $query =
2074
    my $query =
2076
           "INSERT INTO items SET
2075
           "INSERT INTO items SET
2077
            biblionumber        = ?,
2076
            biblionumber        = ?,
Lines 2335-2341 sub _koha_modify_item { Link Here
2335
2334
2336
    my $query = "UPDATE items SET ";
2335
    my $query = "UPDATE items SET ";
2337
    my @bind;
2336
    my @bind;
2338
    _mod_item_dates( $item );
2339
    for my $key ( keys %$item ) {
2337
    for my $key ( keys %$item ) {
2340
        next if ( $key eq 'itemnumber' );
2338
        next if ( $key eq 'itemnumber' );
2341
        $query.="$key=?,";
2339
        $query.="$key=?,";
Lines 2353-2386 sub _koha_modify_item { Link Here
2353
    return ($item->{'itemnumber'},$error);
2351
    return ($item->{'itemnumber'},$error);
2354
}
2352
}
2355
2353
2356
sub _mod_item_dates { # date formatting for date fields in item hash
2357
    my ( $item ) = @_;
2358
    return if !$item || ref($item) ne 'HASH';
2359
2360
    my @keys = grep
2361
        { $_ =~ /^onloan$|^date|date$|datetime$/ }
2362
        keys %$item;
2363
    # Incl. dateaccessioned,replacementpricedate,datelastborrowed,datelastseen
2364
    # NOTE: We do not (yet) have items fields ending with datetime
2365
    # Fields with _on$ have been handled already
2366
2367
    foreach my $key ( @keys ) {
2368
        next if !defined $item->{$key}; # skip undefs
2369
        my $dt = eval { dt_from_string( $item->{$key} ) };
2370
            # eval: dt_from_string will die on us if we pass illegal dates
2371
2372
        my $newstr;
2373
        if( defined $dt  && ref($dt) eq 'DateTime' ) {
2374
            if( $key =~ /datetime/ ) {
2375
                $newstr = DateTime::Format::MySQL->format_datetime($dt);
2376
            } else {
2377
                $newstr = DateTime::Format::MySQL->format_date($dt);
2378
            }
2379
        }
2380
        $item->{$key} = $newstr; # might be undef to clear garbage
2381
    }
2382
}
2383
2384
=head2 _koha_delete_item
2354
=head2 _koha_delete_item
2385
2355
2386
  _koha_delete_item( $itemnum );
2356
  _koha_delete_item( $itemnum );
(-)a/C4/Members.pm (-1 / +2 lines)
Lines 499-505 sub AddMember { Link Here
499
499
500
    if ( C4::Context->preference("autoMemberNum") ) {
500
    if ( C4::Context->preference("autoMemberNum") ) {
501
        if ( not exists $data{cardnumber} or not defined $data{cardnumber} or $data{cardnumber} eq '' ) {
501
        if ( not exists $data{cardnumber} or not defined $data{cardnumber} or $data{cardnumber} eq '' ) {
502
            $data{cardnumber} = fixup_cardnumber( $data{cardnumber}, C4::Context->userenv->{'branch'}, $data{categorycode} );
502
            my $user_branch = C4::Context->userenv ? C4::Context->userenv->{'branch'} : q{};
503
            $data{cardnumber} = fixup_cardnumber( $data{cardnumber}, $user_branch, $data{categorycode} );
503
        }
504
        }
504
    }
505
    }
505
506
(-)a/t/db_dependent/Items.t (-52 / +1 lines)
Lines 26-32 use Koha::Library; Link Here
26
use t::lib::Mocks;
26
use t::lib::Mocks;
27
use t::lib::TestBuilder;
27
use t::lib::TestBuilder;
28
28
29
use Test::More tests => 11;
29
use Test::More tests => 10;
30
30
31
use Test::Warn;
31
use Test::Warn;
32
32
Lines 732-787 subtest 'C4::Items::_build_default_values_for_mod_marc' => sub { Link Here
732
    $schema->storage->txn_rollback;
732
    $schema->storage->txn_rollback;
733
};
733
};
734
734
735
subtest '_mod_item_dates' => sub {
736
    plan tests => 11;
737
738
    is( C4::Items::_mod_item_dates(), undef, 'Call without parameters' );
739
    is( C4::Items::_mod_item_dates(1), undef, 'Call without hashref' );
740
741
    my $orgitem;
742
    my $item = {
743
        itemcallnumber  => 'V II 149 1963',
744
        barcode         => '109304',
745
    };
746
    $orgitem = { %$item };
747
    C4::Items::_mod_item_dates($item);
748
    is_deeply( $item, $orgitem, 'No dates passed to _mod_item_dates' );
749
750
    # add two correct dates
751
    t::lib::Mocks::mock_preference('dateformat', 'us');
752
    $item->{dateaccessioned} = '01/31/2016';
753
    $item->{onloan} =  $item->{dateaccessioned};
754
    $orgitem = { %$item };
755
    C4::Items::_mod_item_dates($item);
756
    is( $item->{dateaccessioned}, '2016-01-31', 'dateaccessioned is fine' );
757
    is( $item->{onloan}, '2016-01-31', 'onloan is fine too' );
758
759
760
    # add some invalid dates
761
    $item->{notexistingcolumndate} = '13/1/2015'; # wrong format
762
    $item->{anotherdate} = 'tralala'; # even worse
763
    $item->{myzerodate} = '0000-00-00'; # wrong too
764
    C4::Items::_mod_item_dates($item);
765
    is( $item->{notexistingcolumndate}, undef, 'Invalid date became NULL' );
766
    is( $item->{anotherdate}, undef, 'Second invalid date became NULL too' );
767
    is( $item->{myzerodate}, undef, '0000-00-00 became NULL too' );
768
769
    # check if itemlost_on was not touched
770
    $item->{itemlost_on} = '12345678';
771
    $item->{withdrawn_on} = '12/31/2015 23:59:00';
772
    $orgitem = { %$item };
773
    C4::Items::_mod_item_dates($item);
774
    is_deeply( $item, $orgitem, 'Colums with _on are not touched' );
775
776
    t::lib::Mocks::mock_preference('dateformat', 'metric');
777
    $item->{dateaccessioned} = '01/31/2016'; #wrong
778
    $item->{yetanotherdatetime} = '20/01/2016 13:58:00'; #okay
779
    C4::Items::_mod_item_dates($item);
780
    is( $item->{dateaccessioned}, undef, 'dateaccessioned wrong format' );
781
    is( $item->{yetanotherdatetime}, '2016-01-20 13:58:00',
782
        'yetanotherdatetime is ok' );
783
};
784
785
# Helper method to set up a Biblio.
735
# Helper method to set up a Biblio.
786
sub get_biblio {
736
sub get_biblio {
787
    my ( $frameworkcode ) = @_;
737
    my ( $frameworkcode ) = @_;
788
- 

Return to bug 17917