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

(-)a/Koha/Acquisition/Bookseller.pm (+26 lines)
Lines 111-116 sub insert { Link Here
111
    return $self;
111
    return $self;
112
}
112
}
113
113
114
sub merge_to {
115
    my ($self, $mergeto) = @_;
116
117
    my $error = '';
118
    my $result = {};
119
120
    unless (my $to_bookseller = Koha::Acquisition::Bookseller->fetch({id => $mergeto})) {
121
        $error = "Unknown target bookseller number: $mergeto";
122
        return ($error, {});
123
    }
124
125
    foreach my $entity (qw(Aqbasketgroup Aqbasket Aqcontract Aqcontact Aqinvoice Deleteditem Item Subscription)) {
126
        my $rs = Koha::Database->new()->schema->resultset($entity);
127
128
        my $foreign_key = $entity eq 'Subscription' ? 'aqbooksellerid' : 'booksellerid';
129
        $rs = $rs->search({$foreign_key => $self->{id} });
130
131
        while (my $e = $rs->next) {
132
            $e->set_column($foreign_key, $mergeto);
133
            $e->update();
134
            push @{ $result->{$entity} }, $e->id();
135
        }
136
    }
137
    return ($error, $result);
138
}
139
114
# TODO Move code from ModBookseller
140
# TODO Move code from ModBookseller
115
sub update {
141
sub update {
116
    die "not implemented yet";
142
    die "not implemented yet";
(-)a/misc/migration_tools/merge_booksellers.pl (-17 / +21 lines)
Lines 44-79 if ($mergefrom eq $mergeto) { Link Here
44
    pod2usage('Source and target booksellers should be different.');
44
    pod2usage('Source and target booksellers should be different.');
45
}
45
}
46
46
47
my $schema = Koha::Database->schema;
48
$schema->storage->txn_begin;
49
47
my $from_bookseller = Koha::Acquisition::Bookseller->fetch({id => $mergefrom});
50
my $from_bookseller = Koha::Acquisition::Bookseller->fetch({id => $mergefrom});
48
die "Unknown bookseller id ($mergefrom)" unless $from_bookseller;
51
die "Unknown bookseller id ($mergefrom)" unless $from_bookseller;
49
52
50
my $to_bookseller = Koha::Acquisition::Bookseller->fetch({id => $mergeto});
53
my ($error, $report) = $from_bookseller->merge_to($mergeto);
51
die "Unknown bookseller id ($mergeto)" unless $to_bookseller;
54
52
55
if ($error) {
53
my $report;
56
    die $error;
54
foreach my $entity (qw(Aqbasketgroup Aqbasket Aqcontract Aqcontact Aqinvoice Deleteditem Item Subscription)) {
57
}
55
    my $rs = Koha::Database->new()->schema->resultset($entity);
58
56
    my $foreign_key = $entity eq 'Subscription' ? 'aqbooksellerid' : 'booksellerid';
59
if ($confirm) {
57
    $rs = $rs->search({$foreign_key => $mergefrom });
60
    $schema->storage->txn_commit;
58
    while (my $e = $rs->next) {
61
}
59
        $e->set_column('booksellerid', $mergeto);
62
else {
60
        print "$entity n° " . $e->id() . " merged into bookseller n° $mergeto\n" if $verbose;
63
    $schema->storage->txn_rollback;
61
        $e->update() if $confirm;
62
        $report->{$entity}++;
63
    }
64
}
64
}
65
65
66
DelBookseller($mergefrom) if $confirm;
66
DelBookseller($mergefrom) if $confirm;
67
67
68
print "\n" if $verbose;
68
if ($verbose) {
69
print_report($report);
69
    print_report($report);
70
}
71
70
print "Nothing done (test only). Use confirm option to commit changes in database\n" unless $confirm;
72
print "Nothing done (test only). Use confirm option to commit changes in database\n" unless $confirm;
71
73
72
sub print_report {
74
sub print_report {
73
    my $report = shift;
75
    my $report = shift;
74
76
75
    foreach my $entity (keys %$report) {
77
    foreach my $entity (keys %$report) {
76
        print "$entity merged: $report->{$entity}\n";
78
        my $count = scalar @{ $report->{$entity} };
79
        my $ids = join(', ', @{ $report->{$entity} });
80
        print "$entity merged: $count (numbers: $ids)\n";
77
    }
81
    }
78
}
82
}
79
83
(-)a/t/Bookseller.t (-5 / +109 lines)
Lines 1-14 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.
2
#
14
#
3
# This Koha test module is a stub!  
15
# You should have received a copy of the GNU General Public License
4
# Add more tests here!!!
16
# along with Koha; if not, see <http://www.gnu.org/licenses>.
5
17
6
use strict;
18
use strict;
7
use warnings;
19
use warnings;
8
20
9
use Test::More tests => 1;
21
use C4::Acquisition qw( GetBasketgroup GetBasket GetInvoice );
22
use C4::Contract qw( GetContract );
23
use C4::Items qw ( GetItem );
24
use C4::Serials qw( GetSubscription );
25
use t::lib::TestBuilder;
26
27
use Test::More tests => 14;
10
28
11
BEGIN {
29
BEGIN {
12
        use_ok('C4::Bookseller');
30
        use_ok('Koha::Acquisition::Bookseller');
31
}
32
33
my $schema = Koha::Database->schema;
34
$schema->storage->txn_begin;
35
36
our $builder = t::lib::TestBuilder->new;
37
38
my $bookseller1 = create('Aqbookseller');
39
my $booksellerid1 = $bookseller1->{id};
40
my $bookseller2 = create('Aqbookseller');
41
my $booksellerid2 = $bookseller2->{id};
42
43
my $bg1 = create('Aqbasketgroup', $booksellerid1);
44
my $bg2 = create('Aqbasketgroup', $booksellerid1);
45
my $bg3 = create('Aqbasketgroup', $booksellerid2);
46
47
my $basket1 = create('Aqbasket', $booksellerid1);
48
my $basket2 = create('Aqbasket', $booksellerid1);
49
50
my $contract = create('Aqcontract', $booksellerid1);
51
52
my $contact = create('Aqcontact', $booksellerid1);
53
54
my $invoice = create('Aqinvoice', $booksellerid1);
55
56
my $deleteditem = create('Deleteditem', $booksellerid1);
57
58
my $item1 = create('Item', $booksellerid1);
59
60
my $subscription = create('Subscription', $booksellerid1);
61
62
my $bookseller = Koha::Acquisition::Bookseller->fetch({id => $booksellerid1});
63
64
my ($error, $result) = $bookseller->merge_to(345876876);
65
is($error, "Unknown target bookseller number: 345876876", 'Merge to unknown bookseller return an error' );
66
67
($error, $result) = $bookseller->merge_to($booksellerid2);
68
my $expected_result = {
69
    Aqbasketgroup => [$bg1->{id}, $bg2->{id}],
70
    Aqbasket => [$basket1->{basketno}, $basket2->{basketno}],
71
    Aqcontract => [$contract->{contractnumber}],
72
    Aqcontact => [$contact->{id}],
73
    Aqinvoice => [$invoice->{invoiceid}],
74
    Deleteditem => [$deleteditem->{itemnumber}],
75
    Item => [$item1->{itemnumber}],
76
    Subscription => [$subscription->{subscriptionid}]
77
};
78
79
is_deeply($result, $expected_result, 'Result should be as expected');
80
81
is(GetBasketgroup($bg1->{id})->{'booksellerid'}, $booksellerid2, 'Basket group 1 has bookseller 2');
82
83
is(GetBasketgroup($bg2->{id})->{'booksellerid'}, $booksellerid2, 'Basket group 2 has bookseller 2');
84
85
is(GetBasketgroup($bg3->{id})->{'booksellerid'}, $booksellerid2, 'Basket group 3 keep bookseller 2');
86
87
is(GetBasket($basket1->{basketno})->{'booksellerid'}, $booksellerid2, 'Basket 1 has bookseller 2');
88
89
is(GetBasket($basket2->{basketno})->{'booksellerid'}, $booksellerid2, 'Basket 2 has bookseller 2');
90
91
is(GetContract({contractnumber => $contract->{contractnumber}})->{'booksellerid'}, $booksellerid2, 'Basket 1 has bookseller 2');
92
93
is(C4::Bookseller::Contact->fetch($contact->{id})->{'booksellerid'}, $booksellerid2, 'Contact 1 has booksellerid 2');
94
95
is(GetInvoice($invoice->{invoiceid})->{'booksellerid'}, $booksellerid2, 'Invoice has bookseller 2');
96
97
my $item = Koha::Database->new()->schema->resultset('Deleteditem')
98
    ->find({itemnumber => $deleteditem->{itemnumber}});
99
is($item->get_column('booksellerid'), $booksellerid2, 'Deleted item has bookseller 2');
100
101
is(GetItem($item1->{itemnumber})->{'booksellerid'}, $booksellerid2, 'Item has bookseller 2');
102
103
is(GetSubscription($subscription->{subscriptionid})->{'aqbooksellerid'}, $booksellerid2, 'Subscription has bookseller 2');
104
105
$schema->storage->txn_rollback;
106
107
sub create {
108
    my ($source, $booksellerid) = @_;
109
110
    my $build = { source => $source};
111
    my $foreign_key = $source eq 'Subscription' ? 'aqbooksellerid' : 'booksellerid';
112
    $build->{value} = {$foreign_key => $booksellerid} if $booksellerid;
113
114
    my $entity = $builder->build($build);
115
116
    return $entity;
13
}
117
}
14
118
15
- 
119
1;

Return to bug 15336