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

(-)a/Koha/Acquisition/Bookseller.pm (-8 / +6 lines)
Lines 111-125 sub insert { Link Here
111
    return $self;
111
    return $self;
112
}
112
}
113
113
114
sub merge_to {
114
sub merge_with {
115
    my ($self, $mergeto) = @_;
115
    my ($self, $booksellerid) = @_;
116
116
117
    my $error = '';
118
    my $result = {};
117
    my $result = {};
119
118
120
    unless (my $to_bookseller = Koha::Acquisition::Bookseller->fetch({id => $mergeto})) {
119
    unless (Koha::Acquisition::Bookseller->fetch({id => $booksellerid})) {
121
        $error = "Unknown target bookseller number: $mergeto";
120
        die("Unknown target bookseller number: $booksellerid");
122
        return ($error, {});
123
    }
121
    }
124
122
125
    foreach my $entity (qw(Aqbasketgroup Aqbasket Aqcontract Aqcontact Aqinvoice Deleteditem Item Subscription)) {
123
    foreach my $entity (qw(Aqbasketgroup Aqbasket Aqcontract Aqcontact Aqinvoice Deleteditem Item Subscription)) {
Lines 129-140 sub merge_to { Link Here
129
        $rs = $rs->search({$foreign_key => $self->{id} });
127
        $rs = $rs->search({$foreign_key => $self->{id} });
130
128
131
        while (my $e = $rs->next) {
129
        while (my $e = $rs->next) {
132
            $e->set_column($foreign_key, $mergeto);
130
            $e->set_column($foreign_key, $booksellerid);
133
            $e->update();
131
            $e->update();
134
            push @{ $result->{$entity} }, $e->id();
132
            push @{ $result->{$entity} }, $e->id();
135
        }
133
        }
136
    }
134
    }
137
    return ($error, $result);
135
    return $result;
138
}
136
}
139
137
140
# TODO Move code from ModBookseller
138
# TODO Move code from ModBookseller
(-)a/misc/migration_tools/merge_booksellers.pl (-5 / +1 lines)
Lines 50-60 $schema->storage->txn_begin; Link Here
50
my $from_bookseller = Koha::Acquisition::Bookseller->fetch({id => $mergefrom});
50
my $from_bookseller = Koha::Acquisition::Bookseller->fetch({id => $mergefrom});
51
die "Unknown bookseller id ($mergefrom)" unless $from_bookseller;
51
die "Unknown bookseller id ($mergefrom)" unless $from_bookseller;
52
52
53
my ($error, $report) = $from_bookseller->merge_to($mergeto);
53
my $report = $from_bookseller->merge_with($mergeto);
54
55
if ($error) {
56
    die $error;
57
}
58
54
59
if ($confirm) {
55
if ($confirm) {
60
    $schema->storage->txn_commit;
56
    $schema->storage->txn_commit;
(-)a/t/Bookseller.t (-14 / +2 lines)
Lines 1-19 Link Here
1
#!/usr/bin/perl
1
#!/usr/bin/perl
2
3
# This file is part of Koha.
4
#
5
# Koha is free software; you can redistribute it and/or modify it
6
# under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 3 of the License, or
8
# (at your option) any later version.
9
#
10
# Koha is distributed in the hope that it will be useful, but
11
# WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
# GNU General Public License for more details.
14
#
2
#
15
# You should have received a copy of the GNU General Public License
3
# This Koha test module is a stub!  
16
# along with Koha; if not, see <http://www.gnu.org/licenses>.
4
# Add more tests here!!!
17
5
18
use strict;
6
use strict;
19
use warnings;
7
use warnings;
(-)a/t/db_dependent/Bookseller.t (-2 / +104 lines)
Lines 2-8 Link Here
2
2
3
use Modern::Perl;
3
use Modern::Perl;
4
4
5
use Test::More tests => 88;
5
use Test::More tests => 101;
6
use Test::MockModule;
6
use Test::MockModule;
7
use Test::Warn;
7
use Test::Warn;
8
8
Lines 11-19 use Koha::DateUtils; Link Here
11
use DateTime::Duration;
11
use DateTime::Duration;
12
use t::lib::Mocks;
12
use t::lib::Mocks;
13
use C4::Acquisition;
13
use C4::Acquisition;
14
use C4::Contract qw( GetContract );
15
use C4::Items qw ( GetItem );
14
use C4::Serials;
16
use C4::Serials;
15
use C4::Budgets;
17
use C4::Budgets;
16
use C4::Biblio;
18
use C4::Biblio;
19
use t::lib::TestBuilder;
17
20
18
use Koha::Acquisition::Order;
21
use Koha::Acquisition::Order;
19
use Koha::Database;
22
use Koha::Database;
Lines 40-45 $schema->storage->txn_begin(); Link Here
40
43
41
$dbh->{RaiseError} = 1;
44
$dbh->{RaiseError} = 1;
42
45
46
our $builder = t::lib::TestBuilder->new;
47
43
#Start tests
48
#Start tests
44
$dbh->do(q|DELETE FROM aqorders|);
49
$dbh->do(q|DELETE FROM aqorders|);
45
$dbh->do(q|DELETE FROM aqbasket|);
50
$dbh->do(q|DELETE FROM aqbasket|);
Lines 746-751 is( $contacts->[0]->phone, Link Here
746
is( scalar @$contacts,
751
is( scalar @$contacts,
747
    1, 'Only one contact after modification' );
752
    1, 'Only one contact after modification' );
748
753
754
my $bookseller1   = create('Aqbookseller');
755
my $booksellerid1 = $bookseller1->{id};
756
my $bookseller2   = create('Aqbookseller');
757
my $booksellerid2 = $bookseller2->{id};
758
759
my $bg1 = create( 'Aqbasketgroup', $booksellerid1 );
760
my $bg2 = create( 'Aqbasketgroup', $booksellerid1 );
761
my $bg3 = create( 'Aqbasketgroup', $booksellerid2 );
762
763
my $basket1 = create( 'Aqbasket', $booksellerid1 );
764
my $basket2 = create( 'Aqbasket', $booksellerid1 );
765
766
my $contract = create( 'Aqcontract', $booksellerid1 );
767
768
my $contact = create( 'Aqcontact', $booksellerid1 );
769
770
my $invoice = create( 'Aqinvoice', $booksellerid1 );
771
772
my $deleteditem = create( 'Deleteditem', $booksellerid1 );
773
774
my $item1 = create( 'Item', $booksellerid1 );
775
776
my $subscription = create( 'Subscription', $booksellerid1 );
777
778
$bookseller = Koha::Acquisition::Bookseller->fetch( { id => $booksellerid1 } );
779
780
my $result = eval { $bookseller->merge_with(345876876) };
781
ok(
782
    $@ =~ /^Unknown target bookseller number: 345876876/,
783
    'Merge to unknown bookseller return an error'
784
);
785
786
$result = $bookseller->merge_with($booksellerid2);
787
my $expected_result = {
788
    Aqbasketgroup => [ $bg1->{id},           $bg2->{id} ],
789
    Aqbasket      => [ $basket1->{basketno}, $basket2->{basketno} ],
790
    Aqcontract    => [ $contract->{contractnumber} ],
791
    Aqcontact     => [ $contact->{id} ],
792
    Aqinvoice     => [ $invoice->{invoiceid} ],
793
    Deleteditem   => [ $deleteditem->{itemnumber} ],
794
    Item          => [ $item1->{itemnumber} ],
795
    Subscription  => [ $subscription->{subscriptionid} ]
796
};
797
798
is_deeply( $result, $expected_result, 'Result should be as expected' );
799
800
is( GetBasketgroup( $bg1->{id} )->{'booksellerid'},
801
    $booksellerid2, 'Basket group 1 has bookseller 2' );
802
803
is( GetBasketgroup( $bg2->{id} )->{'booksellerid'},
804
    $booksellerid2, 'Basket group 2 has bookseller 2' );
805
806
is( GetBasketgroup( $bg3->{id} )->{'booksellerid'},
807
    $booksellerid2, 'Basket group 3 keep bookseller 2' );
808
809
is( GetBasket( $basket1->{basketno} )->{'booksellerid'},
810
    $booksellerid2, 'Basket 1 has bookseller 2' );
811
812
is( GetBasket( $basket2->{basketno} )->{'booksellerid'},
813
    $booksellerid2, 'Basket 2 has bookseller 2' );
814
815
is(
816
    GetContract( { contractnumber => $contract->{contractnumber} } )
817
      ->{'booksellerid'},
818
    $booksellerid2,
819
    'Basket 1 has bookseller 2'
820
);
821
822
is( C4::Bookseller::Contact->fetch( $contact->{id} )->{'booksellerid'},
823
    $booksellerid2, 'Contact 1 has booksellerid 2' );
824
825
is( GetInvoice( $invoice->{invoiceid} )->{'booksellerid'},
826
    $booksellerid2, 'Invoice has bookseller 2' );
827
828
my $item = Koha::Database->new()->schema->resultset('Deleteditem')
829
  ->find( { itemnumber => $deleteditem->{itemnumber} } );
830
is( $item->get_column('booksellerid'),
831
    $booksellerid2, 'Deleted item has bookseller 2' );
832
833
is( GetItem( $item1->{itemnumber} )->{'booksellerid'},
834
    $booksellerid2, 'Item has bookseller 2' );
835
836
is( GetSubscription( $subscription->{subscriptionid} )->{'aqbooksellerid'},
837
    $booksellerid2, 'Subscription has bookseller 2' );
838
749
#End transaction
839
#End transaction
750
$schema->storage->txn_rollback();
840
$schema->storage->txn_rollback();
751
841
Lines 769-771 sub field_filter { Link Here
769
    }
859
    }
770
    return $struct;
860
    return $struct;
771
}
861
}
772
- 
862
863
sub create {
864
    my ( $source, $booksellerid ) = @_;
865
866
    my $build = { source => $source };
867
    my $foreign_key =
868
      $source eq 'Subscription' ? 'aqbooksellerid' : 'booksellerid';
869
    $build->{value} = { $foreign_key => $booksellerid } if $booksellerid;
870
871
    my $entity = $builder->build($build);
872
873
    return $entity;
874
}

Return to bug 15336