Bugzilla – Attachment 114657 Details for
Bug 15516
Allow to place a hold on first available item from a group of titles
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 15516: (follow-up) Move to Koha::Object[s]
Bug-15516-follow-up-Move-to-KohaObjects.patch (text/plain), 19.62 KB, created by
Michal Denar
on 2020-12-22 23:21:04 UTC
(
hide
)
Description:
Bug 15516: (follow-up) Move to Koha::Object[s]
Filename:
MIME Type:
Creator:
Michal Denar
Created:
2020-12-22 23:21:04 UTC
Size:
19.62 KB
patch
obsolete
>From 554f4e079e3b07284c0e5f5e33b04deba65d09f3 Mon Sep 17 00:00:00 2001 >From: Josef Moravec <josef.moravec@gmail.com> >Date: Tue, 22 Dec 2020 13:32:03 +0000 >Subject: [PATCH] Bug 15516: (follow-up) Move to Koha::Object[s] > >Test plan: >prove t/db_dependent/Koha/HoldGroup.t >prove t/db_dependent/Koha/Holds.t > >Signed-off-by: Michal Denar <black23@gmail.com> > >Signed-off-by: Michal Denar <black23@gmail.com> >--- > C4/Reserves.pm | 104 +----------------- > Koha/HoldGroup.pm | 63 +++++++++++ > Koha/HoldGroups.pm | 60 +++++++++++ > Koha/Holds.pm | 15 +++ > Koha/Template/Plugin/Biblio.pm | 8 -- > .../prog/en/modules/reserve/hold-group.tt | 8 +- > opac/opac-reserve.pl | 3 +- > reserve/hold-group.pl | 8 +- > reserve/placerequest.pl | 7 +- > t/db_dependent/Koha/HoldGroup.t | 53 ++++++++++ > t/db_dependent/Koha/Holds.t | 73 ++++++++++++- > t/db_dependent/Reserves/HoldCount.t | 116 --------------------- > 12 files changed, 277 insertions(+), 241 deletions(-) > create mode 100644 Koha/HoldGroup.pm > create mode 100644 Koha/HoldGroups.pm > create mode 100755 t/db_dependent/Koha/HoldGroup.t > delete mode 100755 t/db_dependent/Reserves/HoldCount.t > >diff --git a/C4/Reserves.pm b/C4/Reserves.pm >index 9b5ea084d1..8a5d8f66fe 100644 >--- a/C4/Reserves.pm >+++ b/C4/Reserves.pm >@@ -38,8 +38,8 @@ use Koha::Calendar; > use Koha::CirculationRules; > use Koha::Database; > use Koha::DateUtils; >-use Koha::Hold; > use Koha::Holds; >+use Koha::HoldGroups; > use Koha::ItemTypes; > use Koha::Items; > use Koha::Libraries; >@@ -140,10 +140,6 @@ BEGIN { > IsItemOnHoldAndFound > > GetMaxPatronHoldsForRecord >- >- &AddHoldGroup >- &DeleteHoldGroup >- &GetHoldGroupHolds > ); > @EXPORT_OK = qw( MergeHolds ); > } >@@ -603,48 +599,6 @@ sub CanReserveBeCanceledFromOpac { > return $reserve->is_cancelable_from_opac; > } > >-# TODO: Should be moved to Koha::Objects >- >-=head2 GetHoldCount >- >- $number = &GetHoldCount($borrowernumber); >- >-this function returns the number of reservation for a borrower given on input arg. >- >-=cut >- >-sub GetHoldCount { >- my ($borrowernumber) = @_; >- >- my $dbh = C4::Context->dbh; >- >- my $count = 0; #added by 15516 >- my $query = " >- SELECT COUNT(*) AS counter >- FROM reserves >- WHERE borrowernumber = ? >- AND hold_group_id is NULL"; #added by 15516 >- my $sth = $dbh->prepare($query); >- $sth->execute($borrowernumber); >- my $row = $sth->fetchrow_hashref; >- >- # section added by 15516 >- $count += $row->{counter}; >- >- $query = " >- SELECT COUNT(DISTINCT hold_group_id) AS counter >- FROM reserves >- WHERE borrowernumber = ? >- AND hold_group_id is not NULL >- "; >- $sth = $dbh->prepare($query); >- $sth->execute($borrowernumber); >- $row = $sth->fetchrow_hashref; >- $count += $row->{counter}; >- # end of section added by 15516 >- return $count; >-} >- > =head2 GetOtherReserves > > ($messages,$nextreservinfo)=$GetOtherReserves(itemnumber); >@@ -1264,7 +1218,7 @@ sub ModReserveAffect { > WHERE hold_group_id = ? > AND reserve_id != ? > }, undef, $hold->hold_group_id, $hold->reserve_id); >- DeleteHoldGroup($hold->hold_group_id); >+ Koha::HoldGroups->find($hold->hold_group_id)->delete; > } > > _FixPriority( { biblionumber => $biblionumber } ); >@@ -2325,60 +2279,6 @@ sub GetMaxPatronHoldsForRecord { > return $max; > } > >-=head2 AddHoldGroup >- >- my $hold_group_id = AddHoldGroup(); >- >-Creates a new hold group and returns its ID >- >-=cut >- >-sub AddHoldGroup { >- my $dbh = C4::Context->dbh; >- >- $dbh->do('INSERT INTO hold_group VALUES ()'); >- return $dbh->last_insert_id(undef, undef, 'hold_group', undef); >-} >- >-=head2 DeleteHoldGroup >- >- DeleteHoldGroup($hold_group_id); >- >-Delete a hold group. Reserves that belong to this group are not removed. >- >-=cut >- >-sub DeleteHoldGroup { >- my ($hold_group_id) = @_; >- >- my $dbh = C4::Context->dbh; >- my $query = 'DELETE FROM hold_group WHERE hold_group_id = ?'; >- $dbh->do($query, undef, $hold_group_id); >-} >- >-=head2 GetHoldGroupHolds >- >- my @reserves = GetHoldGroupHolds($hold_group_id); >- >-Fetch all reserve from a hold group. >- >-=cut >- >-sub GetHoldGroupHolds { >- my ($hold_group_id) = @_; >- >- my $dbh = C4::Context->dbh; >- >- my $reserves = $dbh->selectall_arrayref(q{ >- SELECT * FROM reserves >- WHERE hold_group_id = ? >- }, { Slice => {} }, $hold_group_id); >- >- return () unless defined $reserves; >- >- return @$reserves; >-} >- > =head1 AUTHOR > > Koha Development Team <http://koha-community.org/> >diff --git a/Koha/HoldGroup.pm b/Koha/HoldGroup.pm >new file mode 100644 >index 0000000000..70c2f9e320 >--- /dev/null >+++ b/Koha/HoldGroup.pm >@@ -0,0 +1,63 @@ >+package Koha::HoldGroup; >+ >+# Copyright 2020 Koha Development team >+# >+# This file is part of Koha. >+# >+# Koha is free software; you can redistribute it and/or modify it >+# under the terms of the GNU General Public License as published by >+# the Free Software Foundation; either version 3 of the License, or >+# (at your option) any later version. >+# >+# Koha is distributed in the hope that it will be useful, but >+# WITHOUT ANY WARRANTY; without even the implied warranty of >+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >+# GNU General Public License for more details. >+# >+# You should have received a copy of the GNU General Public License >+# along with Koha; if not, see <http://www.gnu.org/licenses>. >+ >+use Modern::Perl; >+ >+use base qw(Koha::Object); >+ >+=head1 NAME >+ >+Koha::HoldGroup - Koha Hold Group object class >+ >+=head1 API >+ >+=head2 Class Methods >+ >+=cut >+ >+=head3 holds >+ >+$holds = $hold_group->holds >+ >+Return all holds associated with this group >+ >+=cut >+ >+sub holds { >+ my ($self) = @_; >+ >+ my $holds_rs = $self->_result->reserves; >+ return Koha::Holds->_new_from_dbic($holds_rs); >+} >+ >+=head3 _type >+ >+=cut >+ >+sub _type { >+ return 'HoldGroup'; >+} >+ >+=head1 AUTHORS >+ >+Josef Moravec <josef.moravec@gmail.com> >+ >+=cut >+ >+1; >diff --git a/Koha/HoldGroups.pm b/Koha/HoldGroups.pm >new file mode 100644 >index 0000000000..ad96b60704 >--- /dev/null >+++ b/Koha/HoldGroups.pm >@@ -0,0 +1,60 @@ >+package Koha::HoldGroups; >+ >+# Copyright Koha Development team 2020 >+# >+# This file is part of Koha. >+# >+# Koha is free software; you can redistribute it and/or modify it >+# under the terms of the GNU General Public License as published by >+# the Free Software Foundation; either version 3 of the License, or >+# (at your option) any later version. >+# >+# Koha is distributed in the hope that it will be useful, but >+# WITHOUT ANY WARRANTY; without even the implied warranty of >+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >+# GNU General Public License for more details. >+# >+# You should have received a copy of the GNU General Public License >+# along with Koha; if not, see <http://www.gnu.org/licenses>. >+ >+use Modern::Perl; >+ >+use Koha::Database; >+ >+use Koha::HoldGroup; >+ >+use base qw(Koha::Objects); >+ >+=head1 NAME >+ >+Koha::HoldGroups - Koha Hold Group object set class >+ >+=head1 API >+ >+=head2 Class Methods >+ >+=cut >+ >+=head3 _type >+ >+=cut >+ >+sub _type { >+ return 'HoldGroup'; >+} >+ >+=head3 object_class >+ >+=cut >+ >+sub object_class { >+ return 'Koha::HoldGroup'; >+} >+ >+=head1 AUTHOR >+ >+Josef Moravec <josef.moravec@gmail.com> >+ >+=cut >+ >+1; >diff --git a/Koha/Holds.pm b/Koha/Holds.pm >index 604953d4c9..e220533064 100644 >--- a/Koha/Holds.pm >+++ b/Koha/Holds.pm >@@ -92,6 +92,21 @@ sub forced_hold_level { > return; > } > >+=head3 count_grouped >+ >+$holds->count_grouped(); >+ >+Return number of hold, where hold group is counted as one hold >+ >+=cut >+ >+sub count_grouped { >+ my ($self) = @_; >+ my $holds_without_group_count = $self->search({ hold_group_id => undef })->count(); >+ my $hold_groups_count = $self->search({ hold_group_id => { '!=' => undef }}, { group_by => 'me.hold_group_id' })->count(); >+ return $holds_without_group_count + $hold_groups_count; >+} >+ > =head3 type > > =cut >diff --git a/Koha/Template/Plugin/Biblio.pm b/Koha/Template/Plugin/Biblio.pm >index ab6a716a0e..e9d7a73009 100644 >--- a/Koha/Template/Plugin/Biblio.pm >+++ b/Koha/Template/Plugin/Biblio.pm >@@ -63,12 +63,4 @@ sub CanArticleRequest { > return $biblio ? $biblio->can_article_request( $borrower ) : 0; > } > >-sub Get { >- my ($self, $biblionumber) = @_; >- >- my $biblio = Koha::Biblios->find($biblionumber); >- >- return $biblio; >-} >- > 1; >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/hold-group.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/hold-group.tt >index eee53f763e..98ad470b45 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/hold-group.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/hold-group.tt >@@ -1,11 +1,11 @@ >-[% USE Biblio %] > [% INCLUDE 'doc-head-open.inc' %] >- <title>Koha › Circulation › Holds › Holds group ([% hold_group_id | html %])</title> >+ <title>Koha › Circulation › Holds › Holds group ([% hold_group.id | html %])</title> > [% INCLUDE 'doc-head-close.inc' %] > </head> > <body id="hold.hold-group"> >- <h1>Holds group ([% hold_group_id | html %])</h1> >+ <h1>Holds group ([% hold_group.id | html %])</h1> > <div id="main"> >+ [% holds = hold_group.holds %] > [% IF holds.size %] > <table> > <thead> >@@ -17,7 +17,7 @@ > </thead> > <tbody> > [% FOREACH hold IN holds %] >- [% biblio = Biblio.Get(hold.biblionumber) %] >+ [% biblio = hold.biblio %] > <tr> > <td><a href="/cgi-bin/koha/hold.request.pl?biblionumber=[% biblio.biblionumber | uri %]">[% biblio.title | html %]</a></td> > <td>[% hold.priority | html %]</td> >diff --git a/opac/opac-reserve.pl b/opac/opac-reserve.pl >index 252013d590..b071651d10 100755 >--- a/opac/opac-reserve.pl >+++ b/opac/opac-reserve.pl >@@ -195,8 +195,7 @@ foreach my $biblioNumber (@biblionumbers) { > if ( $query->param('place_reserve') ) { > my $reserve_cnt = 0; > if ($maxreserves) { >- # TODO: Should be: $reserve_cnt = $patron->holds->count; >- $reserve_cnt = GetHoldCount( $borrowernumber ); >+ $reserve_cnt = $patron->holds->count_grouped; > } > > # List is composed of alternating biblio/item/branch >diff --git a/reserve/hold-group.pl b/reserve/hold-group.pl >index 49d33e4198..fd055ef625 100755 >--- a/reserve/hold-group.pl >+++ b/reserve/hold-group.pl >@@ -20,23 +20,21 @@ use CGI qw( -utf8 ); > > use C4::Auth; > use C4::Output; >-use C4::Reserves; >+use Koha::HoldGroups; > > my $cgi = new CGI; > my ($template, $loggedinuser, $cookie) = get_template_and_user({ > template_name => "reserve/hold-group.tt", > query => $cgi, > type => "intranet", >- authnotrequired => 0, > flagsrequired => { circulate => 'circulate_remaining_permissions' }, > }); > > my $hold_group_id = $cgi->param('hold_group_id'); >-my @holds = GetHoldGroupHolds($hold_group_id); >+my $hold_group = Koha::HoldGroups->find($hold_group_id); > > $template->param( >- hold_group_id => $hold_group_id, >- holds => \@holds, >+ hold_group => $hold_group, > ); > > output_html_with_http_headers $cgi, $cookie, $template->output; >diff --git a/reserve/placerequest.pl b/reserve/placerequest.pl >index 896a1b673e..645a336ded 100755 >--- a/reserve/placerequest.pl >+++ b/reserve/placerequest.pl >@@ -32,6 +32,7 @@ use C4::Circulation; > use C4::Members; > use C4::Auth qw/checkauth/; > >+use Koha::HoldGroups; > use Koha::Items; > use Koha::Patrons; > >@@ -77,9 +78,9 @@ my $found; > > if ( $type eq 'str8' && $borrower ) { > >- my $hold_group_id; >+ my $hold_group; > if ((@biblionumbers > 1) && $requestany) { >- $hold_group_id = AddHoldGroup(); >+ $hold_group = Koha::HoldGroup->new->store; > } > > foreach my $biblionumber ( keys %bibinfos ) { >@@ -144,7 +145,7 @@ if ( $type eq 'str8' && $borrower ) { > found => $found, > itemtype => $itemtype, > non_priority => $non_priority, >- hold_group_id => $hold_group_id, >+ hold_group_id => $hold_group ? $hold_group->id : undef, > } > ); > } >diff --git a/t/db_dependent/Koha/HoldGroup.t b/t/db_dependent/Koha/HoldGroup.t >new file mode 100755 >index 0000000000..4bc4687c79 >--- /dev/null >+++ b/t/db_dependent/Koha/HoldGroup.t >@@ -0,0 +1,53 @@ >+#!/usr/bin/perl >+ >+# Copyright 2020 Koha Development team >+# >+# This file is part of Koha >+# >+# Koha is free software; you can redistribute it and/or modify it >+# under the terms of the GNU General Public License as published by >+# the Free Software Foundation; either version 3 of the License, or >+# (at your option) any later version. >+# >+# Koha is distributed in the hope that it will be useful, but >+# WITHOUT ANY WARRANTY; without even the implied warranty of >+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >+# GNU General Public License for more details. >+# >+# You should have received a copy of the GNU General Public License >+# along with Koha; if not, see <http://www.gnu.org/licenses>. >+ >+use Modern::Perl; >+ >+use Test::More tests => 1; >+ >+use t::lib::TestBuilder; >+ >+my $schema = Koha::Database->new->schema; >+my $builder = t::lib::TestBuilder->new; >+ >+subtest 'holds tests' => sub { >+ >+ plan tests => 2; >+ >+ $schema->storage->txn_begin; >+ >+ my $patron = $builder->build_object({ class => 'Koha::Patrons' }); >+ my $hold_group = $builder->build_object({ class => 'Koha::HoldGroups' }); >+ my $hold = $builder->build_object( >+ { >+ class => 'Koha::Holds', >+ value => { >+ borrowernumber => $patron->borrowernumber, >+ hold_group_id => $hold_group->hold_group_id, >+ } >+ } >+ ); >+ >+ my $holds = $hold_group->holds; >+ is( ref($holds), 'Koha::Holds', 'Right type' ); >+ my $hold_from_group = $holds->next; >+ is( $hold_from_group->id, $hold->id, 'Right object' ); >+ >+ $schema->storage->txn_rollback; >+}; >diff --git a/t/db_dependent/Koha/Holds.t b/t/db_dependent/Koha/Holds.t >index 538e7119de..84fe70758f 100755 >--- a/t/db_dependent/Koha/Holds.t >+++ b/t/db_dependent/Koha/Holds.t >@@ -19,7 +19,7 @@ > > use Modern::Perl; > >-use Test::More tests => 5; >+use Test::More tests => 6; > use Test::Warn; > > use C4::Reserves; >@@ -410,4 +410,75 @@ subtest 'Desks' => sub { > > $schema->storage->txn_rollback; > >+subtest 'count_grouped' => sub { >+ plan tests => 3; >+ $schema->storage->txn_begin; >+ >+ my $patron = $builder->build_object({ >+ class => 'Koha::Patrons', >+ }); >+ my $patron_id = $patron->borrowernumber; >+ >+ my $hold1 = $builder->build_object({ >+ class => 'Koha::Holds', >+ value => { >+ borrowernumber => $patron_id, >+ hold_group_id => undef, >+ }, >+ }); >+ >+ is($patron->holds->count_grouped, 1, 'Test patron has 1 hold.'); >+ >+ my $hold_group = $builder->build_object({ >+ class => 'Koha::HoldGroups', >+ }); >+ >+ my $hold2 = $builder->build_object({ >+ class => 'Koha::Holds', >+ value => { >+ borrowernumber => $patron_id, >+ hold_group_id => $hold_group->hold_group_id, >+ } >+ }); >+ my $hold3 = $builder->build_object({ >+ class => 'Koha::Holds', >+ value => { >+ borrowernumber => $patron_id, >+ hold_group_id => $hold_group->hold_group_id, >+ } >+ }); >+ >+ is($patron->holds->count_grouped, 2, 'Test patron has 2 holds.'); >+ >+ my $hold_group2 = $builder->build_object({ >+ class => 'Koha::HoldGroups', >+ }); >+ >+ my $hold4 = $builder->build_object({ >+ class => 'Koha::Holds', >+ value => { >+ borrowernumber => $patron_id, >+ hold_group_id => $hold_group2->hold_group_id, >+ } >+ }); >+ my $hold5 = $builder->build_object({ >+ class => 'Koha::Holds', >+ value => { >+ borrowernumber => $patron_id, >+ hold_group_id => $hold_group2->hold_group_id, >+ } >+ }); >+ my $hold6 = $builder->build_object({ >+ class => 'Koha::Holds', >+ value => { >+ borrowernumber => $patron_id, >+ hold_group_id => $hold_group2->hold_group_id, >+ } >+ }); >+ >+ is($patron->holds->count_grouped, 3, 'Test patron has 3 holds.'); >+ >+ $schema->storage->txn_rollback; >+}; >+ > 1; >diff --git a/t/db_dependent/Reserves/HoldCount.t b/t/db_dependent/Reserves/HoldCount.t >deleted file mode 100755 >index 7fc5243621..0000000000 >--- a/t/db_dependent/Reserves/HoldCount.t >+++ /dev/null >@@ -1,116 +0,0 @@ >-#!/usr/bin/perl >- >-# This file is part of Koha. >-# >-# Koha is free software; you can redistribute it and/or modify it >-# under the terms of the GNU General Public License as published by >-# the Free Software Foundation; either version 3 of the License, or >-# (at your option) any later version. >-# >-# Koha is distributed in the hope that it will be useful, but >-# WITHOUT ANY WARRANTY; without even the implied warranty of >-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >-# GNU General Public License for more details. >-# >-# You should have received a copy of the GNU General Public License >-# along with Koha; if not, see <http://www.gnu.org/licenses>. >- >-use Modern::Perl; >- >-use Test::More tests => 3; >-use t::lib::TestBuilder; >- >-use C4::Context; >-use C4::Biblio; >-use C4::Items; >-use C4::Reserves; >- >-use Koha::Database; >- >- >- >-my $dbh = C4::Context->dbh; >-$dbh->{AutoCommit} = 0; >-$dbh->{RaiseError} = 1; >- >-my $builder = t::lib::TestBuilder->new(); >- >-my $categorycode = $builder->build({ source => 'Category' })->{ categorycode }; >-my $branchcode = $builder->build({ source => 'Branch' })->{ branchcode }; >-my $borrower = $builder->build({ >- source => 'Borrower', >- value => { >- branchcode => $branchcode, >- categorycode => $categorycode >- } >-}); >-my $borrowernumber = $borrower->{borrowernumber}; >- >-my $biblio = $builder->build( { source => 'Biblio', } ); >-my $biblionumber = $biblio->{biblionumber}; >- >-# Use AddReserve instead of TestBuilder because i don't manage >-# to make TestBuilder set hold_group_id to null. Idea ? >-my $reserve_id = AddReserve($branchcode, $borrowernumber, >-$biblionumber, $biblionumber, 1, undef, undef, undef >-$biblio->{title}, undef, undef, undef); >- >-is(GetHoldCount($borrowernumber), 1, 'Test borrower has 1 reserve.'); >- >-my $reserves_group = $builder->build({ >- source => 'HoldGroup', >- value => { >- hold_group_id => 1 >- } >-}); >- >-my $reserve2 = $builder->build({ >- source => 'Reserve', >- value => { >- borrowernumber => $borrowernumber, >- hold_group_id => 1 >- } >-}); >-my $reserve3 = $builder->build({ >- source => 'Reserve', >- value => { >- borrowernumber => $borrowernumber, >- hold_group_id => 1 >- } >-}); >- >-is(GetHoldCount($borrowernumber), 2, 'Test borrower has 2 reserve.'); >- >-my $reserves_group2 = $builder->build({ >- source => 'HoldGroup', >- value => { >- hold_group_id => 2 >- } >-}); >-my $hold_group_id2 = $reserves_group2->{hold_group_id}; >- >-my $reserve4 = $builder->build({ >- source => 'Reserve', >- value => { >- borrowernumber => $borrowernumber, >- hold_group_id => 2 >- } >-}); >-my $reserve5 = $builder->build({ >- source => 'Reserve', >- value => { >- borrowernumber => $borrowernumber, >- hold_group_id => 2 >- } >-}); >-my $reserve6 = $builder->build({ >- source => 'Reserve', >- value => { >- borrowernumber => $borrowernumber, >- hold_group_id => 2 >- } >-}); >- >-is(GetHoldCount($borrowernumber), 3, 'Test borrower has 2 reserve.'); >- >-$dbh->rollback; >-- >2.11.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 15516
:
46392
|
47498
|
47570
|
47961
|
47962
|
47963
|
48097
|
48098
|
48448
|
48449
|
50094
|
50095
|
50096
|
53742
|
53743
|
53744
|
53770
|
53771
|
53772
|
53774
|
53775
|
53776
|
54977
|
55300
|
55304
|
55305
|
55306
|
55307
|
55308
|
55768
|
55769
|
55770
|
55771
|
55772
|
58799
|
58800
|
58801
|
58802
|
58803
|
59314
|
59315
|
59316
|
59317
|
59318
|
69902
|
69903
|
69904
|
69905
|
69906
|
72485
|
72486
|
72487
|
72488
|
72489
|
72491
|
79077
|
79078
|
79080
|
79081
|
79082
|
79083
|
79213
|
79214
|
79215
|
79216
|
79217
|
79218
|
79219
|
79220
|
79221
|
79222
|
81453
|
81454
|
81455
|
81456
|
81457
|
81458
|
81459
|
81460
|
81461
|
81462
|
81463
|
84554
|
84555
|
84556
|
84557
|
84558
|
84559
|
84560
|
84561
|
84562
|
84563
|
84564
|
87828
|
87829
|
87830
|
87831
|
87832
|
87833
|
87834
|
87835
|
87836
|
87837
|
87838
|
88038
|
88039
|
88125
|
88173
|
88174
|
88175
|
88176
|
88177
|
88178
|
88179
|
88180
|
88181
|
88182
|
88183
|
88184
|
88185
|
88186
|
90289
|
90290
|
90291
|
90292
|
90293
|
90294
|
90295
|
90296
|
90297
|
90298
|
90299
|
90300
|
90301
|
90302
|
90303
|
90829
|
90830
|
90831
|
90832
|
90833
|
90834
|
90835
|
90836
|
90837
|
90838
|
90839
|
90840
|
90841
|
90842
|
90843
|
90844
|
92783
|
92784
|
92785
|
92786
|
92787
|
92788
|
92789
|
92790
|
92791
|
92792
|
92793
|
92794
|
92795
|
92796
|
92797
|
92798
|
114513
|
114514
|
114515
|
114516
|
114517
|
114518
|
114585
|
114586
|
114603
|
114624
|
114625
|
114626
|
114627
|
114628
|
114629
|
114630
|
114631
|
114632
|
114633
|
114634
|
114635
|
114636
|
114637
|
114638
|
114639
|
114640
|
114641
|
114642
|
114643
|
114644
|
114645
|
114647
|
114648
|
114649
|
114650
|
114651
|
114652
|
114653
|
114654
|
114655
|
114656
|
114657
|
114658
|
114659
|
117423
|
117424
|
117425
|
117426
|
118281
|
118282
|
118283
|
118284
|
118285
|
118286
|
118350
|
118351
|
118352
|
118353
|
118354
|
118355
|
120368
|
120369
|
120370
|
120371
|
120372
|
120373
|
120574
|
120643
|
120644
|
120645
|
120646
|
120647
|
120648
|
120649
|
120650
|
120651
|
121523
|
121623
|
122097
|
122102
|
122627
|
128189
|
128190
|
128191
|
128192
|
128193
|
128194
|
128195
|
128196
|
128197
|
128198
|
128199
|
128200
|
128201
|
128202
|
128255
|
128256
|
128257
|
128258
|
128259
|
128260
|
128261
|
128262
|
128263
|
128264
|
128265
|
128266
|
128267
|
128268
|
128269
|
128285
|
128286
|
128287
|
128288
|
128289
|
128290
|
128291
|
128292
|
128293
|
128294
|
128295
|
128296
|
128297
|
128298
|
128299
|
138576
|
138577
|
138578
|
138579
|
138580
|
138581
|
138582
|
138583
|
138584
|
138585
|
138586
|
138587
|
138588
|
138589
|
138593
|
138594
|
138595
|
138596
|
138597
|
138738
|
138739
|
138740
|
138741
|
138742
|
138772
|
138868
|
138869
|
162076
|
162077
|
162078
|
162079
|
162080
|
162081
|
162082
|
162083
|
162084