Bugzilla – Attachment 72666 Details for
Bug 17047
Mana Knowledge Base : Data sharing
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 17047 - [QA Followup] - Fix untranslatable strings - Remove onclick html attribute - Remove useless passing of mana_id variable in serials-toolbar.inc - Remove using CGI::param in list context - remove new subs from serials/subscription-add.pl - remov
Bug-17047---QA-Followup---Fix-untranslatable-strin.patch (text/plain), 62.72 KB, created by
Alex Arnaud
on 2018-03-12 11:32:53 UTC
(
hide
)
Description:
Bug 17047 - [QA Followup] - Fix untranslatable strings - Remove onclick html attribute - Remove useless passing of mana_id variable in serials-toolbar.inc - Remove using CGI::param in list context - remove new subs from serials/subscription-add.pl - remov
Filename:
MIME Type:
Creator:
Alex Arnaud
Created:
2018-03-12 11:32:53 UTC
Size:
62.72 KB
patch
obsolete
>From 530b33501c7c00f22970b4b06b234670f1de1711 Mon Sep 17 00:00:00 2001 >From: Alex Arnaud <alex.arnaud@biblibre.com> >Date: Wed, 20 Sep 2017 14:55:53 +0000 >Subject: [PATCH] Bug 17047 - [QA Followup] - Fix untranslatable strings - > Remove onclick html attribute - Remove useless passing of mana_id variable in > serials-toolbar.inc - Remove using CGI::param in list context - remove new > subs from serials/subscription-add.pl - remove useless else - Explicitly list > possible template in svc/mana/search - Remove useless library imports - Add > unit tests for Koha/SharedContent.pm + code refactoring - Add mana config in > debian/templates/koha-conf-site.xml.in - Rename getToken and addvaluetofield > svc/mana scripts - Restore unit tests in > t/db_dependent/Serials/GetFictiveIssueNumber.t - Fix indentation - QA stuff > >--- > Koha/SharedContent.pm | 150 +++++----- > Koha/Subscription/Numberpatterns.pm | 32 ++ > debian/templates/koha-conf-site.xml.in | 3 + > installer/data/mysql/sysprefs.sql | 1 - > koha-tmpl/intranet-tmpl/lib/jquery/activatemana.js | 2 +- > .../en/includes/mana/mana-report-search-result.inc | 31 +- > .../mana/mana-subscription-search-result.inc | 30 +- > .../prog/en/includes/reports-toolbar.inc | 4 +- > .../prog/en/includes/serials-toolbar.inc | 43 ++- > .../en/modules/reports/guided_reports_start.tt | 10 +- > .../prog/en/modules/serials/subscription-add.tt | 2 +- > .../prog/en/modules/serials/subscription-detail.tt | 2 +- > .../intranet-tmpl/prog/js/subscription-add.js | 22 +- > reports/guided_reports.pl | 4 +- > serials/subscription-add.pl | 62 ++-- > serials/subscription-detail.pl | 6 +- > svc/mana/{addvaluetofield => increment} | 8 +- > svc/mana/search | 6 +- > svc/mana/share | 11 +- > svc/mana/{getToken => token} | 0 > svc/mana/use | 5 +- > t/db_dependent/Koha/SharedContent.t | 224 +++++++++++++- > t/db_dependent/Koha/Subscription/Numberpatterns.t | 97 ++++++ > t/db_dependent/Serials/GetFictiveIssueNumber.t | 332 ++++++++++++++------- > 24 files changed, 808 insertions(+), 279 deletions(-) > rename svc/mana/{addvaluetofield => increment} (85%) > rename svc/mana/{getToken => token} (100%) > create mode 100644 t/db_dependent/Koha/Subscription/Numberpatterns.t > >diff --git a/Koha/SharedContent.pm b/Koha/SharedContent.pm >index 30619d4..c54a8e1 100644 >--- a/Koha/SharedContent.pm >+++ b/Koha/SharedContent.pm >@@ -52,15 +52,15 @@ sub manaRequest { > $mana_request->content( to_json($content) ); > } > >- my $response = $userAgent->request($mana_request); >+ my $response = $userAgent->request($mana_request); > > eval { $result = from_json( $response->decoded_content, { utf8 => 1} ); }; > $result->{code} = $response->code; > if ( $@ ){ >- $result->{msg} = $response->{_msg}; >+ $result->{msg} = $@; > } > if ($response->is_error){ >- $result->{msg} = "An error occurred, mana server returned: ".$result->{msg}; >+ $result->{msg} = "An error occurred, mana server returned: " . $response->message; > } > return $result ; > } >@@ -70,21 +70,7 @@ sub manaRequest { > =cut > > sub manaIncrementRequest { >- my $resource = shift; >- my $id = shift; >- my $field = shift; >- my $step = shift; >- my $param; >- $param->{step} = $step || 1; >- $param->{id} = $id; >- $param->{resource} = $resource; >- $param = join '&', >- map { defined $param->{$_} ? $_ . "=" . $param->{$_} : () } >- keys %$param; >- my $url = "$MANA_IP/$resource/$id.json/increment/$field?$param"; >- my $request = HTTP::Request->new( POST => $url ); >- >- return manaRequest($request); >+ return manaRequest(buildRequest('increment', @_)); > } > > =head3 manaPostRequest >@@ -92,68 +78,52 @@ sub manaIncrementRequest { > =cut > > sub manaPostRequest { >- my $resource = shift; >- my $content = shift; >+ my ($lang, $loggedinuser, $resourceid, $resourcetype) = @_; >+ >+ my $content = prepareSharedData($lang, $loggedinuser, $resourceid, $resourcetype); > >- my $url = "$MANA_IP/$resource.json"; >- my $request = HTTP::Request->new( POST => $url ); >+ my $result = manaRequest(buildRequest('post', $resourcetype, $content)); > >- $content->{bulk_import} = 0; >- my $json = to_json( $content, { utf8 => 1 } ); >- $request->content($json); >- return manaRequest($request); >+ if ( $result and ($result->{code} eq "200" or $result->{code} eq "201") ) { >+ my $packages = "Koha::".ucfirst($resourcetype)."s"; >+ my $resource = $packages->find($resourceid); >+ eval { $resource->set( { mana_id => $result->{id} } )->store }; >+ } >+ return $result; > } > >-=head3 manaShareInfos >+=head3 prepareSharedData > > =cut > >-sub manaShareInfos{ >- my ($query, $loggedinuser, $ressourceid, $ressourcetype) = @_; >- my $mana_language; >- if ( $query->param('mana_language') ) { >- $mana_language = $query->param('mana_language'); >- } >- else { >- my $result = $mana_language = C4::Context->preference('language'); >- } >+sub prepareSharedData { >+ my ($lang, $loggedinuser, $ressourceid, $ressourcetype) = @_; >+ $lang ||= C4::Context->preference('language'); > > my $mana_email; > if ( $loggedinuser ne 0 ) { > my $borrower = Koha::Patrons->find($loggedinuser); >- if ($borrower){ >- $mana_email = $borrower->email >- if ( ( not defined($mana_email) ) or ( $mana_email eq '' ) ); >- $mana_email = $borrower->emailpro >- if ( ( not defined($mana_email) ) or ( $mana_email eq '' ) ); >- $mana_email = >- Koha::Libraries->find( C4::Context->userenv->{'branch'} )->branchemail >- if ( ( not defined($mana_email) ) or ( $mana_email eq '' ) ); >- } >+ $mana_email = $borrower->first_valid_email_address >+ || Koha::Libraries->find( C4::Context->userenv->{'branch'} )->branchemail > } > $mana_email = C4::Context->preference('KohaAdminEmailAddress') > if ( ( not defined($mana_email) ) or ( $mana_email eq '' ) ); >+ > my %versions = C4::Context::get_versions(); > > my $mana_info = { >- language => $mana_language, >+ language => $lang, > kohaversion => $versions{'kohaVersion'}, > exportemail => $mana_email > }; >- my ($ressource, $ressource_mana_info); >+ >+ my $ressource_mana_info; > my $packages = "Koha::".ucfirst($ressourcetype)."s"; > my $package = "Koha::".ucfirst($ressourcetype); > $ressource_mana_info = $package->get_sharable_info($ressourceid); > $ressource_mana_info = { %$ressource_mana_info, %$mana_info }; >- $ressource = $packages->find($ressourceid); >- >- my $result = Koha::SharedContent::manaPostRequest( $ressourcetype, >- $ressource_mana_info ); > >- if ( $result and ($result->{code} eq "200" or $result->{code} eq "201") ) { >- eval { $ressource->set( { mana_id => $result->{id} } )->store }; >- } >- return $result; >+ return $ressource_mana_info; > } > > =head3 manaGetRequestWithId >@@ -161,13 +131,7 @@ sub manaShareInfos{ > =cut > > sub manaGetRequestWithId { >- my $resource = shift; >- my $id = shift; >- >- my $url = "$MANA_IP/$resource/$id.json"; >- my $request = HTTP::Request->new( GET => $url ); >- >- return manaRequest($request); >+ return manaRequest(buildRequest('getwithid', @_)); > } > > =head3 manaGetRequest >@@ -175,16 +139,62 @@ sub manaGetRequestWithId { > =cut > > sub manaGetRequest { >- my $resource = shift; >- my $parameters = shift; >+ return manaRequest(buildRequest('get', @_)); >+} >+ >+=head3 buildRequest > >- $parameters = join '&', >- map { defined $parameters->{$_} ? $_ . "=" . $parameters->{$_} : () } >- keys %$parameters; >- my $url = "$MANA_IP/$resource.json?$parameters"; >- my $request = HTTP::Request->new( GET => $url ); >+=cut >+ >+sub buildRequest { >+ my $type = shift; >+ my $resource = shift; > >- return manaRequest($request); >+ if ( $type eq 'get' ) { >+ my $params = shift; >+ $params = join '&', >+ map { defined $params->{$_} ? $_ . "=" . $params->{$_} : () } >+ keys %$params; >+ my $url = "$MANA_IP/$resource.json?$params"; >+ return HTTP::Request->new( GET => $url ); >+ } >+ >+ if ( $type eq 'getwithid' ) { >+ my $id = shift; >+ >+ my $url = "$MANA_IP/$resource/$id.json"; >+ return HTTP::Request->new( GET => $url ); >+ } >+ >+ if ( $type eq 'post' ) { >+ my $content = shift; >+ >+ my $url = "$MANA_IP/$resource.json"; >+ my $request = HTTP::Request->new( POST => $url ); >+ >+ $content->{bulk_import} = 0; >+ my $json = to_json( $content, { utf8 => 1 } ); >+ $request->content($json); >+ >+ return $request; >+ } >+ >+ if ( $type eq 'increment' ) { >+ my $id = shift; >+ my $field = shift; >+ my $step = shift; >+ my $param; >+ >+ $param->{step} = $step || 1; >+ $param->{id} = $id; >+ $param->{resource} = $resource; >+ $param = join '&', >+ map { defined $param->{$_} ? $_ . "=" . $param->{$_} : () } >+ keys %$param; >+ my $url = "$MANA_IP/$resource/$id.json/increment/$field?$param"; >+ my $request = HTTP::Request->new( POST => $url ); >+ >+ } > } > > 1; >diff --git a/Koha/Subscription/Numberpatterns.pm b/Koha/Subscription/Numberpatterns.pm >index 271deb0..440489e 100644 >--- a/Koha/Subscription/Numberpatterns.pm >+++ b/Koha/Subscription/Numberpatterns.pm >@@ -52,6 +52,38 @@ sub uniqueLabel { > return $label; > } > >+=head3 new_or_existing >+ >+=cut >+ >+sub new_or_existing { >+ my ($self, $params) = @_; >+ >+ my $params_np; >+ if ( $params->{'numbering_pattern'} eq 'mana' ) { >+ foreach (qw/numberingmethod label1 add1 every1 whenmorethan1 setto1 >+ numbering1 label2 add2 every2 whenmorethan2 setto2 numbering2 >+ label3 add3 every3 whenmorethan3 setto3 numbering3/) { >+ $params_np->{$_} = $params->{$_} if $params->{$_}; >+ } >+ >+ my $existing = Koha::Subscription::Numberpatterns->search($params_np)->next(); >+ >+ if ($existing) { >+ return $existing->id; >+ } >+ >+ $params_np->{label} = Koha::Subscription::Numberpatterns->uniqueLabel($params->{'patternname'}); >+ $params_np->{description} = $params->{'sndescription'}; >+ >+ >+ my $subscription_np = Koha::Subscription::Numberpattern->new()->set($params_np)->store(); >+ return $subscription_np->id; >+ } >+ >+ return $params->{'numbering_pattern'}; >+} >+ > =head3 type > > =cut >diff --git a/debian/templates/koha-conf-site.xml.in b/debian/templates/koha-conf-site.xml.in >index 85b54a9..a0263a3 100644 >--- a/debian/templates/koha-conf-site.xml.in >+++ b/debian/templates/koha-conf-site.xml.in >@@ -269,6 +269,9 @@ __END_SRU_PUBLICSERVER__ > <logdir>__LOG_DIR__</logdir> > <docdir>/usr/share/doc/koha-common</docdir> > <backupdir>/var/spool/koha/__KOHASITE__</backupdir> >+ <!-- URL of the mana KB server --> >+ <!-- alternative value http://mana-test.koha-community.org to query the test server --> >+ <mana_config>https://mana-kb.koha-community.org</mana_config> > <!-- Enable the two following to allow superlibrarians to download > database and configuration dumps (respectively) from the Export > tool --> >diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql >index eb5393f..de61844 100644 >--- a/installer/data/mysql/sysprefs.sql >+++ b/installer/data/mysql/sysprefs.sql >@@ -258,7 +258,6 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` > ('LocalHoldsPriorityPatronControl', 'PickupLibrary', 'HomeLibrary|PickupLibrary', 'decides if the feature operates using the library set as the patron''s home library, or the library set as the pickup library for the given hold.', 'Choice'), > ('makePreviousSerialAvailable','0','','make previous serial automatically available when collecting a new serial. Please note that the item-level_itypes syspref must be set to specific item.','YesNo'), > ('Mana','1',NULL,'request to Mana Webservice. Mana centralize commun information between other Koha to facilitate the creation of new subscriptions, vendors, report queries etc... You can search, share, import and comment the content of Mana.','YesNo'), >-('hide_marc','0',NULL,'If ON, disables display of MARC fields, subfield codes & indicators (still shows data)','YesNo'), > ('ManInvInNoissuesCharge','1',NULL,'MANUAL_INV charges block checkouts (added to noissuescharge).','YesNo'), > ('MARCAuthorityControlField008','|| aca||aabn | a|a d',NULL,'Define the contents of MARC21 authority control field 008 position 06-39','Textarea'), > ('MarcFieldsToOrder','',NULL,'Set the mapping values for a new order line created from a MARC record in a staged file. In a YAML format.','textarea'), >diff --git a/koha-tmpl/intranet-tmpl/lib/jquery/activatemana.js b/koha-tmpl/intranet-tmpl/lib/jquery/activatemana.js >index b1cb9c9..49adfdd 100644 >--- a/koha-tmpl/intranet-tmpl/lib/jquery/activatemana.js >+++ b/koha-tmpl/intranet-tmpl/lib/jquery/activatemana.js >@@ -5,7 +5,7 @@ $(document).ready(function(){ > var myemail = $("#email").val() > $.ajax( { > type: "POST", >- url: "/cgi-bin/koha/svc/mana/getToken", >+ url: "/cgi-bin/koha/svc/mana/token", > data: { lastname: mylastname, firstname: myfirstname, email: myemail}, > dataType: "json", > }) >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/mana/mana-report-search-result.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/mana/mana-report-search-result.inc >index 2de9fea..312af44 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/mana/mana-report-search-result.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/mana/mana-report-search-result.inc >@@ -3,6 +3,28 @@ > [% USE AuthorisedValues %] > [% USE Branches %] > >+<script type="text/javascript"> >+//<![CDATA[ >+$(document).ready(function() { >+ $(document).on('click', 'button.mana-use', function() { >+ id = $(this).attr('id'); >+ mana_use(id.substr(9)); >+ }); >+ >+ $(document).on('change', 'select.mana-actions', function() { >+ report_id = $(this).attr('id').substr(13); >+ if ($(this).val() == 'other') { >+ $('input#selected_id').val(report_id); >+ $('#comment_box').modal('show'); >+ } else { >+ comment_id = $(this).val(); >+ mana_increment(comment_id, 'resource_comment', 'nb'); >+ } >+ }); >+}); >+//]]> >+</script> >+ > [% IF statuscode == "200" AND reports %] > <table id="mana_results_datatable" width=100%> > <thead> >@@ -45,14 +67,13 @@ > > [% UNLESS search_only %] > <td> >- <button onclick="mana_use([% report.id %])"> <i class="fa fa-inbox"></i> Use</button> >- <input hidden type="text" id="selectedcomment"> >- <select> >+ <button class="mana-use" id="mana-use-[% report.id %]"><i class="fa fa-inbox"></i> Use</button> >+ <select class="mana-actions" id="mana-actions-[% report.id %]"> > <option selected disabled>Report mistake</option> > [% FOREACH comment IN report.comments %] >- <option class="actionreport1" value="[% comment.id %]" onclick="mana_increment('[% comment.id %]', 'resource_comment', 'nb')"> [% comment.message %] ([% comment.nb %]) >+ <option value="[% comment.id %]">[% comment.message %] ([% comment.nb %])</option> > [% END %] >- <option data-toggle="modal" onclick="($('#selected_id').val($('.rowid').val()))" data-target="#comment_box"> other >+ <option>other</option> > </select> > <button hidden class="actionreport2" hidden> Cancel</button> > </td> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/mana/mana-subscription-search-result.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/mana/mana-subscription-search-result.inc >index e269237..30e10ca 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/mana/mana-subscription-search-result.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/mana/mana-subscription-search-result.inc >@@ -3,6 +3,27 @@ > [% USE AuthorisedValues %] > [% USE Branches %] > >+<script type="text/javascript"> >+//<![CDATA[ >+$(document).ready(function() { >+ $(document).on('click', 'button.mana-use', function() { >+ id = $(this).attr('id'); >+ mana_use(id.substr(9)); >+ }); >+ >+ $(document).on('change', 'select.mana-actions', function() { >+ report_id = $(this).attr('id').substr(13); >+ if ($(this).val() == 'other') { >+ $('input#selected_id').val(report_id); >+ $('#comment_box').modal('show'); >+ } else { >+ comment_id = $(this).val(); >+ mana_increment(comment_id, 'resource_comment', 'nb'); >+ } >+ }); >+}); >+//]]> >+</script> > > [% IF statuscode == "200" %] > <table id="mana_results_datatable" width=100%> >@@ -43,14 +64,13 @@ > > [% UNLESS search_only %] > <td> >- <button onclick="mana_use([% subscription.id %])"> <i class="fa fa-inbox"></i> Use</button> >- <input hidden type="text" id="selectedcomment"> >- <select> >+ <button class="mana-use" id="mana-use-[% subscription.id %]"><i class="fa fa-inbox"></i> Use</button> >+ <select class="mana-actions" id="mana-actions-[% subscription.id %]"> > <option selected disabled>Report mistake</option> > [% FOREACH comment IN subscription.comments %] >- <option class="actionreport1" value="[% comment.id %]" onclick="mana_increment('[% comment.id %]', 'resource_comment', 'nb')"> [% comment.message %] ([% comment.nb %]) >+ <option value="[% comment.id %]"> [% comment.message %] ([% comment.nb %])</option> > [% END %] >- <option data-toggle="modal" onclick="($('#selected_id').val($('.rowid').val()))" data-target="#comment_box"> other >+ <option>other</option> > </select> > <button hidden class="actionreport2" hidden> Cancel</button> > </td> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/reports-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/reports-toolbar.inc >index 2e055ef..d5c417f 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/reports-toolbar.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/reports-toolbar.inc >@@ -109,7 +109,7 @@ > function mana_increment(mana_id, resourcename, fieldvalue, stepvalue = 1){ > $.ajax( { > type: "POST", >- url: "/cgi-bin/koha/svc/mana/addvaluetofield", >+ url: "/cgi-bin/koha/svc/mana/increment", > data: {id: mana_id, field: fieldvalue, resource: resourcename, step: stepvalue}, > datatype: "json", > }).done( function() { >@@ -144,7 +144,7 @@ > }) > .done( function( result ) { > $("#mana_search_result .modal-body").html(result); >- $("#mana_search_result_label").text("Results from Mana Knowledge Base"); >+ $("#mana_search_result_label").text(_("Results from Mana Knowledge Base")); > $("#mana_results_datatable").dataTable($.extend(true, {}, dataTablesDefaults,{ > "sPaginationType":"four_button", > "autoWidth": false, >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/serials-toolbar.inc >index fcfaceb..34c3d92 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-toolbar.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/serials-toolbar.inc >@@ -1,4 +1,43 @@ > [% INCLUDE 'blocking_errors.inc' %] >+<script type="text/javascript"> >+ //<![CDATA[ >+ >+ function confirm_close() { >+ var is_confirmed = confirm(_("Are you sure you want to close this subscription?")); >+ if (is_confirmed) { >+ window.location="subscription-detail.pl?subscriptionid=[% subscriptionid %]&op=close"; >+ } >+ } >+ function confirm_reopen() { >+ var is_confirmed = confirm(_("Are you sure you want to reopen this subscription?")); >+ if (is_confirmed) { >+ window.location="subscription-detail.pl?subscriptionid=[% subscriptionid %]&op=reopen"; >+ } >+ } >+ >+ $(document).ready(function() { >+ $("#deletesub").click(function(){ >+ confirm_deletion(); >+ return false; >+ }); >+ $("#reopen").click(function(){ >+ confirm_reopen(); >+ return false; >+ }); >+ $("#close").click(function(){ >+ confirm_close(); >+ return false; >+ }); >+ $("#renew").click(function(){ >+ popup([% subscriptionid %]); >+ return false; >+ }) >+ $("#mana-subscription-share").click(function() { >+ window.location="subscription-detail.pl?subscriptionid=[% subscriptionid %]&op=share"; >+ }); >+ }); >+ //]]> >+ </script> > [% IF subscriptionid and ( CAN_user_serials_edit_subscription || CAN_user_serials_create_subscription || CAN_user_serials_delete_subscription || CAN_user_serials_receive_serials ) %] > <div id="toolbar" class="btn-toolbar"> > [% IF CAN_user_serials_create_subscription %] >@@ -11,7 +50,7 @@ > [% IF one_language_enabled==0 or mana_id %] > <div class="btn-group"><a data-toggle="modal" data-toggle="tooltip" title="Share the subscription with other librairies. Your email address will be associated to your sharing." data-target="#mana_share_modal" class="btn btn-default btn-sm"><i class="fa fa-share-alt"></i> Share</a></div> > [% ELSE %] >- <div class="btn-group" data-toggle="tooltip" title="Share the subscription with other libraries. Your email address will be associated to your sharing."><a class="btn btn-default btn-sm" onclick="share()"><i class="fa fa-share-alt"></i> Share</a></div> >+ <div class="btn-group" id="mana-subscription-share" data-toggle="tooltip" title="Share the subscription with other libraries. Your email address will be associated to your sharing."><a class="btn btn-default btn-sm"><i class="fa fa-share-alt"></i> Share</a></div> > [% END %] > [% END %] > [% END %] >@@ -161,7 +200,7 @@ > [% IF one_language_enabled==0 %] > <button type="submit" form="mana_share_form" class="btn btn-primary">Share</button> > [% ELSE %] >- <div class="btn-group"><a class="btn btn-primary" onclick="share()">Share</a></div> >+ <div class="btn-group" id="mana-subscription-share"><a class="btn btn-primary">Share</a></div> > [% END %] > </div> > </div> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt >index 41bbb9e..d75b5f2 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt >@@ -430,7 +430,7 @@ canned reports and writing custom SQL reports.</p> > [% IF one_language_enabled==0 %] > <button id="ManaShareButton" type="submit" form="mana_share_form" class="btn btn-primary">Share</button> > [% ELSE %] >- <div id="ManaShareButton" class="btn-group"><a class="btn btn-primary"'onclick="share()">Share</a></div> >+ <div id="ManaShareButton" class="btn-group"><a class="btn btn-primary">Share</a></div> > [% END %] > </div> > </div> >@@ -1104,10 +1104,6 @@ Sub report:<select name="subreport"> > } > } > >- function share() { >- window.location="/cgi-bin/koha/reports/guided_reports.pl?phase=Save"; >- } >- > $(document).ready(function(){ > $('#limit').change(function() { > $('#limitselect').submit(); >@@ -1317,6 +1313,10 @@ Sub report:<select name="subreport"> > $(".delete").on("click",function(){ > return confirmDelete(MSG_CONFIRM_DELETE); > }); >+ >+ $('div#ManaShareButton').click(function() { >+ window.location="/cgi-bin/koha/reports/guided_reports.pl?phase=Share"; >+ }); > }); > > function addColumn() { >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt >index a3a2019..22912f5 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt >@@ -488,7 +488,7 @@ width: 300px; /* not enough for IE7 apparently */ > <fieldset class="action"> > <input type="button" id="subscription_add_previous" value="<< Previous" style="float:left;"/> > <input id="testpatternbutton" type="button" value="Test prediction pattern" /> >- <input type="submit" onclick="removeDisabledAttr()" value="Save subscription" style="float:right;" accesskey="w"/> >+ <input id="save-subscription" type="submit" value="Save subscription" style="float:right;" accesskey="w"/> > </fieldset> > </div> > </div> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-detail.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-detail.tt >index 4fd5b90..1ce4520 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-detail.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-detail.tt >@@ -18,7 +18,7 @@ > <div id="bd"> > <div id="yui-main"> > <div class="yui-b"> >- [% INCLUDE 'serials-toolbar.inc' mana_id = mana_id %] >+ [% INCLUDE 'serials-toolbar.inc' %] > > <h1>Subscription for [% bibliotitle%] [% IF closed %](closed)[% END %]</h1> > [% IF ( abouttoexpire ) %] >diff --git a/koha-tmpl/intranet-tmpl/prog/js/subscription-add.js b/koha-tmpl/intranet-tmpl/prog/js/subscription-add.js >index 3e75ffe..0958dfa 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/subscription-add.js >+++ b/koha-tmpl/intranet-tmpl/prog/js/subscription-add.js >@@ -393,7 +393,7 @@ function show_page_2() { > } > > function mana_search() { >- $("#mana_search").html("<p>Mana kb is being asked for your subscription..</p>"); >+ $("#mana_search").html("<p>" + _("Mana kb is being asked for your subscription..") + "</p>"); > $("#mana_search").show(); > > $.ajax({ >@@ -404,7 +404,7 @@ function mana_search() { > }) > .done( function( result ) { > $("#mana_search_result .modal-body").html(result); >- $("#mana_search_result_label").text("Results from Mana Knowledge Base"); >+ $("#mana_search_result_label").text(_("Results from Mana Knowledge Base")); > $("#mana_results_datatable").dataTable($.extend(true, {}, dataTablesDefaults, { > "sPaginationType": "four_button", > "order":[[4, "desc"], [5, "desc"]], >@@ -419,10 +419,10 @@ function mana_search() { > ] > })); > if( $("#mana_results_datatable").length && $("td.dataTables_empty").length == 0){ >- $("#mana_search").html("<p>Subscription found on Mana Knowledge Base:</p><p> <a style='cursor:pointer' data-toggle='modal' data-target='#mana_search_result'>Quick fill</a></p>"); >+ $("#mana_search").html("<p>" + _("Subscription found on Mana Knowledge Base:") + "</p><p> <a style='cursor:pointer' data-toggle='modal' data-target='#mana_search_result'>" + _("Quick fill") + "</a></p>"); > } > else if ( $("#mana_results_datatable").length ){ >- $("#mana_search").html("<p>No subscription found on Mana Knowledge Base :(</p><p> Please feel free to share you pattern with all others librarians once you are done</p>"); >+ $("#mana_search").html("<p>" + _("No subscription found on Mana Knowledge Base :(") + "</p><p>" + _(" Please feel free to share you pattern with all others librarians once you are done") + "</p>"); > } > else{ > $("#mana_search").html( result ); >@@ -455,10 +455,7 @@ function mana_search() { > mana_increment($("#selectedcomment").val(), 'resource_comment', 'nb', -1); > }); > >- }).fail(function(result){ >- console.log( msg ); >- console.log( longmsg ); >- }); >+ }) > } > > function mana_comment( target_id, manamsg, resource_type ){ >@@ -473,7 +470,7 @@ function mana_comment( target_id, manamsg, resource_type ){ > function mana_increment(mana_id, resource, fieldvalue, stepvalue = 1){ > $.ajax( { > type: "POST", >- url: "/cgi-bin/koha/svc/mana/addvaluetofield", >+ url: "/cgi-bin/koha/svc/mana/increment", > data: {id: mana_id, resource: resource, field: fieldvalue, step: stepvalue}, > datatype: "json", > }) >@@ -554,10 +551,6 @@ function mana_use(mana_id){ > }); > } > >-function removeDisabledAttr() { >- $('select:disabled').removeAttr('disabled'); >-} >- > $(document).ready(function() { > mana_search(); > $("#displayexample").hide(); >@@ -699,4 +692,7 @@ $(document).ready(function() { > e.preventDefault(); > testPredictionPattern(); > }); >+ $('#save-subscription').on("click", function(e){ >+ $('select:disabled').removeAttr('disabled'); >+ }); > }); >\ No newline at end of file >diff --git a/reports/guided_reports.pl b/reports/guided_reports.pl >index 016439b..55f4784 100755 >--- a/reports/guided_reports.pl >+++ b/reports/guided_reports.pl >@@ -181,7 +181,7 @@ elsif ( $phase eq 'Show SQL'){ > 'notes' => $report->{notes}, > 'sql' => $report->{savedsql}, > 'showsql' => 1, >- 'mana_success' => $input->param('mana_success'), >+ 'mana_success' => scalar $input->param('mana_success'), > ); > } > >@@ -658,7 +658,7 @@ elsif ( $phase eq 'Save Report' ) { > } > > elsif ($phase eq 'Share'){ >- my $result = Koha::SharedContent::manaShareInfos($input, $borrowernumber, $input->param('reportid'), 'report'); >+ my $result = Koha::SharedContent::manaPostRequest($input->param('mana_language'), $borrowernumber, scalar $input->param('reportid'), 'report'); > if ( $result ) { > print $input->redirect("/cgi-bin/koha/reports/guided_reports.pl?phase=Use%20saved&manamsg=".$result->{msg}); > }else{ >diff --git a/serials/subscription-add.pl b/serials/subscription-add.pl >index e39ac45..e9218f5 100755 >--- a/serials/subscription-add.pl >+++ b/serials/subscription-add.pl >@@ -289,35 +289,9 @@ sub _guess_enddate { > return $enddate; > } > >-sub manage_subscription_numbering_pattern_id { >- my $params; >- if ( $query->param('numbering_pattern') eq 'mana' ) { >- foreach (qw/numberingmethod label1 add1 every1 whenmorethan1 setto1 >- numbering1 label2 add2 every2 whenmorethan2 setto2 numbering2 >- label3 add3 every3 whenmorethan3 setto3 numbering3/) { >- $params->{$_} = $query->param($_) if $query->param($_); >- } >- >- my $existing = Koha::Subscription::Numberpatterns->search($params)->next(); >- >- if ($existing) { >- return $existing->id; >- } >- >- $params->{label} = Koha::Subscription::Numberpatterns->uniqueLabel($query->param('patternname')); >- $params->{description} = $query->param('sndescription'); >- >- >- my $subscription_np = Koha::Subscription::Numberpattern->new()->set($params)->store(); >- return $subscription_np->id; >- } >- >- return $query->param('numbering_pattern'); >-} >- >-sub manage_subscription_frequencies_id { >- my $periodicity; >- if ( $query->param('frequency') eq 'mana' ) { >+sub redirect_add_subscription { >+ my $periodicity = $query->param('frequency'); >+ if ($periodicity eq 'mana') { > my $subscription_freq = Koha::Subscription::Frequency->new()->set( > { > description => $query->param('sfdescription'), >@@ -328,15 +302,7 @@ sub manage_subscription_frequencies_id { > )->store(); > $periodicity = $subscription_freq->id; > } >- else { >- $periodicity = $query->param('frequency'); >- } >- return $periodicity; >-} >- >-sub redirect_add_subscription { >- my $periodicity = manage_subscription_frequencies_id(); >- my $numberpattern = manage_subscription_numbering_pattern_id(); >+ my $numberpattern = Koha::Subscription::Numberpatterns->new_or_existing($query->Vars); > > my $auser = $query->param('user'); > my $branchcode = $query->param('branchcode'); >@@ -378,9 +344,6 @@ sub redirect_add_subscription { > $mana_id = $query->param('mana_id'); > Koha::SharedContent::manaIncrementRequest("subscription",$mana_id, "nbofusers"); > } >- else { >- $mana_id = undef; >- } > > my $startdate = output_pref( { str => scalar $query->param('startdate'), dateonly => 1, dateformat => 'iso' } ); > my $enddate = output_pref( { str => scalar $query->param('enddate'), dateonly => 1, dateformat => 'iso' } ); >@@ -404,7 +367,7 @@ sub redirect_add_subscription { > $skip_serialseq, $mana_id > ); > if ( (C4::Context->preference('Mana')) and ( grep { $_ eq "subscription" } split(/,/, C4::Context->preference('AutoShareWithMana'))) ){ >- my $result = Koha::SharedContent::manaShareInfos( $query, $loggedinuser, $subscriptionid, 'subscription'); >+ my $result = Koha::SharedContent::manaPostRequest( $query->param('mana_language'), $loggedinuser, $subscriptionid, 'subscription'); > $template->param( mana_msg => $result->{msg} ); > } > my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } ); >@@ -434,8 +397,19 @@ sub redirect_mod_subscription { > ? output_pref( { str => $nextacquidate, dateonly => 1, dateformat => 'iso' } ) > : $firstacquidate; > >- my $periodicity = manage_subscription_frequencies_id(); >- my $numberpattern = manage_subscription_numbering_pattern_id(); >+ my $periodicity = $query->param('frequency'); >+ if ($periodicity eq 'mana') { >+ my $subscription_freq = Koha::Subscription::Frequency->new()->set( >+ { >+ description => $query->param('sfdescription'), >+ unit => $query->param('unit'), >+ unitsperissue => $query->param('unitsperissue'), >+ issuesperunit => $query->param('issuesperunit'), >+ } >+ )->store(); >+ $periodicity = $subscription_freq->id; >+ } >+ my $numberpattern = Koha::Subscription::Numberpatterns->new_or_existing($query->Vars); > > my $subtype = $query->param('subtype'); > my $sublength = $query->param('sublength'); >diff --git a/serials/subscription-detail.pl b/serials/subscription-detail.pl >index 6c25f7e..ffb458e 100755 >--- a/serials/subscription-detail.pl >+++ b/serials/subscription-detail.pl >@@ -33,11 +33,7 @@ use Koha::Acquisition::Bookseller; > use Date::Calc qw/Today Day_of_Year Week_of_Year Add_Delta_Days/; > use Carp; > >-use LWP::UserAgent; > use Koha::SharedContent; >-use Koha::Patrons; >-use Koha::Subscriptions; >-use Koha::Libraries; > > my $query = new CGI; > my $op = $query->param('op') || q{}; >@@ -100,7 +96,7 @@ if ($op eq 'del') { > } > } > elsif ( $op and $op eq "share" ) { >- my $result = Koha::SharedContent::manaShareInfos($query, $loggedinuser, $subscriptionid, 'subscription'); >+ my $result = Koha::SharedContent::manaPostRequest($query->param('mana_language'), $loggedinuser, $subscriptionid, 'subscription'); > $template->param( mana_code => $result->{msg} ); > $subs->{mana_id} = $result->{id}; > } >diff --git a/svc/mana/addvaluetofield b/svc/mana/increment >similarity index 85% >rename from svc/mana/addvaluetofield >rename to svc/mana/increment >index 18ae23a..b8e5f8e 100755 >--- a/svc/mana/addvaluetofield >+++ b/svc/mana/increment >@@ -38,5 +38,11 @@ my ( $auth_status, $sessionID ) = > if ( $auth_status ne "ok" ) { > exit 0; > } >-my $result = Koha::SharedContent::manaIncrementRequest($input->param('resource'), $input->param('id'), $input->param('field'), $input->param('step') ); >+my $result = Koha::SharedContent::manaIncrementRequest( >+ scalar $input->param('resource'), >+ scalar $input->param('id'), >+ scalar $input->param('field'), >+ scalar $input->param('step') >+); >+ > return $result; >diff --git a/svc/mana/search b/svc/mana/search >index 5ae14b3..96cb56f 100755 >--- a/svc/mana/search >+++ b/svc/mana/search >@@ -39,7 +39,11 @@ if ( $auth_status ne "ok" ) { > } > > my $templatename; >-$templatename = "mana/mana-".$input->param( "resource" )."-search-result.tt"; >+if ($input->param( "resource" ) eq 'report') { >+ $templatename = "mana/mana-report-search-result.tt"; >+} else { >+ $templatename = "mana/mana-subscription-search-result.tt"; >+} > > my ( $template, $loggedinuser, $cookie ) = get_template_and_user( > { >diff --git a/svc/mana/share b/svc/mana/share >index 47db3e1..87de9cf 100755 >--- a/svc/mana/share >+++ b/svc/mana/share >@@ -45,11 +45,14 @@ $content->{resource_id} = $input->param("resource_id"); > $content->{resource_type} = $input->param("resource"); > $content->{message} = $input->param("message"); > Koha::SharedContent::manaPostRequest('resource_comment', $content); >- my $package = "Koha::".ucfirst($input->param('resource')); >- my $resource; >- my $result; >+my $package = "Koha::".ucfirst($input->param('resource')); >+my $resource; >+my $result; > eval{ >- $result = Koha::SharedContent::manaGetRequestWithId($input->param('resource'), $input->param('id') ); >+ $result = Koha::SharedContent::manaGetRequestWithId( >+ scalar $input->param('resource'), >+ scalar $input->param('id') >+ ); > }; > if ( $@ or $result->{code} == 500 ){ > $resource->{errmsg} = "Error: mana access got broken, please try again later\n\n ( error: $@ )"; >diff --git a/svc/mana/getToken b/svc/mana/token >similarity index 100% >rename from svc/mana/getToken >rename to svc/mana/token >diff --git a/svc/mana/use b/svc/mana/use >index efb5bf3..42966ec 100755 >--- a/svc/mana/use >+++ b/svc/mana/use >@@ -40,7 +40,10 @@ if ( $auth_status ne "ok" ) { > exit 0; > } > >-my $result = Koha::SharedContent::manaGetRequestWithId($input->param('resource'), $input->param('id') ); >+my $result = Koha::SharedContent::manaGetRequestWithId( >+ scalar $input->param('resource'), >+ scalar $input->param('id') >+); > my $package = "Koha::".ucfirst($input->param('resource')); > my $resource; > >diff --git a/t/db_dependent/Koha/SharedContent.t b/t/db_dependent/Koha/SharedContent.t >index 3784028..3925b30 100644 >--- a/t/db_dependent/Koha/SharedContent.t >+++ b/t/db_dependent/Koha/SharedContent.t >@@ -20,10 +20,230 @@ > use Modern::Perl; > > use t::lib::TestBuilder; >-use Test::More tests => 1; >+use t::lib::Mocks; >+use Test::MockModule; >+use Test::MockObject; >+use Test::More tests => 43; > use Koha::Database; >+use Koha::Patrons; >+use Koha::Subscriptions; >+ >+use HTTP::Status qw(:constants :is status_message); > > use_ok('Koha::SharedContent'); > > my $schema = Koha::Database->new->schema; >-$schema->storage->txn_begin; # mode insertion >+$schema->storage->txn_begin; >+ >+my $builder = t::lib::TestBuilder->new(); >+ >+my $want_error = 0; >+my $post_request = 0; >+my $query = {}; >+ >+$Koha::SharedContent::MANA_IP = 'https://foo.bar'; >+my $result = Koha::SharedContent::manaGetRequest('report', $query); >+ok($result->{msg} =~ /Can\'t connect to foo.bar:443$/, 'Unable to connect'); >+is($result->{code}, 500, 'Code is 500'); >+ >+my $ua = Test::MockModule->new('LWP::UserAgent'); >+$ua->mock('request', sub { >+ return mock_response(); >+}); >+ >+$want_error = 1; >+$query = {query => 'foo', usecomments => 1}; >+$result = Koha::SharedContent::manaGetRequest('report', $query); >+ok($result->{msg} =~ /^Error thrown by decoded_content/, 'Error in decoded_content'); >+is($result->{code}, 500, 'Code is 500'); >+ >+$want_error = 0; >+$query = {title => 'foo', usecomments => 1}; >+$result = Koha::SharedContent::manaGetRequest('subscription', $query); >+is($result->{code}, 200, 'manaGetRequest success'); >+ >+$result = Koha::SharedContent::manaGetRequestWithId('subscription', 23); >+is($result->{code}, 200, 'manaGetRequestWithId success'); >+ >+my $params = { >+ title => 'The English historical review', >+ issn => '0013-8266', >+ ean => '', >+ publishercode => 'Longman' >+}; >+ >+# Search a subscription. >+my $request = Koha::SharedContent::buildRequest('get', 'subscription', $params); >+is($request->method, 'GET', 'Get subscription - Method is get'); >+ >+my %query = $request->uri->query_form; >+is($query{title}, 'The English historical review', 'Check title'); >+is($query{issn}, '0013-8266', 'Check issn'); >+is($query{ean}, '', 'Check ean'); >+is($query{publishercode}, 'Longman', 'Check publisher'); >+ >+is($request->uri->path, '/subscription.json', 'Path is subscription'); >+ >+# Get a report by id. >+$request = Koha::SharedContent::buildRequest('getwithid', 'report', 26); >+is($request->method, 'GET', 'Get with id - Method is get'); >+ >+is($request->uri->path, '/report/26.json', 'Path is report/26.json'); >+ >+# Share a report. >+my $content = { >+ 'kohaversion' => '17.06.00.008', >+ 'language' => 'fr-FR', >+ 'notes' => 'some notes', >+ 'report_group' => '', >+ 'exportemail' => 'xx@xx.com', >+ 'report_name' => 'A useless report', >+ 'savedsql' => 'SELECT * FROM ITEMS', >+ 'type' => undef >+}; >+ >+$request = Koha::SharedContent::buildRequest('post', 'report', $content); >+is($request->method, 'POST', 'Share report - Method is post'); >+ >+is($request->uri->path, '/report.json', 'Path is report.json'); >+ >+# prepare shared data >+my $loggedinuser = $builder->build({ >+ source => 'Borrower', >+ value => { >+ email => '', >+ emailpro => '', >+ B_email => '' >+ } >+}); >+ >+my $library = $builder->build({ >+ source => 'Branch', >+}); >+ >+my $biblio = $builder->build({ >+ source => 'Biblio', >+}); >+ >+my $biblioitem = $builder->build({ >+ source => 'Biblioitem', >+ value => { >+ biblionumber => $biblio->{biblionumber} >+ } >+}); >+ >+my $subscriptionFrequency = $builder->build({ >+ source => 'SubscriptionFrequency' >+}); >+ >+my $subscriptionNumberpattern = $builder->build({ >+ source => 'SubscriptionNumberpattern' >+}); >+ >+my $subscription = $builder->build({ >+ source => 'Subscription', >+ value => { >+ biblionumber => $biblio->{biblionumber}, >+ periodicity => $subscriptionFrequency->{id}, >+ numberpattern => $subscriptionNumberpattern->{id}, >+ mana_id => undef >+ } >+}); >+ >+C4::Context->_new_userenv('xxx'); >+C4::Context->set_userenv(0,0,0, >+ $loggedinuser->{firstname}, >+ $loggedinuser->{surname}, >+ $library->{branchcode}, >+ 'Midway Public Library', '', '', ''); >+ >+t::lib::Mocks::mock_preference('language', 'en'); >+ >+$post_request = 1; >+$result = Koha::SharedContent::manaPostRequest('en', $loggedinuser->{borrowernumber}, $subscription->{subscriptionid}, 'subscription'); >+is($result->{code}, 200, 'manaPostRequest success'); >+ >+my $s = Koha::Subscriptions->find($subscription->{subscriptionid}); >+is($s->mana_id, 5, 'Mana id is set'); >+ >+my $data = Koha::SharedContent::prepareSharedData( >+ '', >+ $loggedinuser->{borrowernumber}, >+ $subscription->{subscriptionid}, >+ 'subscription' >+); >+ >+is($data->{language}, 'en', 'Language is set to default'); >+my $branch = Koha::Libraries->find($library->{branchcode}); >+is($data->{exportemail}, $branch->branchemail, 'Email is set with the userenv branch one'); >+is($data->{title}, $biblio->{title}, 'Shared title'); >+is($data->{sfdescription}, $subscriptionFrequency->{description}, 'Shared sfdescription'); >+is($data->{unit}, $subscriptionFrequency->{unit}, 'Shared unit'); >+is($data->{unitsperissue}, $subscriptionFrequency->{unitsperissue}, 'Shared unitsperissue'); >+is($data->{issuesperunit}, $subscriptionFrequency->{issuesperunit}, 'Shared issuesperunit'); >+ >+is($data->{label}, $subscriptionNumberpattern->{label}, 'Shared np label'); >+is($data->{sndescription}, $subscriptionNumberpattern->{description}, 'Shared np description'); >+is($data->{numberingmethod}, $subscriptionNumberpattern->{numberingmethod}, 'Shared numberingmethod'); >+is($data->{label1}, $subscriptionNumberpattern->{label1}, 'Shared label1'); >+is($data->{add1}, $subscriptionNumberpattern->{add1}, 'Shared add1'); >+is($data->{every1}, $subscriptionNumberpattern->{every1}, 'Shared every1'); >+is($data->{whenmorethan1}, $subscriptionNumberpattern->{whenmorethan1}, 'Shared whenmorethan1'); >+is($data->{setto1}, $subscriptionNumberpattern->{setto1}, 'Shared setto1'); >+is($data->{numbering1}, $subscriptionNumberpattern->{numbering1}, 'Shared numbering1'); >+is($data->{issn}, $biblioitem->{issn}, 'Shared ISSN'); >+is($data->{ean}, $biblioitem->{ean}, 'Shared EAN'); >+is($data->{publishercode}, $biblioitem->{publishercode}, 'Shared publishercode'); >+ >+sub mock_response { >+ my $response = Test::MockObject->new(); >+ >+ if ($want_error) { >+ $response->mock('code', sub { >+ return 500; >+ }); >+ $response->mock('is_error', sub { >+ return 0; >+ }); >+ $response->mock('decoded_content', sub { >+ die 'Error thrown by decoded_content'; >+ }); >+ } elsif ( $post_request ) { >+ $response->mock('code', sub { >+ return 200; >+ }); >+ $response->mock('is_error', sub { >+ return 0; >+ }); >+ $response->mock('decoded_content', sub { >+ return '{"code": "200", "msg": "foo", "id": "5"}'; >+ }); >+ } else { >+ $response->mock('code', sub { >+ return 200; >+ }); >+ $response->mock('is_error', sub { >+ return 0; >+ }); >+ $response->mock('decoded_content', sub { >+ return ''; >+ }); >+ } >+} >+ >+# Increment request. >+$request = Koha::SharedContent::buildRequest('increment', >+ 'subscription', >+ 12, >+ 'foo'); >+ >+is($request->method, 'POST', 'Increment subscription - Method is post'); >+ >+%query = $request->uri->query_form; >+is($query{id}, 12, 'Check id'); >+is($query{step}, 1, 'Step is default'); >+is($query{resource}, 'subscription', 'Check ressource'); >+ >+is($request->uri->path, '/subscription/12.json/increment/foo', 'Path is subscription'); >+ >+$schema->storage->txn_rollback; >diff --git a/t/db_dependent/Koha/Subscription/Numberpatterns.t b/t/db_dependent/Koha/Subscription/Numberpatterns.t >new file mode 100644 >index 0000000..6aa26c4 >--- /dev/null >+++ b/t/db_dependent/Koha/Subscription/Numberpatterns.t >@@ -0,0 +1,97 @@ >+#!/usr/bin/perl >+ >+# Copyright 2017 BibLibre >+# >+# 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 t::lib::TestBuilder; >+use Test::More tests => 6; >+use Koha::Database; >+ >+use_ok('Koha::Subscription::Numberpatterns'); >+ >+my $schema = Koha::Database->new->schema; >+$schema->storage->txn_begin; >+my $builder = t::lib::TestBuilder->new; >+ >+my $dbh = C4::Context->dbh; >+$dbh->do('DELETE FROM subscription_numberpatterns'); >+ >+my $numberpattern = $builder->build({ >+ source => 'SubscriptionNumberpattern', >+ value => { >+ label => 'Volume, Number, Issue', >+ description => 'Volume Number Issue 1', >+ numberingmethod => 'Vol.{X}, Number {Y}, Issue {Z}', >+ label1 => 'Volume', >+ add1 => '1', >+ every1 => '48', >+ whenmorethan1 => '99999', >+ setto1 => '1', >+ numbering1 => undef, >+ label2 => 'Number', >+ add2 => '1', >+ every2 => '4', >+ whenmorethan2 => '12', >+ setto2 => '1', >+ numbering2 => undef, >+ label3 => 'Issue', >+ add3 => '1', >+ every3 => '1', >+ whenmorethan3 => '4', >+ setto3 => '1', >+ numbering3 => undef >+ } >+}); >+ >+my $search_ok = { >+ umberingmethod => 'Vol.{X}, Number {Y}, Issue {Z}', >+ label1 => 'Volume', add1 => '1', every1 => '48', >+ whenmorethan1 => '99999', setto1 => '1', >+ label2 => 'Number', add2 => '1', every2 => '4', >+ whenmorethan2 => '12', setto2 => '1', >+ label3 => 'Issue', add3 => '1', every3 => '1', >+ whenmorethan3 => '4', setto3 => '1', >+ numbering_pattern => 'mana' >+}; >+ >+my $number_pattern_id = Koha::Subscription::Numberpatterns->new_or_existing($search_ok); >+is($number_pattern_id, $numberpattern->{id}, 'new_or_existing method should find the existing number pattern'); >+ >+$number_pattern_id = Koha::Subscription::Numberpatterns->new_or_existing({numbering_pattern => 1}); >+is($number_pattern_id, 1, 'new_or_existing method should return passed numbering_pattern'); >+ >+my $search_not_ok = { >+ patternname => 'Number', >+ sndescription => 'Simple Numbering method', >+ numberingmethod => 'No.{X}', >+ label1 => 'Number', >+ add1 => 1, >+ every1 => 1, >+ whenmorethan1 => 99999, >+ setto1 => 1, >+ numbering_pattern => 'mana' >+}; >+ >+$number_pattern_id = Koha::Subscription::Numberpatterns->new_or_existing($search_not_ok); >+my $new_number_pattern = Koha::Subscription::Numberpatterns->find($number_pattern_id); >+is($new_number_pattern->label, 'Number'); >+is($new_number_pattern->description, 'Simple Numbering method'); >+is($new_number_pattern->numberingmethod, 'No.{X}'); >+ >+$schema->storage->txn_rollback; >diff --git a/t/db_dependent/Serials/GetFictiveIssueNumber.t b/t/db_dependent/Serials/GetFictiveIssueNumber.t >index e944de9..1ad66b2 100644 >--- a/t/db_dependent/Serials/GetFictiveIssueNumber.t >+++ b/t/db_dependent/Serials/GetFictiveIssueNumber.t >@@ -1,126 +1,232 @@ > #!/usr/bin/perl > >-use C4::Context; >-use Test::More tests => 18; >+# This test deals with GetFictiveIssueNumber (from C4::Serials) >+ > use Modern::Perl; >+use Test::More tests => 5; >+ >+use Koha::Database; >+use C4::Serials; >+use C4::Serials::Frequency; > >+my $schema = Koha::Database->new->schema; >+$schema->storage->txn_begin; > my $dbh = C4::Context->dbh; >-$dbh->{RaiseError} = 1; >-$dbh->{AutoCommit} = 0; > >-use C4::Serials::Frequency; >-use C4::Serials; >+subtest 'Tests for irregular frequency' => sub { >+ plan tests => 2; > >-# TEST CASE - 1 issue per day, no irregularities >-my $frequency = { >- description => "One issue per day", >- unit => 'day', >- issuesperunit => 1, >- unitsperissue => 1, >-}; >+ # Add a frequency >+ my $freq_irr = AddSubscriptionFrequency({ >+ description => "Irregular", >+ unit => undef, >+ }); > >-my $subscription = { >- firstacquidate => '1970-01-01', >- irregularity => '', >- countissuesperunit => 1, >-}; >-my $issueNumber; >- >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-01', $frequency ); >-is( $issueNumber, '1' ); >- >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-02', $frequency ); >-is( $issueNumber, '2' ); >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-03', $frequency ); >-is( $issueNumber, '3' ); >- >-# TEST CASE - 2 issues per day, no irregularity >-$frequency = { >- description => "Two issues per day", >- unit => 'day', >- issuesperunit => 2, >- unitsperissue => 1, >+ # Test it >+ my $subscription = { >+ periodicity => $freq_irr, >+ firstacquidate => '1972-02-07', >+ }; >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-12-31'), undef, 'Irregular: should be undef' ); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-12-31'), undef, 'Irregular: still undef' ); > }; >-$subscription = { >- firstacquidate => '1970-01-01', >- irregularity => '', >- countissuesperunit => 1, >-}; >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-01', $frequency ); >-is( $issueNumber, '1' ); >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-02', $frequency ); >-is( $issueNumber, '3' ); >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-03', $frequency ); >-is( $issueNumber, '5' ); >- >-$subscription->{countissuesperunit} = 2; >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-01', $frequency ); >-is( $issueNumber, '2' ); >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-02', $frequency ); >-is( $issueNumber, '4' ); >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-03', $frequency ); >-is( $issueNumber, '6' ); >- >-# TEST CASE - 1 issue every 2 days, no irregularity >-$frequency = { >- description => "one issue every two days", >- unit => 'day', >- issuesperunit => 1, >- unitsperissue => 2, >+ >+subtest 'Tests for yearly frequencies' => sub { >+ plan tests => 10; >+ >+ # First add a few frequencies >+ my $freq_1i_1y = AddSubscriptionFrequency({ >+ description => "1 issue per year", >+ unit => 'year', >+ issuesperunit => 1, >+ unitsperissue => 1, >+ }); >+ my $freq_1i_3y = AddSubscriptionFrequency({ >+ description => "1 issue per 3 years", >+ unit => 'year', >+ issuesperunit => 1, >+ unitsperissue => 3, >+ }); >+ my $freq_5i_1y = AddSubscriptionFrequency({ >+ description => "5 issues per year", >+ unit => 'year', >+ issuesperunit => 5, >+ unitsperissue => 1, >+ }); >+ my $freq_366i_1y = AddSubscriptionFrequency({ >+ description => "366 issue per year", >+ unit => 'year', >+ issuesperunit => 366, >+ unitsperissue => 1, >+ }); >+ >+ # TEST CASE - 1 issue per year >+ my $subscription = { >+ periodicity => $freq_1i_1y, >+ firstacquidate => '1972-02-10', >+ countissuesperunit => 1, >+ }; >+ >+ my $frequency = GetSubscriptionFrequency($freq_1i_1y); >+ >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-02-09', $frequency), 1, 'Feb 9 still 1' ); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-02-10', $frequency), 2, 'Feb 10 goes to 2' ); >+ >+ # TEST CASE - 1 issue per 3 years >+ $subscription->{periodicity} = $freq_1i_3y; >+ $subscription->{firstacquidate} = '1972-02-20'; >+ $frequency = GetSubscriptionFrequency($freq_1i_3y); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1975-02-19', $frequency), 1, 'Feb 19, 1975 still 1' ); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1975-02-20', $frequency), 2, 'Feb 20, 1975 goes to 2' ); >+ >+ # TEST CASE - 5 issues per year >+ $subscription->{periodicity} = $freq_5i_1y; >+ $subscription->{firstacquidate} = '1972-02-29'; #leap year >+ $subscription->{countissuesperunit} = 1; >+ $frequency = GetSubscriptionFrequency($freq_5i_1y); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-05-11', $frequency), 1, 'May 11 still 1' ); >+ $subscription->{countissuesperunit} = 2; >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-05-12', $frequency), 2, 'May 12 goes to 2' ); >+ $subscription->{countissuesperunit} = 5; >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-02-27', $frequency), 5, 'Feb 27 should still be 5' ); >+ $subscription->{countissuesperunit} = 1; >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-02-28', $frequency), 6, 'Feb 28 goes to 6' ); >+ >+ # TEST CASE - 366 issues per year (hypothetical example) >+ # Testing prevention of divide by zero >+ $subscription->{periodicity} = $freq_366i_1y; >+ $subscription->{firstacquidate} = '1972-02-29'; #leap year >+ $subscription->{countissuesperunit} = 366; >+ $frequency = GetSubscriptionFrequency($freq_366i_1y); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-02-27', $frequency), 366, 'Feb 27 still at 366' ); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-02-28', $frequency), 732, 'Feb 28 goes to 732' ); >+ > }; >-$subscription = { >- firstacquidate => '1970-01-01', >- irregularity => '', >- countissuesperunit => 1, >+ >+subtest 'Tests for monthly frequencies' => sub { >+ plan tests => 8; >+ >+ # First add a few frequencies >+ my $freq_1i_5m = AddSubscriptionFrequency({ >+ description => "1 issue per 5 months", >+ unit => 'month', >+ issuesperunit => 1, >+ unitsperissue => 5, >+ }); >+ my $freq_4i_1m = AddSubscriptionFrequency({ >+ description => "4 issue per month", >+ unit => 'month', >+ issuesperunit => 4, >+ unitsperissue => 1, >+ }); >+ >+ # TEST CASE - 1 issue per 5 months >+ my $subscription = { >+ periodicity => $freq_1i_5m, >+ firstacquidate => '1972-02-10', >+ countissuesperunit => 1, >+ }; >+ my $frequency = GetSubscriptionFrequency($freq_1i_5m); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-07-09', $frequency), 1, 'Jul 9 still 1' ); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-07-10', $frequency), 2, 'Jul 10 goes to 2' ); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-05-09', $frequency), 3, 'May 9 still 3' ); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-05-10', $frequency), 4, 'May 10 goes to 4' ); >+ >+ # TEST CASE - 4 issue per 1 months >+ $subscription = { >+ periodicity => $freq_4i_1m, >+ firstacquidate => '1972-02-22', >+ countissuesperunit => 1, >+ }; >+ $frequency = GetSubscriptionFrequency($freq_4i_1m); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-02-28', $frequency), 1, 'Feb 28 still 1' ); >+ $subscription->{countissuesperunit} = 2; >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-02-29', $frequency), 2, 'Feb 29 goes to 2' ); >+ $subscription->{countissuesperunit} = 4; >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-03-21', $frequency), 4, 'Mar 21 still 4' ); >+ $subscription->{countissuesperunit} = 1; >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-03-22', $frequency), 5, 'Mar 22 goes to 5' ); >+ > }; >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-01', $frequency ); >-is( $issueNumber, 1 ); >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-02', $frequency ); >-is( $issueNumber, 1 ); >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-03', $frequency ); >-is( $issueNumber, 2 ); >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-04', $frequency ); >-is( $issueNumber, 2 ); >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-05', $frequency ); >-is( $issueNumber, 3 ); >- >-# TEST CASE - 1 issue per week, no irregularity >-$frequency = { >- description => "one issue per week", >- unit => 'week', >- issuesperunit => 1, >- unitsperissue => 1, >+ >+subtest 'Tests for weekly frequencies' => sub { >+ plan tests => 4; >+ >+ # First add a few frequencies >+ my $freq_1i_7w = AddSubscriptionFrequency({ >+ description => "1 issue per 7 weeks", >+ unit => 'week', >+ issuesperunit => 1, >+ unitsperissue => 7, >+ }); >+ my $freq_3i_1w = AddSubscriptionFrequency({ >+ description => "3 issues per week", >+ unit => 'week', >+ issuesperunit => 3, >+ unitsperissue => 1, >+ }); >+ >+ # TEST CASE - 1 issue per 7 weeks >+ my $subscription = { >+ periodicity => $freq_1i_7w, >+ firstacquidate => '1972-02-10', >+ countissuesperunit => 1, >+ }; >+ my $frequency = GetSubscriptionFrequency($freq_1i_7w); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-03-29', $frequency), 1, 'Mar 29 still 1' ); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-03-30', $frequency), 2, 'Mar 30 goes to 2' ); >+ >+ # TEST CASE - 3 issue per 1 week >+ $subscription = { >+ periodicity => $freq_3i_1w, >+ firstacquidate => '1972-02-03', >+ countissuesperunit => 1, >+ }; >+ $subscription->{countissuesperunit} = 3; >+ $frequency = GetSubscriptionFrequency($freq_3i_1w); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-02-09', $frequency), 3, 'Feb 9 still 3' ); >+ $subscription->{countissuesperunit} = 1; >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-02-10', $frequency), 4, 'Feb 10 goes to 4' ); > }; >-$subscription = { >- firstacquidate => '1970-01-01', >- irregularity => '', >- countissuesperunit => 1, >+ >+subtest 'Tests for dayly frequencies' => sub { >+ plan tests => 4; >+ >+ # First add a few frequencies >+ my $freq_1i_12d = AddSubscriptionFrequency({ >+ description => "1 issue per 12 days", >+ unit => 'day', >+ issuesperunit => 1, >+ unitsperissue => 12, >+ }); >+ my $freq_3i_1d = AddSubscriptionFrequency({ >+ description => "3 issues per day", >+ unit => 'day', >+ issuesperunit => 3, >+ unitsperissue => 1, >+ }); >+ >+ # TEST CASE - 1 issue per 12 days >+ my $subscription = { >+ periodicity => $freq_1i_12d, >+ firstacquidate => '1972-03-16', >+ countissuesperunit => 1, >+ }; >+ my $frequency = GetSubscriptionFrequency($freq_1i_12d); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-03-27', $frequency), 1, 'Mar 27 still 1' ); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-03-28', $frequency), 2, 'Mar 28 goes to 2' ); >+ >+ # TEST CASE - 3 issue per day >+ $subscription = { >+ periodicity => $freq_3i_1d, >+ firstacquidate => '1972-04-23', >+ countissuesperunit => 1, >+ }; >+ $subscription->{countissuesperunit} = 3; >+ $frequency = GetSubscriptionFrequency($freq_3i_1d); >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-05-01', $frequency), 27, 'May 1 still 27' ); >+ $subscription->{countissuesperunit} = 1; >+ is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-05-02', $frequency), 28, 'May 2 goes to 28' ); > }; >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-01', $frequency ); >-is( $issueNumber, 1 ); >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-02', $frequency ); >-is( $issueNumber, 1 ); >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-08', $frequency ); >-is( $issueNumber, 2 ); >-$issueNumber = >- C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-15', $frequency ); >-is( $issueNumber, 3 ); >- >-$dbh->rollback; >+ >+$schema->storage->txn_rollback; >-- >2.7.4
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 17047
:
56175
|
56176
|
56177
|
56178
|
56179
|
56180
|
56181
|
59728
|
59729
|
59931
|
61905
|
62045
|
62046
|
62047
|
62048
|
62049
|
62050
|
62051
|
62052
|
62053
|
62054
|
62075
|
62465
|
62475
|
62485
|
62540
|
62542
|
62543
|
62544
|
62545
|
62546
|
62547
|
62548
|
62549
|
62550
|
62551
|
62552
|
62553
|
62589
|
62591
|
62592
|
62593
|
62594
|
62595
|
62596
|
62597
|
62598
|
62599
|
62603
|
62604
|
62605
|
62606
|
62607
|
62768
|
63476
|
63601
|
63618
|
63619
|
63620
|
63621
|
63622
|
63623
|
64484
|
64530
|
64618
|
64619
|
64620
|
64621
|
64622
|
64623
|
64624
|
64625
|
64626
|
64627
|
64628
|
64629
|
64630
|
64631
|
64632
|
64633
|
64634
|
64635
|
64636
|
64637
|
64638
|
64639
|
64640
|
64641
|
64642
|
64643
|
64648
|
64649
|
64650
|
64651
|
64652
|
64653
|
64654
|
64706
|
64962
|
65058
|
65059
|
65060
|
65061
|
65062
|
65063
|
65064
|
65065
|
65773
|
66667
|
66668
|
66987
|
67003
|
67004
|
67005
|
67006
|
67009
|
67010
|
67011
|
67012
|
67013
|
67014
|
67015
|
67016
|
67017
|
67018
|
67019
|
67020
|
67021
|
67022
|
67023
|
69034
|
69035
|
69036
|
69037
|
69038
|
69039
|
69040
|
69041
|
69091
|
70203
|
70204
|
70205
|
70206
|
70208
|
70209
|
70210
|
70211
|
70561
|
70874
|
72660
|
72661
|
72662
|
72663
|
72664
|
72665
|
72666
|
72667
|
72668
|
72669
|
72670
|
73699
|
73737
|
73738
|
73739
|
73740
|
73741
|
73742
|
73743
|
73744
|
73745
|
73746
|
73747
|
73748
|
73975
|
73976
|
73977
|
73978
|
73979
|
73980
|
73981
|
73982
|
73983
|
73984
|
73985
|
73986
|
76673
|
76674
|
76675
|
76676
|
76677
|
76678
|
76679
|
76680
|
76681
|
76682
|
76683
|
76684
|
78215
|
78216
|
78217
|
78218
|
78219
|
78220
|
78221
|
78222
|
78223
|
78224
|
78225
|
78226
|
78227
|
78228
|
78229
|
79868
|
79869
|
79870
|
79871
|
79872
|
79874
|
79877
|
79878
|
79879
|
79880
|
79881
|
79882
|
79883
|
79884
|
79885
|
79886
|
79887
|
79888
|
79922
|
79923
|
79924
|
79925
|
79926
|
79927
|
79928
|
79929
|
79930
|
79931
|
79932
|
79933
|
79934
|
79935
|
79936
|
79937
|
79938
|
79939
|
80183
|
80184
|
80185
|
80186
|
80187
|
80188
|
80189
|
80190
|
80191
|
80192
|
80193
|
80194
|
80195
|
80196
|
80197
|
80198
|
80199
|
80200
|
80471
|
80472
|
80473
|
80907
|
80908
|
80909
|
80910
|
80911
|
80912
|
80913
|
80914
|
80915
|
80916
|
80917
|
80918
|
80919
|
80920
|
80921
|
80922
|
80923
|
80924
|
81935
|
81936
|
81937
|
81938
|
81939
|
81940
|
81941
|
81942
|
81943
|
81944
|
81945
|
81946
|
81947
|
81948
|
81949
|
81950
|
81951
|
81952
|
81968
|
83863
|
83864
|
83865
|
83866
|
83867
|
83868
|
83869
|
83870
|
83871
|
83872
|
83873
|
83874
|
83875
|
83876
|
83877
|
83878
|
83879
|
83880
|
83881
|
83892
|
83893
|
83894
|
83895
|
83896
|
83897
|
83898
|
83899
|
83900
|
83901
|
83902
|
83903
|
83904
|
83905
|
83906
|
83907
|
83908
|
83909
|
83910
|
83911
|
83912
|
84142
|
84145
|
84210
|
84260
|
84261
|
84262
|
84263
|
84264
|
84265
|
84323
|
84324
|
84325
|
84326
|
84327
|
84328
|
84329
|
84332