Bugzilla – Attachment 28561 Details for
Bug 6427
Rewrite of the accounts system
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 6427 [Part 28] - Add ability to void payments
Bug-6427-Part-28---Add-ability-to-void-payments.patch (text/plain), 14.52 KB, created by
Kyle M Hall
on 2014-05-29 18:09:09 UTC
(
hide
)
Description:
Bug 6427 [Part 28] - Add ability to void payments
Filename:
MIME Type:
Creator:
Kyle M Hall
Created:
2014-05-29 18:09:09 UTC
Size:
14.52 KB
patch
obsolete
>From 1a66bf5c6337a0caf41ef5a5d3b7f56bf2c122c7 Mon Sep 17 00:00:00 2001 >From: Kyle M Hall <kyle@bywatersolutions.com> >Date: Thu, 29 May 2014 12:46:37 -0400 >Subject: [PATCH] Bug 6427 [Part 28] - Add ability to void payments > >* Adds ability to void payments >* Adds missing setting up updated_on for debits and credits >* Adds the display of the offset type if there is one >* Adds a column showing the amount paid on a given fine > in the payments view >--- > Koha/Accounts.pm | 56 ++++++++++++++++++-- > Koha/Accounts/OffsetTypes.pm | 11 ++++ > Koha/Schema/Result/AccountCredit.pm | 36 ++++++++----- > .../prog/en/includes/browser-strings.inc | 8 +++- > .../prog/en/modules/members/account.tt | 46 +++++++++++++++-- > .../prog/en/modules/members/account_payment.tt | 1 - > members/account_void.pl | 38 +++++++++++++ > 7 files changed, 171 insertions(+), 25 deletions(-) > create mode 100755 members/account_void.pl > >diff --git a/Koha/Accounts.pm b/Koha/Accounts.pm >index cffa141..07b96cc 100644 >--- a/Koha/Accounts.pm >+++ b/Koha/Accounts.pm >@@ -25,9 +25,10 @@ use Data::Dumper qw(Dumper); > use C4::Context; > use C4::Log qw(logaction); > use Koha::DateUtils qw(get_timestamp); >- > use Koha::Accounts::CreditTypes; > use Koha::Accounts::DebitTypes; >+use Koha::Accounts::OffsetTypes; >+use Koha::Database; > > use vars qw($VERSION @ISA @EXPORT); > >@@ -38,6 +39,8 @@ BEGIN { > AddDebit > AddCredit > >+ VoidCredit >+ > NormalizeBalances > > RecalculateAccountBalance >@@ -309,9 +312,6 @@ sub AddCredit { > $type = Koha::Accounts::CreditTypes::Payment; > } > >- my $debit = >- Koha::Database->new()->schema->resultset('AccountDebit')->find($debit_id); >- > # First, we make the credit. We'll worry about what we paid later on > my $credit = > Koha::Database->new()->schema->resultset('AccountCredit')->create( >@@ -378,7 +378,8 @@ sub CreditDebit { > > croak("Required parameter 'credit' not passed in!") > unless $credit; >- croak("Required parameter 'debit' not passed in!") unless $debit; >+ croak("Required parameter 'debit' not passed in!") >+ unless $debit; > > my $amount_to_pay = > ( $debit->amount_outstanding() > $credit->amount_remaining() ) >@@ -388,10 +389,12 @@ sub CreditDebit { > if ( $amount_to_pay > 0 ) { > $debit->amount_outstanding( > $debit->amount_outstanding() - $amount_to_pay ); >+ $debit->updated_on( get_timestamp() ); > $debit->update(); > > $credit->amount_remaining( > $credit->amount_remaining() - $amount_to_pay ); >+ $credit->updated_on( get_timestamp() ); > $credit->update(); > > my $offset = >@@ -452,6 +455,49 @@ sub RecalculateAccountBalance { > return $account_balance; > } > >+=head2 VoidCredit >+ $account_balance = VoidCredit({ id => $credit_id }); >+ >+ Reverts a payment. All debits paid by this payment will be >+ updated such that the amount offset is reinstated for the debit. >+=cut >+ >+sub VoidCredit { >+ my ($params) = @_; >+ >+ my $id = $params->{id}; >+ >+ croak("No id passed in!") unless $id; >+ >+ my $schema = Koha::Database->new()->schema(); >+ >+ my $credit = $schema->resultset('AccountCredit')->find($id); >+ >+ foreach my $offset ( $credit->account_offsets() ) { >+ my $debit = $offset->debit(); >+ >+ $debit->amount_outstanding( $debit->amount_outstanding() - $offset->amount() ); >+ $debit->updated_on( get_timestamp() ); >+ $debit->update(); >+ >+ Koha::Database->new()->schema->resultset('AccountOffset')->create( >+ { >+ amount => $offset->amount() * -1, >+ debit_id => $debit->id(), >+ credit_id => $credit->id(), >+ created_on => get_timestamp(), >+ type => Koha::Accounts::OffsetTypes::Void(), >+ } >+ ); >+ } >+ >+ $credit->amount_voided( $credit->amount_paid ); >+ $credit->amount_paid(0); >+ $credit->amount_remaining(0); >+ $credit->updated_on( get_timestamp() ); >+ $credit->update(); >+} >+ > =head2 NormalizeBalances > > $account_balance = NormalizeBalances({ borrower => $borrower }); >diff --git a/Koha/Accounts/OffsetTypes.pm b/Koha/Accounts/OffsetTypes.pm >index 6650781..8bf1021 100644 >--- a/Koha/Accounts/OffsetTypes.pm >+++ b/Koha/Accounts/OffsetTypes.pm >@@ -63,6 +63,17 @@ sub Fine { > return 'FINE'; > } > >+=head2 VOID >+ >+Indicates this offset was an automatically >+generated in response to a voided credit >+ >+=cut >+ >+sub Void { >+ return 'VOID'; >+} >+ > 1; > > =head1 AUTHOR >diff --git a/Koha/Schema/Result/AccountCredit.pm b/Koha/Schema/Result/AccountCredit.pm >index f6ad7d0..a87f7b1 100644 >--- a/Koha/Schema/Result/AccountCredit.pm >+++ b/Koha/Schema/Result/AccountCredit.pm >@@ -55,6 +55,12 @@ __PACKAGE__->table("account_credits"); > is_nullable: 0 > size: [28,6] > >+=head2 amount_voided >+ >+ data_type: 'decimal' >+ is_nullable: 1 >+ size: [28,6] >+ > =head2 notes > > data_type: 'text' >@@ -97,6 +103,8 @@ __PACKAGE__->add_columns( > { data_type => "decimal", is_nullable => 0, size => [28, 6] }, > "amount_remaining", > { data_type => "decimal", is_nullable => 0, size => [28, 6] }, >+ "amount_voided", >+ { data_type => "decimal", is_nullable => 1, size => [28, 6] }, > "notes", > { data_type => "text", is_nullable => 1 }, > "branchcode", >@@ -112,34 +120,34 @@ __PACKAGE__->set_primary_key("credit_id"); > > =head1 RELATIONS > >-=head2 branchcode >+=head2 borrowernumber > > Type: belongs_to > >-Related object: L<Koha::Schema::Result::Branch> >+Related object: L<Koha::Schema::Result::Borrower> > > =cut > > __PACKAGE__->belongs_to( >- "branchcode", >- "Koha::Schema::Result::Branch", >- { branchcode => "branchcode" }, >- { join_type => "LEFT", on_delete => "CASCADE", on_update => "CASCADE" }, >+ "borrowernumber", >+ "Koha::Schema::Result::Borrower", >+ { borrowernumber => "borrowernumber" }, >+ { on_delete => "CASCADE", on_update => "CASCADE" }, > ); > >-=head2 borrowernumber >+=head2 branchcode > > Type: belongs_to > >-Related object: L<Koha::Schema::Result::Borrower> >+Related object: L<Koha::Schema::Result::Branch> > > =cut > > __PACKAGE__->belongs_to( >- "borrowernumber", >- "Koha::Schema::Result::Borrower", >- { borrowernumber => "borrowernumber" }, >- { on_delete => "CASCADE", on_update => "CASCADE" }, >+ "branchcode", >+ "Koha::Schema::Result::Branch", >+ { branchcode => "branchcode" }, >+ { join_type => "LEFT", on_delete => "CASCADE", on_update => "CASCADE" }, > ); > > =head2 account_offsets >@@ -158,8 +166,8 @@ __PACKAGE__->has_many( > ); > > >-# Created by DBIx::Class::Schema::Loader v0.07000 @ 2013-12-11 14:04:23 >-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:2VUFELBmtChTTprhmJGq6A >+# Created by DBIx::Class::Schema::Loader v0.07000 @ 2014-05-29 12:48:58 >+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:wAjdPOw4IvuhGQOUC4xiJQ > > __PACKAGE__->belongs_to( > "borrower", >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/browser-strings.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/browser-strings.inc >index 0b61e01..01a06a9 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/browser-strings.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/browser-strings.inc >@@ -28,7 +28,13 @@ > [% FOREACH a IN AuthorisedValues.Get('MANUAL_CREDIT') %] > "[% a.authorised_value %]" : "[% a.lib %]", > [% END %] >- } >+ }, >+ >+ "OffsetTypes": { >+ "DROPBOX" : _("Dropbox fine reduction"), >+ "FINE" : _("Fine increment"), >+ "VOID" : _("Voided"), >+ }, > } > //]]> > </script> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/account.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/account.tt >index 1487881..8a43356 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/account.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/account.tt >@@ -12,6 +12,8 @@ > <script type="text/javascript"> > //<![CDATA[ > $(document).ready(function() { >+ void_compare = "[% 0 FILTER $Currency highlight => highlight %]"; >+ > [% IF credit_id %] > accountPrint( 'credit', [% credit_id %] ); > [% ELSIF debit_id %] >@@ -172,7 +174,16 @@ $(document).ready(function() { > return STRINGS['CreditTypes'][val] || val; > }, > }, >- { "mDataProp": "amount_paid" }, >+ { >+ "mDataProp": "amount_paid", >+ "mRender": function ( data, type, full ) { >+ if ( full.amount_voided != void_compare ) { >+ return "<strike>" + full.amount_voided + "</strike>"; >+ } else { >+ return full.amount_paid; >+ } >+ } >+ }, > { "mDataProp": "amount_remaining" }, > { "mDataProp": "created_on" }, > { "mDataProp": "updated_on" } >@@ -288,13 +299,23 @@ function fnFormatDebitDetails( debitsTable, nTr ) { > for ( var i = 0; i < account_offsets.length; i++ ) { > ao = account_offsets[i]; > credit_type = STRINGS["CreditTypes"][ao.credit.type] || ao.credit.type; >+ offset_type = STRINGS["OffsetTypes"][ao.type] || ao.type; >+ if ( offset_type ) offset_type = " (" + offset_type + ") "; >+ >+ var payment_or_void; >+ if ( ao.credit.amount_voided != void_compare ) { >+ payment_or_void = "<strike>" + ao.credit.amount_voided + "</strike>"; >+ } else { >+ payment_or_void = ao.credit.amount_paid; >+ } >+ > sOut += > "<tr>" + > "<td>" + ao.credit_id + "</td>" + > "<td>" + ao.created_on + "</td>" + >- "<td>" + ao.credit.amount_paid + "</td>" + >+ "<td>" + payment_or_void + "</td>" + > "<td>" + ao.amount + "</td>" + >- "<td>" + credit_type + "</td>" + >+ "<td>" + credit_type + offset_type + "</td>" + > "<td>" + ao.credit.notes + "</td>" + > "</tr>"; > } >@@ -319,6 +340,12 @@ function fnFormatCreditDetails( creditsTable, nTr ) { > "<i class='icon-print'></i> " + _("Print receipt") + > "</button>"; > >+ if ( ! oData.amount_voided ) { >+ sOut += "<a class='credit_void btn btn-small noprint' style='margin:5px;' onclick='accountVoid(\"credit\"," + oData.credit_id + ")'>" + >+ "<i class='icon-remove-sign'></i> " + _("Void payment") + >+ "</a>"; >+ } >+ > var account_offsets = oData.account_offsets; > > if ( account_offsets.length ) { >@@ -331,6 +358,7 @@ function fnFormatCreditDetails( creditsTable, nTr ) { > "<th>" + _("Description") + "</th>" + > "<th>" + _("Type") + "</th>" + > "<th>" + _("Amount") + "</th>" + >+ "<th>" + _("Amount applied") + "</th>" + > "<th>" + _("Remaining") + "</th>" + > "<th>" + _("Created on") + "</th>" + > "<th>" + _("Updated on") + "</th>" + >@@ -342,12 +370,16 @@ function fnFormatCreditDetails( creditsTable, nTr ) { > for ( var i = 0; i < account_offsets.length; i++ ) { > ao = account_offsets[i]; > debit_type = STRINGS["DebitTypes"][ao.debit.type] || ao.debit.type; >+ offset_type = STRINGS["OffsetTypes"][ao.type] || ao.type; >+ if ( offset_type ) offset_type = " (" + offset_type + ") "; >+ > sOut += > "<tr>" + > "<td>" + ao.debit.debit_id + "</td>" + > "<td>" + ao.debit.description + "</td>" + >- "<td>" + debit_type + "</td>" + >+ "<td>" + debit_type + offset_type + "</td>" + > "<td>" + ao.debit.amount_original + "</td>" + >+ "<td>" + ao.amount + "</td>" + > "<td>" + ao.debit.amount_outstanding + "</td>" + > "<td>" + ao.debit.created_on + "</td>" + > "<td>" + ao.debit.updated_on + "</td>" + >@@ -369,6 +401,12 @@ function fnFormatCreditDetails( creditsTable, nTr ) { > function accountPrint( type, id ) { > window.open( "/cgi-bin/koha/members/account_print.pl?type=" + type + "&id=" + id ); > } >+ >+function accountVoid( type, id ) { >+ if ( confirm(_("Are you sure you want to void this transaction?")) ) { >+ window.location.href = "/cgi-bin/koha/members/account_void.pl?borrowernumber=" + [% borrowernumber %] + "&id=" + id; >+ } >+} > //]]> > </script> > </head> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/account_payment.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/account_payment.tt >index e37b1d9..d8c92c8 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/account_payment.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/account_payment.tt >@@ -4,7 +4,6 @@ > <title>Koha › Patrons › Pay Fines for [% borrower.firstname %] [% borrower.surname %]</title> > [% INCLUDE 'doc-head-close.inc' %] > [% INCLUDE 'browser-strings.inc' %] >-<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script> > <script type= "text/javascript"> > //<![CDATA[ > $( document ).ready(function() { >diff --git a/members/account_void.pl b/members/account_void.pl >new file mode 100755 >index 0000000..fffc995 >--- /dev/null >+++ b/members/account_void.pl >@@ -0,0 +1,38 @@ >+#!/usr/bin/perl >+ >+# Copyright 2013 ByWater Solutions >+# >+# 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, write to the Free Software Foundation, Inc., >+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. >+ >+use Modern::Perl; >+ >+use CGI; >+ >+use C4::Auth; >+use C4::Output; >+use Koha::Accounts; >+ >+my $cgi = new CGI; >+ >+my $id = $cgi->param('id'); >+my $borrowernumber = $cgi->param('borrowernumber'); >+ >+if ( checkauth( $cgi, 0, { borrowers => 1 }, 'intranet' ) ) { >+ VoidCredit( { id => $id } ); >+ >+ print $cgi->redirect( >+ "/cgi-bin/koha/members/account.pl?borrowernumber=$borrowernumber"); >+} >-- >1.7.2.5
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 6427
:
21922
|
22704
|
22705
|
22708
|
22709
|
22710
|
22741
|
22870
|
22871
|
22872
|
22873
|
22874
|
22875
|
22876
|
22881
|
22889
|
22940
|
22948
|
22949
|
22995
|
23000
|
23137
|
23158
|
23161
|
23171
|
23186
|
23269
|
23275
|
23276
|
23391
|
23392
|
23400
|
23401
|
23402
|
23403
|
23404
|
23405
|
23406
|
23407
|
23408
|
23409
|
23410
|
23411
|
23412
|
23413
|
23420
|
23421
|
23422
|
23423
|
23424
|
23425
|
23426
|
23427
|
23428
|
23429
|
23430
|
23431
|
23432
|
23433
|
23440
|
23441
|
23442
|
23443
|
23444
|
23445
|
23446
|
23447
|
23448
|
23449
|
23450
|
23451
|
23452
|
23453
|
23454
|
23458
|
23459
|
23460
|
23461
|
23462
|
23463
|
23464
|
23465
|
23466
|
23467
|
23468
|
23469
|
23470
|
23471
|
23603
|
23643
|
23644
|
23645
|
23646
|
23647
|
23648
|
23649
|
23650
|
23651
|
23652
|
23653
|
23654
|
23655
|
23656
|
23657
|
23937
|
23938
|
23939
|
23940
|
23941
|
23942
|
23943
|
23944
|
23945
|
23946
|
23947
|
23948
|
23949
|
23950
|
23951
|
24612
|
24613
|
24614
|
24615
|
24616
|
24617
|
24618
|
24619
|
24620
|
24621
|
24622
|
24623
|
24624
|
24625
|
24626
|
24627
|
24628
|
24757
|
24758
|
24759
|
24760
|
24761
|
24762
|
24763
|
24764
|
24765
|
24766
|
24767
|
24768
|
24769
|
24770
|
24771
|
24772
|
24777
|
24792
|
24793
|
24794
|
24795
|
24796
|
24797
|
24798
|
24799
|
24800
|
24801
|
24802
|
24803
|
24804
|
24805
|
24806
|
24807
|
24808
|
24809
|
24810
|
24811
|
24812
|
24813
|
24814
|
24815
|
24816
|
24817
|
24818
|
24819
|
24820
|
24821
|
24822
|
24823
|
24824
|
24825
|
24826
|
24827
|
24828
|
24829
|
24830
|
24831
|
24832
|
24833
|
24834
|
24835
|
24836
|
24837
|
24838
|
24839
|
24840
|
24841
|
24842
|
24843
|
24844
|
25777
|
25778
|
25779
|
25780
|
25781
|
25782
|
25783
|
25784
|
25785
|
25786
|
25787
|
25788
|
25789
|
25790
|
25791
|
25792
|
25793
|
25794
|
25795
|
25796
|
25797
|
25798
|
25799
|
25800
|
25801
|
25802
|
25803
|
25804
|
25805
|
25806
|
25807
|
25808
|
25809
|
25810
|
25811
|
25812
|
25813
|
25814
|
25815
|
25816
|
25930
|
25932
|
25933
|
25934
|
26033
|
26034
|
26035
|
26036
|
26107
|
27167
|
27168
|
27169
|
27170
|
27171
|
27172
|
27173
|
27174
|
27175
|
27176
|
27177
|
27178
|
27179
|
27180
|
27181
|
27182
|
27183
|
27184
|
27185
|
27186
|
27187
|
27189
|
27190
|
27197
|
28067
|
28068
|
28069
|
28070
|
28071
|
28072
|
28073
|
28074
|
28075
|
28076
|
28077
|
28078
|
28079
|
28080
|
28081
|
28082
|
28083
|
28084
|
28085
|
28086
|
28087
|
28088
|
28089
|
28090
|
28091
|
28527
|
28528
|
28529
|
28530
|
28531
|
28532
|
28533
|
28534
|
28535
|
28536
|
28537
|
28538
|
28539
|
28540
|
28541
|
28542
|
28543
|
28544
|
28545
|
28546
|
28547
|
28548
|
28549
|
28550
|
28551
|
28552
|
28553
|
28555
|
28556
|
28561
|
28563
|
28564
|
28795
|
28796
|
28797
|
28798
|
28799
|
28800
|
28801
|
28802
|
28803
|
28804
|
28805
|
28806
|
28807
|
28808
|
28809
|
28810
|
28811
|
28812
|
28813
|
28814
|
28815
|
28816
|
28817
|
28818
|
28819
|
28820
|
28821
|
28822
|
28887
|
28888
|
28889
|
28890
|
28909
|
29176
|
29230
|
29231
|
29232
|
29233
|
29234
|
29235
|
29236
|
29237
|
29238
|
29239
|
29240
|
29241
|
29242
|
29243
|
29244
|
29245
|
29246
|
29247
|
29248
|
29249
|
29250
|
29251
|
29252
|
29253
|
29254
|
29255
|
29256
|
29257
|
29258
|
29259
|
29260
|
29261
|
29262
|
29263
|
29264
|
29265
|
29706
|
29707
|
29708
|
29709
|
29710
|
29711
|
29712
|
29713
|
29714
|
29715
|
29716
|
29717
|
29719
|
29720
|
29721
|
29722
|
29723
|
29724
|
29725
|
29726
|
29727
|
29728
|
29729
|
29730
|
30271
|
30272
|
30273
|
30274
|
30275
|
30276
|
30277
|
30278
|
30279
|
30280
|
30281
|
30282
|
30320
|
30321
|
30322
|
30323
|
30324
|
30325
|
30326
|
30327
|
30328
|
30329
|
30330
|
30331
|
30416
|
30417
|
30418
|
30419
|
30420
|
30421
|
30422
|
30423
|
30424
|
30425
|
30426
|
30427
|
31477
|
31478
|
31479
|
31480
|
31481
|
31482
|
31483
|
31484
|
31485
|
31486
|
31487
|
31488
|
31754
|
31755
|
31756
|
31757
|
31758
|
31759
|
31760
|
31761
|
31762
|
31763
|
31764
|
31765
|
31766
|
31767
|
31768
|
31769
|
31770
|
31771
|
31772
|
31773
|
31774
|
31775
|
31776
|
31777
|
32478
|
32479
|
32480
|
32481
|
32482
|
32483
|
32484
|
32485
|
32486
|
32487
|
32488
|
32489
|
32591
|
32592
|
32593
|
32594
|
32595
|
32596
|
32597
|
32598
|
32599
|
32600
|
32601
|
32602
|
32827
|
32828
|
32829
|
32830
|
32831
|
32832
|
32833
|
32834
|
32835
|
32836
|
32837
|
32838
|
33251
|
33252
|
33253
|
33254
|
33255
|
33256
|
33257
|
33258
|
33259
|
33260
|
33261
|
33262
|
34096
|
34097
|
34098
|
34099
|
34100
|
34101
|
34102
|
34103
|
34104
|
34105
|
34106
|
34107
|
34204
|
34205
|
34206
|
34207
|
34208
|
34209
|
34210
|
34211
|
34212
|
34213
|
34214
|
34215
|
35196
|
35197
|
35198
|
35199
|
35200
|
35201
|
35202
|
35203
|
35204
|
35205
|
35206
|
35207
|
35208
|
35302
|
36324
|
36326
|
36327
|
36328
|
36329
|
36330
|
36331
|
36332
|
36333
|
36334
|
36335
|
36337
|
36338
|
36340
|
36380
|
36391
|
36393
|
37127
|
37128
|
37129
|
37130
|
37131
|
37133
|
37134
|
37135
|
37136
|
37137
|
37138
|
37139
|
37140
|
37141
|
37142
|
37143
|
37147
|
37148
|
37149
|
37150
|
37151
|
37152
|
37153
|
37154
|
37155
|
37156
|
37157
|
37158
|
37159
|
37160
|
37161
|
37162
|
37229
|
37230
|
37231
|
37232
|
37233
|
37234
|
37235
|
37236
|
37237
|
37238
|
37239
|
37240
|
37241
|
37242
|
37243
|
37244
|
38247
|
38248
|
38249
|
38250
|
38251
|
38252
|
38253
|
38254
|
38255
|
38256
|
38257
|
38258
|
38259
|
38260
|
38261
|
38262
|
39063
|
39064
|
39065
|
39066
|
39067
|
39069
|
39070
|
39071
|
39072
|
39073
|
39074
|
39075
|
39076
|
39077
|
39078
|
39079
|
39671
|
39672
|
39673
|
39674
|
39675
|
39676
|
39677
|
39678
|
39679
|
39680
|
39681
|
39682
|
39683
|
39684
|
39685
|
39686