use Koha::AuthorisedValues;
use Koha::Patron::Categories;
+use Koha::SharedContent;
BEGIN {
require Exporter;
use Koha::Serial;
use Koha::Subscriptions;
use Koha::Subscription::Histories;
+use Koha::SharedContent;
use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
});
$subscription->{additional_fields} = $additional_field_values->{$subscriptionid};
+ if ( my $mana_id = $subscription->{mana_id} ) {
+ my $mana_subscription = Koha::SharedContent::get_entity_by_id(
+ 'subscription', $mana_id, {usecomments => 1});
+ $subscription->{comments} = $mana_subscription->{data}->{comments};
+ }
+
return $subscription;
}
use Carp;
use Koha::Database;
+use JSON;
+use Koha::Reports;
use base qw(Koha::Object);
=cut
+=head3 get_search_info
+
+Return search info
+
+=cut
+
+sub get_search_info {
+ my $self = shift;
+ my $sub_mana_info = { 'query' => shift };
+ return $sub_mana_info;
+}
+
+=head3 get_sharable_info
+
+Return properties that can be shared.
+
+=cut
+
+sub get_sharable_info {
+ my $self = shift;
+ my $shared_report_id = shift;
+ my $report = Koha::Reports->find($shared_report_id);
+ my $sub_mana_info = {
+ 'savedsql' => $report->savedsql,
+ 'report_name' => $report->report_name,
+ 'notes' => $report->notes,
+ 'report_group' => $report->report_group,
+ 'type' => $report->type,
+ };
+ return $sub_mana_info;
+}
+
+=head3 new_from_mana
+
+Clear a Mana report to be imported in Koha?
+
+=cut
+
+sub new_from_mana {
+ my $self = shift;
+ my $data = shift;
+
+ $data->{mana_id} = $data->{id};
+
+ delete $data->{exportemail};
+ delete $data->{kohaversion};
+ delete $data->{creationdate};
+ delete $data->{lastimport};
+ delete $data->{id};
+ delete $data->{nbofusers};
+ delete $data->{language};
+
+ Koha::Report->new($data)->store;
+}
+
=head3 _type
Returns name of corresponding DBIC resultset
return 'Koha::Report';
}
+=head1 AUTHOR
+
+Kyle M Hall <kyle@bywatersolutions.com>
+
+=cut
+
1;
use HTTP::Request;
use LWP::UserAgent;
-our $MANA_IP = "http://10.25.159.107:5000";
+use Koha::Serials;
+use Koha::Reports;
+use C4::Context;
-sub manaRequest {
+=head1 DESCRIPTION
+
+Package for accessing shared content via Mana
+
+=head2 Package Functions
+
+=cut
+
+=head3 process_request
+
+=cut
+
+sub process_request {
my $mana_request = shift;
my $result;
-
$mana_request->content_type('application/json');
my $userAgent = LWP::UserAgent->new;
- my $response = $userAgent->request($mana_request);
-
- if ( $response->code ne "204" ) {
- $result = from_json( $response->decoded_content );
+ if ( $mana_request->method eq "POST" ){
+ my $content;
+ if ($mana_request->content) {$content = from_json( $mana_request->content )};
+ $content->{securitytoken} = C4::Context->preference("ManaToken");
+ $mana_request->content( to_json($content) );
}
+
+ my $response = $userAgent->request($mana_request);
+
+ eval { $result = from_json( $response->decoded_content, { utf8 => 1} ); };
$result->{code} = $response->code;
+ if ( $@ ){
+ $result->{msg} = $@;
+ }
+ if ($response->is_error){
+ $result->{msg} = "An error occurred, mana server returned: " . $response->message;
+ }
+ return $result ;
+}
+
+=head3 increment_entity_value
+
+=cut
- return $result if ( $response->code =~ /^2..$/ );
+sub increment_entity_value {
+ return process_request(build_request('increment', @_));
}
-sub manaNewUserPatchRequest {
- my $resource = shift;
- my $id = shift;
+=head3 send_entity
+
+=cut
+
+sub send_entity {
+ my ($lang, $loggedinuser, $resourceid, $resourcetype, $content) = @_;
- my $url = "$MANA_IP/$resource/$id.json/newUser";
- my $request = HTTP::Request->new( PATCH => $url );
+ unless ( $content ) {
+ $content = prepare_entity_data($lang, $loggedinuser, $resourceid, $resourcetype);
+ }
+
+ my $result = process_request(build_request('post', $resourcetype, $content));
- 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;
}
-sub manaPostRequest {
- my $resource = shift;
- my $content = shift;
+=head3 prepare_entity_data
+
+=cut
- my $url = "$MANA_IP/$resource.json";
- my $request = HTTP::Request->new( POST => $url );
+sub prepare_entity_data {
+ my ($lang, $loggedinuser, $ressourceid, $ressourcetype) = @_;
+ $lang ||= C4::Context->preference('language');
- $content->{bulk_import} = 0;
- my $json = to_json( $content, { utf8 => 1 } );
- $request->content($json);
+ my $mana_email;
+ if ( $loggedinuser ne 0 ) {
+ my $borrower = Koha::Patrons->find($loggedinuser);
+ $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 '' ) );
- return manaRequest($request);
+ my %versions = C4::Context::get_versions();
+
+ my $mana_info = {
+ language => $lang,
+ kohaversion => $versions{'kohaVersion'},
+ exportemail => $mana_email
+ };
+
+ 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 };
+
+ return $ressource_mana_info;
+}
+
+=head3 get_entity_by_id
+
+=cut
+
+sub get_entity_by_id {
+ return process_request(build_request('getwithid', @_));
+}
+
+=head3 search_entities
+
+=cut
+
+sub search_entities {
+ return process_request(build_request('get', @_));
}
-sub manaGetRequestWithId {
+=head3 build_request
+
+=cut
+
+sub build_request {
+ my $type = shift;
my $resource = shift;
- my $id = shift;
+ my $mana_url = get_sharing_url();
+
+ if ( $type eq 'get' ) {
+ my $params = shift;
+ $params = join '&',
+ map { defined $params->{$_} ? $_ . "=" . $params->{$_} : () }
+ keys %$params;
+ my $url = "$mana_url/$resource.json?$params";
+ return HTTP::Request->new( GET => $url );
+ }
+
+ if ( $type eq 'getwithid' ) {
+ my $id = shift;
+ my $params = shift;
+ $params = join '&',
+ map { defined $params->{$_} ? $_ . "=" . $params->{$_} : () }
+ keys %$params;
+
+ my $url = "$mana_url/$resource/$id.json?$params";
+ return HTTP::Request->new( GET => $url );
+ }
+
+ if ( $type eq 'post' ) {
+ my $content = shift;
- my $url = "$MANA_IP/$resource/$id.json";
- my $request = HTTP::Request->new( GET => $url );
+ my $url = "$mana_url/$resource.json";
+ my $request = HTTP::Request->new( POST => $url );
- return manaRequest($request);
+ 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_url/$resource/$id.json/increment/$field?$param";
+ my $request = HTTP::Request->new( POST => $url );
+
+ }
}
-sub manaGetRequest {
- my $resource = shift;
- my $parameters = shift;
+=head3 get_sharing_url
- $parameters = join '&',
- map { defined $parameters->{$_} ? $_ . "=" . $parameters->{$_} : () }
- keys %$parameters;
- my $url = "$MANA_IP/$resource.json?$parameters";
- my $request = HTTP::Request->new( GET => $url );
+=cut
- return manaRequest($request);
+sub get_sharing_url {
+ return C4::Context->config('mana_config');
}
1;
return Koha::Subscription::Frequency->_new_from_dbic($frequency_rs);
}
-=head3 type
+=head3 get_search_info
=cut
sub get_search_info {
+ my $self=shift;
my $searched_sub_id = shift;
my $biblio = Koha::Biblios->find( { 'biblionumber' => $searched_sub_id } );
+ return unless $biblio;
my $biblioitem =
Koha::Biblioitems->find( { 'biblionumber' => $searched_sub_id } );
return $sub_mana_info;
}
+=head3 get_sharable_info
+
+=cut
+
sub get_sharable_info {
+ my $self = shift;
my $shared_sub_id = shift;
my $subscription = Koha::Subscriptions->find($shared_sub_id);
my $biblio = Koha::Biblios->find( $subscription->biblionumber );
return $sub_mana_info;
}
+
+=head3 _type
+
+=cut
+
sub _type {
return 'Subscription';
}
=cut
-=head3 uniqeLabel
+=head3 uniqueLabel
=cut
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
<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 -->
<!-- Path to the config file for SMS::Send -->
<sms_send_config>__KOHA_CONF_DIR__/sms_send/</sms_send_config>
+ <!-- URL of the mana KB server -->
+ <!-- alternative value http://mana-test.koha-community.org to query the test server -->
+ <mana_config>http://mana-kb.koha-community.org</mana_config>
+
<!-- Configuration for Plack -->
<plack_max_requests>50</plack_max_requests>
<plack_workers>2</plack_workers>
--- /dev/null
+$DBversion = 'XXX';
+if( CheckVersion( $DBversion ) ) {
+ if( !column_exists( 'subscription', 'mana_id' ) ) {
+ $dbh->do( "ALTER TABLE subscription ADD mana_id int(11) NULL DEFAULT NULL" );
+ }
+
+ if( !column_exists( 'saved_sql', 'mana_id' ) ) {
+ $dbh->do( "ALTER TABLE saved_sql ADD mana_id int(11) NULL DEFAULT NULL" );
+ }
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 17047 - Add column mana_id in subscription and saved_sql tables)\n";
+}
+++ /dev/null
-ALTER TABLE subscription ADD mana_id int(11);
-INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('Mana', '1', '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.', NULL, 'YesNo');
+INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('Mana','2', 0|1|2,'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.','Choice');
--- /dev/null
+INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
+('AutoShareWithMana','','','defines datas automatically shared with mana','multiple');
--- /dev/null
+INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
+('ManaToken','',NULL,'Security token used for authentication on Mana KB service (anti spam)','Textarea');
-$DBversion = 'XXX'; # will be replaced by the RM
+$DBversion = 'XXX';
if( CheckVersion( $DBversion ) ) {
# you can use $dbh here like:
# $dbh->do( "ALTER TABLE biblio ADD COLUMN badtaste int" );
report_area varchar(6) default NULL,
report_group varchar(80) default NULL,
report_subgroup varchar(80) default NULL,
+ `mana_id` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY sql_area_group_idx (report_group, report_subgroup),
KEY boridx (`borrowernumber`)
`reneweddate` date default NULL, -- date of last renewal for the subscription
`itemtype` VARCHAR( 10 ) NULL,
`previousitemtype` VARCHAR( 10 ) NULL,
+ `mana_id` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`subscriptionid`),
KEY `by_biblionumber` (`biblionumber`),
CONSTRAINT subscription_ibfk_1 FOREIGN KEY (periodicity) REFERENCES subscription_frequencies (id) ON DELETE SET NULL ON UPDATE CASCADE,
('AutoCreateAuthorities','0',NULL,'Automatically create authorities that do not exist when cataloging records.','YesNo'),
('AutoEmailOpacUser','0',NULL,'Sends notification emails containing new account details to patrons - when account is created.','YesNo'),
('AutoEmailPrimaryAddress','OFF','email|emailpro|B_email|cardnumber|OFF','Defines the default email address where \'Account Details\' emails are sent.','Choice'),
+('AutoShareWithMana','subscription','','defines datas automatically shared with mana','multiple'),
('AutoLocation','0',NULL,'If ON, IP authentication is enabled, blocking access to the staff client from unauthorized IP addresses','YesNo'),
('AutomaticItemReturn','1',NULL,'If ON, Koha will automatically set up a transfer of this item to its homebranch','YesNo'),
('autoMemberNum','0','','If ON, patron number is auto-calculated','YesNo'),
('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'),
('MarcFieldDocURL', NULL, NULL, 'URL used for MARC field documentation. Following substitutions are available: {MARC} = marc flavour, eg. "MARC21" or "UNIMARC". {FIELD} = field number, eg. "000" or "048". {LANG} = user language, eg. "en" or "fi-FI"', 'free'),
--- /dev/null
+$(document).ready(function(){
+ $("#activatemana").on("click", function(){
+ var mylastname = $("#lastname").val()
+ var myfirstname = $("#firstname").val()
+ var myemail = $("#email").val()
+ $.ajax( {
+ type: "POST",
+ url: "/cgi-bin/koha/svc/mana/token",
+ data: { lastname: mylastname, firstname: myfirstname, email: myemail},
+ dataType: "json",
+ })
+ .done(function(result){
+ $("#pref_ManaToken").val(result.token);
+ $("#pref_ManaToken").trigger("input");
+ });
+ return false;
+ });
+});
background-color: #FFD000 !important;
}
+.warned-row,
+.warned-row td { background-color: #FF9000 !important }
+
+.high-warned-row,
+.high-warned-row td { background-color: #FF0000 !important }
+
tbody {
tr {
&:nth-child(odd) {
dayNamesMin: [_("Su"),_("Mo"),_("Tu"),_("We"),_("Th"),_("Fr"),_("Sa")],
weekHeader: _("Wk"),
dateFormat: "[% IF ( dateformat == "us" ) %]mm/dd/yy[% ELSIF ( dateformat == "metric" ) %]dd/mm/yy[% ELSIF ( dateformat == "dmydot" ) %]dd.mm.yy[% ELSE %]yy-mm-dd[% END %]",
- firstDay: [% Koha.Preference('CalendarFirstDayOfWeek') | html %],
+ firstDay: '[% Koha.Preference('CalendarFirstDayOfWeek') | html %]',
isRTL: [% IF ( bidi ) %]true[% ELSE %]false[% END %],
showMonthAfterYear: false,
yearSuffix: ''};
+++ /dev/null
-[% USE KohaDates %]
-<table id="mana_results_datatable">
- <thead>
- <tr>
- <th>ISSN</th>
- <th class="anti-the">Title</th>
- <th>Frequency</th>
- <th>Numbering pattern</th>
- <th class="NoSort">Number of users</th>
- <th class="title-string">Last Import</th>
- [% UNLESS search_only %]
- <th class="NoSort">Actions</th>
- [% END %]
- </tr>
- </thead>
- <tfoot>
- <tr>
- <td><input type="text" class="dt-filter" data-column_num="0" placeholder="Search ISSN" /></td>
- <td><input type="text" class="dt-filter" data-column_num="1" placeholder="Search title" /></td>
- <td><input type="text" class="dt-filter" data-column_num="2" placeholder="Search frequency" /></td>
- <td><input type="text" class="dt-filter" data-column_num="3" placeholder="Search numbering pattern" /></td>
- <td></td>
- <td><input type="text" class="dt-filter" data-column_num="5" placeholder="Search last import" /></td>
- [% UNLESS search_only %]
- <td></td>
- [% END %]
- </tr>
- </tfoot>
- <tbody>
- [% FOREACH subscription IN subscriptions %]
- [% UNLESS subscription.cannotdisplay %]
- <tr id="row[% subscription.subscriptionid %]">
- <td>[% IF ( subscription.issn ) %][% subscription.issn %][% END %]</td>
- <td>[% subscription.title %]</a></td>
- <td>[% IF ( subscription.sfdescription ) %][% subscription.sfdescription %][% END %]</td>
- <td>[% IF ( subscription.numberingmethod ) %][% subscription.numberingmethod %][% END %]</td>
- <td>[% IF ( subscription.nbofusers ) %][% subscription.nbofusers %][% END %]</td>
- <td><span title="[% subscription.lastimport %]">[% subscription.lastimport | $KohaDates %]</span></td>
- [% UNLESS search_only %]
- <td><a style="cursor:pointer" onclick="mana_use([% subscription.id %])"> <i class="fa fa-inbox"></i> Use</a></td>
- [% END %]
- </tr>
- [% END %]
- [% END %]
- </tbody>
-</table>
--- /dev/null
+<script type="text/JavaScript">
+//<![CDATA[
+$(document).ready(function() {
+ function mana_increment(mana_id, resource, fieldvalue, stepvalue = 1) {
+ $.ajax( {
+ type: "POST",
+ url: "/cgi-bin/koha/svc/mana/increment",
+ data: {id: mana_id, resource: resource, field: fieldvalue, step: stepvalue},
+ datatype: "json",
+ })
+ }
+
+ function mana_comment( target_id, manamsg, resource_type ) {
+ $.ajax( {
+ type: "POST",
+ url: "/cgi-bin/koha/svc/mana/share",
+ data: {message: manamsg, resource: resource_type , resource_id: target_id},
+ datatype: "json",
+ })
+ }
+
+ $(document).on('click', 'ul li.mana-comment', function() {
+ id = $(this).attr('data-id');
+ mana_increment(id, 'resource_comment', 'nb');
+ });
+
+ $(document).on('click', 'ul li.mana-other-comment', function() {
+ $('#mana-comment-box').modal('show');
+ });
+
+ $(document).on('click', '#mana-send-comment', function() {
+ var resource_type = $('#mana-resource').val();
+ var resource_id = $('#mana-resource-id').val();
+ var comment = $("#mana-comment").val();
+ mana_comment(resource_id, comment, resource_type);
+ $("#mana-comment-box").modal("hide");
+ });
+
+ $(document).on('click', '#mana-comment-close', function() {
+ $("#mana-comment-box").modal("hide");
+ });
+});
+//]]>
+</script>
--- /dev/null
+[% USE KohaDates %]
+[% USE Koha %]
+[% 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>
+[% INCLUDE 'mana.inc' %]
+
+[% IF statuscode == "200" AND reports %]
+ <table id="mana_results_datatable" width=100%>
+ <thead>
+ <tr>
+ <th>Report Name</th>
+ <th class="anti-the" width=35%>Notes</th>
+ <th>Type</th>
+ <th title="number of libraries using this pattern"># of users</th>
+ <th class="title-string" title="last time a library used this pattern">Last import</th>
+ <th> Comments </th>
+ [% UNLESS search_only %]
+ <th class="NoSort">Actions</th>
+ [% END %]
+ </tr>
+ </thead>
+ <tbody>
+ [% FOREACH report IN reports %]
+ [% UNLESS report.cannotdisplay %]
+ [% IF report.nbofcomment > highWarned %]
+ <tr id="row[% report.id %]" class = "high-warned-row">
+ [% ELSIF report.nbofcomment > warned %]
+ <tr id="row[% report.id %]" class = "warned-row">
+ [% ELSIF report.nbofcomment > lowWarned %]
+ <tr id="row[% report.id %]" class = "highlighted-row">
+ [% END %]
+ <input hidden class="rowid" value="[% report.id %]">
+ <td>[% IF ( report.report_name ) %][% report.report_name %][% END %]</td>
+ <td title="[% report.savedsql |html %]"><div>
+ [% IF report.notes.length > 200 %]
+ [% report.notes.substr(0,200) %]<a class="showbutton">Show More</a></div><div hidden>
+ [% END %]
+ [% report.notes %]
+ [% IF report.notes.length > 200 %]
+ <a class="hidebutton">Show Less</a></div> </td>
+ [% END %]
+ <td> [% report.type %] </td>
+ <td>[% IF ( report.nbofusers ) %][% report.nbofusers %][% END %]</td>
+ <td><span title="[% report.lastimport %]">[% report.lastimport | $KohaDates %]</span></td>
+ <td>[% FOREACH comment IN report.comments %][% comment.message %] ([% comment.nb %]) <br>[% END %]</td>
+
+ [% UNLESS search_only %]
+ <td>
+ <button class="mana-use" id="mana-use-[% report.id %]"><i class="fa fa-inbox"></i> Use</button>
+ </td>
+ [% END %]
+ </tr>
+ [% END %]
+ [% END %]
+ </tbody>
+ </table>
+[% ELSE %]
+ <h4> [% msg %] statuscode: [% statuscode %]</h4>
+[% END %]
--- /dev/null
+[% USE KohaDates %]
+[% USE Koha %]
+[% USE AuthorisedValues %]
+[% USE Branches %]
+[% INCLUDE 'mana.inc' %]
+<script type="text/javascript">
+//<![CDATA[
+$(document).ready(function() {
+ $(document).on('click', 'button.mana-use', function() {
+ id = $(this).attr('id');
+ mana_use(id.substr(9));
+ });
+});
+//]]>
+</script>
+
+[% IF statuscode == "200" %]
+ <table id="mana_results_datatable" width=100%>
+ <thead>
+ <tr>
+ <th>ISSN</th>
+ <th class="anti-the" width=50%>Title</th>
+ <th> Published by </th>
+ <th>Frequency</th>
+ <th>Numbering pattern</th>
+ <th title="number of libraries using this pattern"># of users</th>
+ <th class="title-string" title="last time a library used this pattern">Last import</th>
+ <th> Comments </th>
+ [% UNLESS search_only %]
+ <th class="NoSort">Actions</th>
+ [% END %]
+ </tr>
+ </thead>
+ <tbody>
+ [% FOREACH subscription IN subscriptions %]
+ [% UNLESS subscription.cannotdisplay %]
+ [% IF subscription.nbofcomment > highWarned %]
+ <tr id="row[% subscription.subscriptionid %]" class = "high-warned-row" title="this resource has been reported more than [% highWarned %] times, take care!">
+ [% ELSIF subscription.nbofcomment > warned %]
+ <tr id="row[% subscription.subscriptionid %]" class = "warned-row" title="this resource has been reported more than [% warned %] times, take care!">
+ [% ELSIF subscription.nbofcomment > lowWarned %]
+ <tr id="row[% subscription.subscriptionid %]" class = "highlighted-row" title="this resource has been reported more than [% lowWarned %] times, take care!">
+ [% END %]
+ <input hidden class="rowid" value="[% subscription.id %]">
+ <td>[% IF ( subscription.issn ) %][% subscription.issn %][% END %]</td>
+ <td>[% subscription.title %]</a></td>
+ <td>[% IF ( subscription.publishercode ) %][% subscription.publishercode %][% END %]</td>
+ <td>[% IF ( subscription.sfdescription ) %][% subscription.sfdescription %][% END %]</td>
+ <td>[% IF ( subscription.numberingmethod ) %][% subscription.numberingmethod %][% END %]</td>
+ <td>[% IF ( subscription.nbofusers ) %][% subscription.nbofusers %][% END %]</td>
+ <td><span title="[% subscription.lastimport %]">[% subscription.lastimport | $KohaDates %]</span></td>
+ <td>[% FOREACH comment IN subscription.comments %][% comment.message %] ([% comment.nb %]) <br>[% END %]</td>
+
+ [% UNLESS search_only %]
+ <td>
+ <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 value="[% comment.id %]"> [% comment.message %] ([% comment.nb %])</option>
+ [% END %]
+ <option>other</option>
+ </select>
+ <button hidden class="actionreport2" hidden> Cancel</button>
+ </td>
+ [% END %]
+ </tr>
+ [% END %]
+ [% END %]
+ </tbody>
+ </table>
+[% ELSE %]
+ <h4>Mana search fails with the code: [% statuscode %] </h4>
+[% END %]
+
+<div id="comment_box" class="modal" tabindex="-1" role="dialog" aria-labelledby="mana_search_result_label" style="display: none;">
+ <div class="modal-dialog modal-lg" style="width: 30%">
+ <div class="modal-content" style="">
+ <div class="modal-header">
+ <button type="button" id="commentCloseButton" class="closebtn" aria-hidden="true">×</button>
+ <h3 id="mana_submit_comment"> Please enter a new commment (max 35 caracters)</h3>
+ </div>
+ <div class="modal-body">
+ <form>
+ <input hidden id="selected_id" value="">
+ <input type="text" id="manamsg"> Comment:
+ </form>
+ <button id="CommentButton"> Comment </button>
+ </div>
+ </div>
+ </div>
+</div>
<ul class="dropdown-menu">
<li id="newmenuc"><a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Build%20new">New guided report</a> </li>
<li id="newsql"><a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Create%20report%20from%20SQL">New SQL report</a> </li>
+ [% IF Koha.Preference('Mana')==1 %]
+ <li id="newsql"><a href="" data-toggle="modal" data-target="#mana_search_result">New SQL from Mana</a> </li>
+ [% END %]
</ul>
</div>
[% END %]
</div>
[% END %]
+ [% IF ( mana_id && Koha.Preference('Mana') == 1 ) %]
+ <div class="btn-group">
+ <button class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown"> Report mistake <span class="caret"></span></button>
+ <ul class="dropdown-menu">
+ [% FOREACH c IN mana_comments %]
+ <li class="mana-comment" data-id="[% c.id %]">
+ <a href="#">[% c.message %] ([% c.nb %])</a>
+ </li>
+ [% END %]
+ <li role="separator" class="divider"></li>
+ <li class="mana-other-comment"><a href="#">Other</a> </li>
+ </ul>
+ </div>
+
+ <div id="mana-comment-box" class="modal" tabindex="-1" role="dialog" aria-labelledby="mana_search_result_label" style="display: none;">
+ <div class="modal-dialog modal-lg" style="width: 30%">
+ <div class="modal-content" style="">
+ <div class="modal-header">
+ <button type="button" id="mana-comment-close" class="closebtn" aria-hidden="true">×</button>
+ <h3 id="mana_submit_comment"> Please enter a new commment (max 35 caracters)</h3>
+ </div>
+ <div class="modal-body">
+ <input hidden id="mana-resource" value="report">
+ <input hidden id="mana-resource-id" value="[% mana_id %]">
+ <div>
+ <input type="text" maxlength="35" size="35" id="mana-comment">
+ </div>
+ <button id="mana-send-comment"> Comment </button>
+ </div>
+ </div>
+ </div>
+ </div>
+ [% END %]
+
[% IF ( execute ) %]
[% BLOCK params %]
[%- FOREACH param IN sql_params %]&sql_params=[% param | uri %][% END %]
[% END %]
</div>
+
+[% IF Koha.Preference('Mana')==1 %]
+ <div id="mana_search_result" class="modal fade container-fluid" tabindex="-1" role="dialog" aria-labelledby="mana_search_result_label" style="width: 100%; left:0%; margin-left: auto; display: none;">
+ <div class="modal-dialog modal-lg">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">×</button>
+ <h3 id="mana_search_result_label"> Mana Search</h3>
+ </div>
+ <div>
+ <form id="search_form" style="margin-left: 5%">
+ Please enter a few key words:
+ <input type=text id=mana_search_field>
+ <input type=button class="mana_search_button" value="Search">
+ </form>
+ <div class="modal-body">
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+[% END %]
+
+<script type="text/javascript">
+ function mana_use( mana_id ){
+ $.ajax( {
+ type:"POST",
+ url: "/cgi-bin/koha/svc/mana/use",
+ data: {id:mana_id, resource: 'report', saveinbase: 1},
+ dataType: "json",
+ })
+ .done( function (result){
+ if ( result.errmsg ){
+ alert( result.errmsg );
+ }
+ else{
+ window.location = ("/cgi-bin/koha/reports/guided_reports.pl?reports=").concat(result.id).concat("&phase=Show%20SQL&mana_success=1&phase=Edit%20SQL");
+ }
+ })
+ .fail( function ( foo, msg, longmsg, bla ){
+ });
+ }
+
+ function mana_search( textquery ){
+ $.ajax({
+ type: "POST",
+ url: "/cgi-bin/koha/svc/mana/search",
+ data: {biblionumber: $("#biblionumber").val(), resource: 'report', id: textquery, usecomments: 1},
+ dataType: "html",
+ })
+ .done( function( result ) {
+ $("#mana_search_result .modal-body").html(result);
+ $("#mana_search_result_label").text(_("Results from Mana Knowledge Base"));
+ $("#mana_results_datatable").dataTable($.extend(true, {}, dataTablesDefaults,{
+ "sPaginationType":"four_button",
+ "autoWidth": false,
+ "columnDefs": [
+ { "width": "35%", "targets": 1 }
+ ],
+ "aoColumnDefs": [
+ { 'bSortable': false, "bSearchable": false, 'aTargets': [ 'NoSort' ] },
+ { "sType": "title-string", "aTargets" : [ "title-string" ] },
+ { 'sType': "anti-the", 'aTargets' : [ 'anti-the'] }
+ ]
+ }));
+ if($("td.dataTables_empty").length == 0){
+ $("#mana_search").show();
+ }
+
+ $( "select[class='actionreport1']" ).show();
+ $( "button[class='actionreport2']" ).hide();
+
+ $(".showbutton").on("click", function(){
+ $(this).parent().hide();
+ $(this).parent().next().show();
+ });
+
+ $("a[class='hidebutton']").on("click", function(){
+ $(this).parent().hide();
+ $(this).parent().prev().show();
+ });
+
+ $("#commentCloseButton").on("click", function(){
+ $("#comment_box").modal("hide");
+ });
+
+ $(".actionreport1").on("click", function(){
+ $("#selectedcomment").val($(this).val());
+ $(this).parent("select").hide();
+ $(this).parent("select").next().show();
+ });
+
+ $(".actionreport2").on("click", function(){
+ $(this).hide();
+ $(this).prev().show();
+ mana_increment($("#selectedcomment").val(), 'resource_comment', 'nb', -1);
+ });
+ }).fail( function( result ){
+ });
+ }
+</script>
[% ELSE %]
<div class="btn-group"><a id="newsubscription" class="btn btn-default btn-sm" href="/cgi-bin/koha/serials/subscription-add.pl"><i class="fa fa-plus"></i> New subscription</a></div>
[% END %]
- [% IF Koha.Preference('Mana') %]
+ [% IF Koha.Preference('Mana') and Koha.Preference('AutoShareWithMana').grep('subscription').size == 0 %]
[% IF one_language_enabled==0 or mana_id %]
- <div class="btn-group"><a data-toggle="modal" data-toggle="tooltip" title="Your email address will be associated to your sharing." data-target="#mana_share_modal" class="btn btn-small"><i class="fa fa-share-alt"></i> Share</a></div>
+ <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="Your email address will be associated to your sharing."><a class="btn btn-small" 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 %]
[% END %]
[% END %]
[% END %]
+
+ [% IF ( mana_id && Koha.Preference('Mana') == 1 ) %]
+ <div class="btn-group">
+ <button class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown"> Report mistake <span class="caret"></span></button>
+ <ul class="dropdown-menu">
+ [% FOREACH c IN mana_comments %]
+ <li class="mana-comment" data-id="[% c.id %]">
+ <a href="#">[% c.message %] ([% c.nb %])</a>
+ </li>
+ [% END %]
+ <li role="separator" class="divider"></li>
+ <li class="mana-other-comment"><a href="#">Other</a> </li>
+ </ul>
+ </div>
+
+ <div id="mana-comment-box" class="modal" tabindex="-1" role="dialog" aria-labelledby="mana_search_result_label" style="display: none;">
+ <div class="modal-dialog modal-lg" style="width: 30%">
+ <div class="modal-content" style="">
+ <div class="modal-header">
+ <button type="button" id="mana-comment-close" class="closebtn" aria-hidden="true">×</button>
+ <h3 id="mana_submit_comment"> Please enter a new commment (max 35 caracters)</h3>
+ </div>
+ <div class="modal-body">
+ <input hidden id="mana-resource" value="subscription">
+ <input hidden id="mana-resource-id" value="[% mana_id %]">
+ <div>
+ <input type="text" maxlength="35" size="35" id="mana-comment">
+ </div>
+ <button id="mana-send-comment"> Comment </button>
+ </div>
+ </div>
+ </div>
+ </div>
+ [% END %]
</div>
[% ELSIF CAN_user_serials_create_subscription %]
<div id="toolbar" class="btn-toolbar">
<div class="modal-body">
[% IF (mana_id) %]
<div class="alert">
- <p>Your subscription is already linked with a Mana subscription model. Share it if you have made modifications, otherwide it will do nothing.</p>
+<h1>[% (mana_id) %]</h1>
+ <p>Your subscription is already linked with a Mana subscription model. Share it if you have made modifications, otherwise it will do nothing.</p>
</div>
[% END %]
[% IF ( languages_loop ) %]
[% UNLESS ( one_language_enabled ) %]
<div class="rows">
- <p>The frequency and the numberpattern of [% bibliotitle %] are :</p>
- <ol>
- <li><span class="label">Frequency : </span>
+ <li><span class="label">Frequency: </span>
[% frequency.description %]
</li>
- <li><span class="label">Number pattern : </span>
+ <li><span class="label">Number pattern: </span>
[% numberpattern.label %]
</li>
</ol>
<div class="rows">
<form method="get" id="mana_share_form" action="/cgi-bin/koha/serials/subscription-detail.pl" class="validated" >
<fieldset>
- <label for="mana_language">Language of your sharing :</label>
+ <label for="mana_language">Language:</label>
<select id="mana_language" name="mana_language">
[% FOREACH languages_loo IN languages_loop %]
[% IF ( languages_loo.group_enabled ) %]
[% 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>
<div class="main container-fluid">
<div class="row">
<div class="col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2">
-
+ [% IF ( Koha.Preference('Mana') == 2) %]
+ <fieldset>
+ <p><center> You haven't decided if you want to activate Mana Knowlede Base, please let us know by clicking<center></p>
+ <a href=/cgi-bin/koha/admin/preferences.pl?tab=&op=search&searchfield=request+to+mana+webservice><center>Here</center></a>
+ </fieldset>
+ [% END %]
<h1>Koha administration</h1>
<div class="row">
<div class="col-md-6 sysprefs">
[% Asset.js("lib/jquery/plugins/humanmsg.js") | $raw %]
[% Asset.js("js/ajax.js") | $raw %]
[% Asset.js("js/pages/preferences.js") | $raw %]
+ [% Asset.js("lib/jquery/activatemana.js") | $raw %]
[%# Add WYSIWYG editor for htmlarea system preferences %]
[% INCLUDE 'wysiwyg-systempreferences.inc' %]
[% END %]
-
- pref: Mana
choices:
- yes: Enable
- no: Disable
- - 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.
+ 0: Disable
+ 1: Enable
+ 2: No, let me think about it
+ - 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. The informations shared with Mana KB are shared under the CC-0 license. More infos about CC-0 license on https://creativecommons.org/choose/zero/
+ -
+ - "Security token used to authenticate on mana:"
+ - pref: ManaToken
+ class: Text
+ - <br> You need a security token to authenticate on Mana. If this sytem preference is empty, please fill in the following form, you will receive an email to confirm and activate your token. <br> <form> First name <input name="firstname" type="text" id="firstname"> <br> Last name <input name="lastname" type=text id=lastname> <br> Email address <input name="email" type=text id=email><br> <input type=submit id=activatemana value="Send"></form>
+ -
+ - 'Fields automatically shared with mana'
+ - pref: AutoShareWithMana
+ multiple:
+ subscription: Subscriptions
Reporting:
-
- Only return
--- /dev/null
+[% INCLUDE 'mana/mana-report-search-result.inc' %]
--- /dev/null
+[% INCLUDE 'mana/mana-subscription-search-result.inc' %]
</div>
[% END %]
+[% IF report_converted %]
+ <div class="dialog message">
+ The report "[% report_converted %]" has been converted.
+ </div>
+[% END %]
+
+
[% IF ( saved1 ) %]
[% IF ( savedreports ) %]<h1>Saved reports</h1>
<option value="">All</option>
</select>
</div>
+<div style="display:inline-block">
+ [% IF manamsg %]
+ <div id="mana_search" class="dialog message">
+ <p> [% manamsg %] </p>
+ </div>
+ [% END %]
+
+</script>
+
<form action="/cgi-bin/koha/reports/guided_reports.pl" id="reports_form" method="post">
<input type="hidden" name="phase" value="Delete Multiple" />
<table id="table_reports">
<tbody>
[% FOREACH savedreport IN savedreports %]
[% UNLESS ( loop.odd ) %]<tr class="odd">[% ELSE %]<tr>[% END %]
- <td>
+ <td class="report_checkbox">
[% IF ( CAN_user_reports_delete_reports ) %] <!-- not break CSS -->
<input type="checkbox" name="ids" value="[% savedreport.id | html %]" />
[% END %]
+ <input hidden class="report_sql" value="[% savedreport.savedsql |html %]">
</td>
- <td><label for="ids">[% savedreport.id | html %]</label></td>
- <td>
+ <td class="report_id"><label for="ids">[% savedreport.id | html %]</label></td>
+ <td class="report_name">
[% IF ( savedreport.report_name ) %]
[% savedreport.report_name | html %]
[% ELSE %]
[ no name ]
[% END %]
</td>
- <td>[% savedreport.type | html %]</td>
- <td>[% savedreport.groupname | html %]</td>
+ <td class="report_type">[% savedreport.type | html %]</td>
+ <td class="report_group">[% savedreport.groupname | html %]</td>
<td>[% savedreport.subgroupname | html %]</td>
- <td>[% savedreport.notes | html %]</td>
+ <td class="report_notes">[% savedreport.notes | html %]</td>
<td>[% savedreport.borrowersurname | html %][% IF ( savedreport.borrowerfirstname ) %], [% savedreport.borrowerfirstname | html %][% END %] ([% savedreport.borrowernumber | html %])</td>
<td><span title="[% savedreport.date_created | html %]">[% savedreport.date_created | $KohaDates %]</span></td>
<td><span title="[% savedreport.last_modified | html %]">[% savedreport.last_modified | $KohaDates with_hours => 1 %]</span></td>
<li><a href="/cgi-bin/koha/reports/guided_reports.pl?reports=[% savedreport.id | uri %]&phase=Edit%20SQL"><i class="fa fa-pencil"></i> Edit</a></li>
<li><a title="Duplicate this saved report" href="/cgi-bin/koha/reports/guided_reports.pl?phase=Create report from SQL&sql=[% savedreport.savedsql |uri %]&reportname=[% savedreport.report_name |uri %]&notes=[% savedreport.notes |uri %]"><i class="fa fa-copy"></i> Duplicate</a></li>
[% END %]
+ [% IF (Koha.Preference('Mana') == 1) %]
+ <li><a class="ShareButton" data-toggle="modal" href="#mana_share_report" title="Share your report with Mana Knowledge Base"><i class="fa fa-share-alt"></i> Share</a></li>
+ [% END %]
<li><a href="/cgi-bin/koha/tools/scheduler.pl?id=[% savedreport.id | uri %]"><i class="fa fa-clock-o"></i> Schedule</a></li>
[% IF ( CAN_user_reports_delete_reports ) %]
<li><a class="confirmdelete" title="Delete this saved report" href="/cgi-bin/koha/reports/guided_reports.pl?reports=[% savedreport.id | html %]&phase=Delete%20Saved"><i class="fa fa-trash"></i> Delete</a></li>
[% END %]
</tbody>
</table>
+</div>
[% IF ( CAN_user_reports_delete_reports ) %]
<fieldset class="action">
<input type="submit" value="Delete selected" />
[% END %]
[% END %]
+<div id="mana_share_report" class="modal fade" tabindex="-1" role="dialog" arialabelledby="mana_share_modal_label" style="display: none;">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h3 id="mana_share_modal_label">Share with Mana</h3>
+ </div>
+ <div class="modal-body">
+ [% IF (mana_id) %]
+ <div class="alert">
+ <p>Your subscription is already linked with a Mana subscription model. Share it if you have made modifications, otherwise it will do nothing.</p>
+ </div>
+ [% END %]
+ <div id="note-error" class="alert alert-danger" role="alert">
+ Please enter a report name and descriptive note before sharing (minimum 20 characters)
+ </div>
+ [% IF ( languages_loop ) %]
+ [% UNLESS ( one_language_enabled ) %]
+ <div class="shared_infos rows">
+ <li> <span class="label">Id: </span><div id="shared_id"></div>
+ </li>
+ <li> <span class="label">Name: </span><div id="shared_name"></div>
+ </li>
+ <li> <span class="label">SQL: </span><div id="shared_sql"></div>
+ </li>
+ <li> <span class="label">Group: </span><div id="shared_group"></div>
+ </li>
+ <li> <span class="label">Type: </span><div id="shared_type"></div>
+ </li>
+ <li> <span class="label">Notes: </span><div id="shared_notes"></div>
+ </li>
+
+ </div>
+ <div class="rows">
+ <form method="post" id="mana_share_form" action="/cgi-bin/koha/reports/guided_reports.pl?phase=Share" class="validated" >
+ <input type="hidden" name="phase" value="Share">
+
+ <fieldset class="shared_infos">
+ <label for="mana_language">Language:</label>
+ <select id="mana_language" name="mana_language">
+ [% FOREACH languages_loo IN languages_loop %]
+ [% IF ( languages_loo.group_enabled ) %]
+ [% IF ( languages_loo.plural ) %]
+ [% FOREACH sublanguages_loo IN languages_loo.sublanguages_loop %]
+ [% IF ( sublanguages_loo.enabled ) %]
+ [% IF ( sublanguages_loo.sublanguage_current ) %]
+ <option value="[% languages_loo.rfc4646_subtag %]" selected>
+ [% sublanguages_loo.native_description %]
+ [% sublanguages_loo.script_description %]
+ [% sublanguages_loo.region_description %]
+
+ [% sublanguages_loo.variant_description %]
+ ([% sublanguages_loo.rfc4646_subtag %])
+ </option>
+ [% ELSE %]
+ <option value="[% languages_loo.rfc4646_subtag %]">
+ [% sublanguages_loo.native_description %]
+ [% sublanguages_loo.script_description %]
+ [% sublanguages_loo.region_description %]
+ [% sublanguages_loo.variant_description %]
+ ([% sublanguages_loo.rfc4646_subtag %])
+ </option>
+ [% END %]
+ [% END %]
+ [% END %]
+ [% ELSE %]
+ [% IF ( languages_loo.group_enabled ) %]
+ [% IF ( languages_loo.current ) %]
+ <option value="[% languages_loo.rfc4646_subtag %]" selected>
+ [% IF ( languages_loo.native_description ) %]
+ [% languages_loo.native_description %]
+ [% ELSE %]
+ [% languages_loo.rfc4646_subtag %]
+ [% END %]
+ </option>
+ [% ELSE %]
+ <option value="[% languages_loo.rfc4646_subtag %]">
+ [% IF ( languages_loo.native_description ) %]
+ [% languages_loo.native_description %]
+ [% ELSE %]
+ [% languages_loo.rfc4646_subtag %]
+ [% END %]
+ </option>
+ [% END %]
+ [% END %]
+ [% END %]
+ [% END %]
+ [% END %]
+ </select>
+ <input type="hidden" id="reportid" name="reportid" value="[% savedreport.id %]"/>
+ </fieldset>
+ </form>
+ </div>
+ [% END %]
+ [% END %]
+ </div>
+ <div class="modal-footer">
+ <button class="btn" id="ManaCloseButton" data-dismiss="modal" aria-hidden="true">Close</button>
+ [% IF one_language_enabled==0 %]
+ <button id="ManaShareButton" type="submit" form="mana_share_form" class="btn btn-primary shared_infos">Share</button>
+ [% ELSE %]
+ <div id="ManaShareButton" class="btn-group"><a class="btn btn-primary shared_infos">Share</a></div>
+ [% END %]
+ </div>
+ </div>
+ </div>
+</div>
+
[% IF ( build1 ) %]
[% IF ( cache_error) %]
[% Asset.js("lib/d3c3/d3.min.js") | $raw %]
[% Asset.js("lib/d3c3/c3.min.js") | $raw %]
[% INCLUDE 'calendar.inc' %]
+ [% INCLUDE 'mana.inc' %]
[% IF ( saved1 ) %]
[% INCLUDE 'datatables.inc' %]
[% INCLUDE 'columns_settings.inc' %]
window.history.back();
});
+ $(".mana_search_button").on("click",function(){
+ mana_search($("#mana_search_field").val());
+ });
+
+ $(".ShareButton").on("click", function(){
+ $("#note-error").hide();
+ if($(this).closest("tr").find(".report_notes").text().length < 20 || $(this).closest("tr").find(".report_name").text().length < 20){
+ $(".shared_infos").hide();
+ $("#note-error").show();
+ }
+ else{
+ $("#shared_id").html($(this).closest("tr").find(".report_id").text());
+ $("#shared_name").html($(this).closest("tr").find(".report_name").text());
+ $("#shared_sql").html($(this).closest("tr").find(".report_sql").val());
+ $("#shared_type").html($(this).closest("tr").find(".report_type").text());
+ $("#shared_group").html($(this).closest("tr").find(".report_group").text());
+ $("#shared_notes").html($(this).closest("tr").find(".report_notes").text());
+ }
+ });
+
+ $("#ManaCloseButton").on("click", function() {
+ $(".shared_infos").show();
+ });
+
$("#addColumn").on("click",function(){
addColumn();
});
$(".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() {
$("#availableColumns option:selected").clone().appendTo("#selectedColumns").attr("selected", "selected");
}
+++ /dev/null
-[% INCLUDE 'mana-subscription-search-result.inc' %]
</ul>
[% IF mana %]
<div id="mana">
- [% INCLUDE 'mana-subscription-search-result.inc' %]
+ [% INCLUDE 'mana/mana-subscription-search-result.inc' %]
</div>
[% ELSE %]
<div id="opened">
[% MACRO jsinclude BLOCK %]
[% INCLUDE 'calendar.inc' %]
[% INCLUDE 'datatables.inc' %]
+ [% INCLUDE 'mana.inc' %]
<script>
var subscriptionid = "[% subscriptionid | html %]";
var MSG_CLOSE_SUBSCRIPTION = _("Are you sure you want to close this subscription?");
<style type="text/css">
fieldset.rows li.radio { width: 100%; } /* override staff-global.css */
.yui-u li p label.widelabel {
- width: 300px; /* not enough for IE7 apparently */
+width: 300px; /* not enough for IE7 apparently */
}
</style>
</head>
<div id="page_2">
<div class="col-md-6">
- <div id="mana_search" class="dialog message">
- <p>Frequency and Numbering pattern have been already proposed for this subscription on Mana. To show results, click <a style="cursor:pointer" data-toggle="modal" data-target="#mana_search_result">Here</a></p>
+ [% IF ( Koha.Preference('Mana') == 2) %]
+ <fieldset>
+ <p><center>You haven't activated the Mana Knowledge Base, click
+ <a href=/cgi-bin/koha/admin/preferences.pl?tab=&op=search&searchfield=request+to+mana+webservice>here</a>
+ to configure.</center></p>
+ </fieldset>
+ [% END %]
+
+ <div hidden id="mana_search" class="dialog message">
</div>
<div id="subscription_form_planning">
<fieldset class="rows">
<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>
</div>
</form>
</div>
- <div id="mana_search_result" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="mana_search_result_label" style="width: 90%; left:5%; margin-left: auto; display: none;">
+ <div id="mana_search_result" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="mana_search_result_label" style="width: 100%; left:0%; margin-left: auto; display: none;">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
+ <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="mana_search_result_label"></h3>
</div>
<div class="modal-body">
- </div>
- <div class="modal-footer">
- <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
- </div>
- </div>
</div>
</div>
[% MACRO jsinclude BLOCK %]
[% INCLUDE 'calendar.inc' %]
+ [% INCLUDE 'datatables.inc' %]
<script type="text/javascript">
var subscriptionid = "[% subscriptionid | html %]";
var irregularity = "[% irregularity | html %]";
[% FOREACH field IN dont_export_field_loop %]
tags.push("[% field.fieldid | html %]");
[% END %]
+ var mana_enabled = [% Koha.Preference('Mana') %]
var MSG_LINK_TO_VENDOR = _("If you wish to claim late or missing issues you must link this subscription to a vendor. Click OK to ignore or Cancel to return and enter a vendor");
var MSG_LINK_BIBLIO = _("You must choose or create a bibliographic record");
var MSG_REQUIRED_SUB_LENGTH = _("You must choose a subscription length or an end date.");
<div class="col-sm-10 col-sm-push-2">
<main>
- [% INCLUDE 'serials-toolbar.inc' mana_id = mana_id %]
+ [% INCLUDE 'serials-toolbar.inc' %]
<h1>Subscription for [% bibliotitle | html %] [% IF closed %](closed)[% END %]</h1>
[% IF ( abouttoexpire ) %]
[% IF mana_code.defined %]
<div id="alert-community" class="dialog message">
<p>
- [% IF (mana_code == 201) %]
- The export is done, thank you for your contribution.
- [% ELSIF (mana_code == 200) %]
- The model already exists on Mana, thank you for your contribution.
- [% END %]
+ [% mana_code %]
</p>
</div>
[% END %]
var MSG_REOPEN_SUBSCRIPTION = _("Are you sure you want to reopen this subscription?");
var CONFIRM_DELETE_SUBSCRIPTION = _("Are you sure you want to delete this subscription?");
</script>
+ [% INCLUDE 'mana.inc' %]
[% Asset.js("js/serials-toolbar.js") | $raw %]
[% INCLUDE 'datatables.inc' %]
[% Asset.js("lib/jquery/plugins/treetable/jquery.treetable.js") | $raw %]
popup( subscriptionid );
return false;
});
+ $("#mana-subscription-share").click(function() {
+ window.location="subscription-detail.pl?subscriptionid=" + subscriptionid + "&op=share";
+ });
});
}
function mana_search() {
+ $("#mana_search").html("<p>" + _("Mana kb is being asked for your subscription..") + "</p>");
+ $("#mana_search").show();
+
$.ajax({
type: "POST",
url: "/cgi-bin/koha/svc/mana/search",
- data: {biblionumber : $("#biblionumber").val()},
+ data: {id: $("#biblionumber").val(), resource: 'subscription', usecomments: 1},
dataType: "html",
})
.done( function( result ) {
- $("#mana_search_result .modal-body").html(result);
- $("#mana_search_result_label").text("Results from Mana");
+ $("#mana_search_result .modal-body").html(result);
+ $("#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"]],
+ "autoWidth": false,
+ "columnDefs": [
+ { "width": "35%", "targets": 1 }
+ ],
"aoColumnDefs": [
{ 'bSortable': false, "bSearchable": false, 'aTargets': [ 'NoSort' ] },
{ "sType": "title-string", "aTargets" : [ "title-string" ] },
{ 'sType': "anti-the", 'aTargets' : [ 'anti-the'] }
]
}));
- if($("td.dataTables_empty").length == 0){
- $("#mana_search").show();
+ 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>");
}
- }).fail(function(result){
- });
+ 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>");
+ }
+ else{
+ $("#mana_search").html( result );
+ }
+ $("#mana_search").show();
+ })
}
function mana_use(mana_id){
$.ajax( {
type: "POST",
url: "/cgi-bin/koha/svc/mana/use",
- data: {id : mana_id},
+ data: {id: mana_id, resource: 'subscription'},
dataType: "json",
})
.done(function(result){
});
}
-function removeDisabledAttr() {
- $('select:disabled').removeAttr('disabled');
-}
-
$(document).ready(function() {
+ mana_search();
$("#displayexample").hide();
$("#mana_search_result").modal("hide");
$("#aqbooksellerid").on('keypress', function(e) {
});
$("#subscription_add_next").on("click",function(){
if ( Check_page1() ){
- [% IF Koha.Preference('Mana') %]
+ if ( mana_enabled ) {
mana_search();
- [% END %]
+ }
show_page_2();
}
});
e.preventDefault();
testPredictionPattern();
});
-});
\ No newline at end of file
+ $('#save-subscription').on("click", function(e){
+ $('select:disabled').removeAttr('disabled');
+ });
+});
use Koha::BiblioFrameworks;
use Koha::Libraries;
use Koha::Patron::Categories;
+use Koha::SharedContent;
=head1 NAME
}
}
$template->param(
+ 'manamsg' => $input->param('manamsg') || '',
'saved1' => 1,
'savedreports' => $reports,
'usecache' => $usecache,
'notes' => $report->notes,
'sql' => $report->savedsql,
'showsql' => 1,
+ 'mana_success' => $input->param('mana_success'),
+ 'mana_success' => scalar $input->param('mana_success'),
+ 'mana_id' => $report->{mana_id},
+ 'mana_comments' => $report->{comments}
);
}
'public' => $report->public,
'usecache' => $usecache,
'editsql' => 1,
+ 'mana_id' => $report->{mana_id},
+ 'mana_comments' => $report->{comments}
);
}
elsif ( $phase eq 'Save' ) {
# Save the report that has just been built
- my $area = $input->param('area');
+ my $area = $input->param('area');
my $sql = $input->param('sql');
my $type = $input->param('type');
$template->param(
cache_expiry => $cache_expiry,
public => $public,
} );
+
logaction( "REPORTS", "ADD", $id, "$name | $sql" ) if C4::Context->preference("ReportsLog");
$template->param(
'save_successful' => 1,
}
}
+elsif ($phase eq 'Share'){
+ my $result = Koha::SharedContent::send_entity($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{
+ print $input->redirect("/cgi-bin/koha/reports/guided_reports.pl?phase=Use%20saved&manamsg=noanswer");
+ }
+}
elsif ($phase eq 'Run this report'){
# execute a saved report
my $limit = $input->param('limit') || 20;
) = GetNextSeq($subscription, $pattern, $frequency, $expected->{publisheddate});
## We generate the next publication date
- my $frequency = C4::Serials::Frequency::GetSubscriptionFrequency($subscription->{periodicity});
+ $frequency = C4::Serials::Frequency::GetSubscriptionFrequency($subscription->{periodicity});
my $nextpublisheddate = GetNextDate($subscription, $expected->{publisheddate}, $frequency, 1);
my $planneddate = $date_received_today ? dt_from_string : $nextpublisheddate;
## Creating the new issue
my $expiration_date_dt = $expiration_date ? dt_from_string( $expiration_date ) : undef;
my @subscriptions;
+my $mana_statuscode;
if ($searched){
if ($mana) {
- my $result = Koha::SharedContent::manaGetRequest("subscription",{
+ my $result = Koha::SharedContent::search_entities("subscription",{
title => $title,
issn => $ISSN,
ean => $EAN,
publisher => $publisher
});
+ $mana_statuscode = $result->{code};
@subscriptions = @{ $result->{data} };
}
else {
if ($mana) {
$template->param(
subscriptions => \@subscriptions,
+ statuscode => $mana_statuscode,
total => scalar @subscriptions,
title_filter => $title,
ISSN_filter => $ISSN,
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::Numberpattern->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'),
)->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');
my $mana_id;
if ( $query->param('mana_id') ne "" ) {
$mana_id = $query->param('mana_id');
- Koha::SharedContent::manaNewUserPatchRequest("subscription",$mana_id);
- }
- else {
- $mana_id = undef;
+ Koha::SharedContent::increment_entity_value("subscription",$mana_id, "nbofusers");
}
my $startdate = output_pref( { str => scalar $query->param('startdate'), dateonly => 1, dateformat => 'iso' } );
$staffdisplaycount, $opacdisplaycount, $graceperiod, $location, $enddate,
$skip_serialseq, $itemtype, $previousitemtype, $mana_id
);
-
+ if ( (C4::Context->preference('Mana')) and ( grep { $_ eq "subscription" } split(/,/, C4::Context->preference('AutoShareWithMana'))) ){
+ my $result = Koha::SharedContent::send_entity( $query->param('mana_language') || '', $loggedinuser, $subscriptionid, 'subscription');
+ $template->param( mana_msg => $result->{msg} );
+ }
my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
insert_additional_fields( $additional_fields, $biblionumber, $subscriptionid );
? 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');
my $mana_id;
if ( defined( $query->param('mana_id') ) ) {
$mana_id = $query->param('mana_id');
- Koha::SharedContent::manaNewUserPatchRequest("subscription",$mana_id);
+ Koha::SharedContent::increment_entity_value("subscription",$mana_id, "nbofusers");
}
else {
$mana_id = undef;
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{};
debug => 1,
});
-
my $subs = GetSubscription($subscriptionid);
output_and_exit( $query, $cookie, $template, 'unknown_subscription')
}
}
elsif ( $op and $op eq "share" ) {
- my $mana_language;
- if ( $query->param('mana_language') ) {
- $mana_language = $query->param('mana_language');
- }
- else {
- $mana_language = C4::Context->preference('language');
- }
-
- my $mana_email;
- if ( $loggedinuser ne 0 ) {
- my $borrower = Koha::Patrons->find($loggedinuser);
- $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 = 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,
- kohaversion => $versions{'kohaVersion'},
- exportemail => $mana_email
- };
- my $sub_mana_info = Koha::Subscription::get_sharable_info($subscriptionid);
- $sub_mana_info = { %$sub_mana_info, %$mana_info };
- my $result = Koha::SharedContent::manaPostRequest( "subscription",
- $sub_mana_info );
- if ( $result->{code} eq "200" and $result->{code} eq "201" ) {
- my $subscription = Koha::Subscriptions->find($subscriptionid);
- $subscription->set( { mana_id => $result->{id} } )->store;
- $subs->{mana_id} = $result->{id};
- }
- $template->param( mana_code => $result->{code} );
+ my $mana_language = $query->param('mana_language');
+ my $result = Koha::SharedContent::send_entity($mana_language, $loggedinuser, $subscriptionid, 'subscription');
+ $template->param( mana_code => $result->{msg} );
+ $subs->{mana_id} = $result->{id};
}
my $hasRouting = check_routing($subscriptionid);
default_bib_view => $default_bib_view,
orders_grouped => $orders_grouped,
(uc(C4::Context->preference("marcflavour"))) => 1,
+ mana_comments => $subs->{comments},
);
output_html_with_http_headers $query, $cookie, $template->output;
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2017 BibLibre Baptiste Wojtkowski
+#
+# 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::SharedContent;
+use C4::Auth qw(check_cookie_auth);
+
+use CGI;
+use JSON;
+
+
+my $input = new CGI;
+binmode STDOUT, ":encoding(UTF-8)";
+print $input->header( -type => 'text/plain', -charset => 'UTF-8' );
+
+my ( $auth_status, $sessionID ) =
+ check_cookie_auth( $input->cookie('CGISESSID'),
+ { serials => 'create_subscription' } );
+
+if ( $auth_status ne "ok" ) {
+ exit 0;
+}
+my $result = Koha::SharedContent::increment_entity_value(
+ scalar $input->param('resource'),
+ scalar $input->param('id'),
+ scalar $input->param('field'),
+ scalar $input->param('step')
+);
+
+return $result;
# along with Koha; if not, see <http://www.gnu.org/licenses>.
#
-use strict;
-use warnings;
+use Modern::Perl;
use Koha::SharedContent;
use Koha::Subscription;
exit 0;
}
+my $templatename;
+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(
{
- template_name => "serials/mana-subscription-search-result.tt",
+ template_name => $templatename,
query => $input,
type => "intranet",
authnotrequired => 0,
}
);
-my $biblionumber = $input->param('biblionumber');
+my ($identifier, $sub_mana_info);
+$identifier = $input->param('id');
+$template->param( lowWarned => 5, warned => 10, highWarned => 20);
+my $package = "Koha::".ucfirst($input->param( 'resource' ));
+$sub_mana_info = $package->get_search_info($identifier);
+
+$sub_mana_info->{ usecomments } = $input->param('usecomments');
+my $resourcename = $input->param('resource');
+my $result = Koha::SharedContent::search_entities( $resourcename, $sub_mana_info);
+my $nbofcomment;
+foreach my $resource (@{ $result->{data} }){
+ $nbofcomment = 0;
+ foreach my $comment (@{ $resource->{comments} }){
+ $nbofcomment += $comment->{nb};
+ }
+ $resource->{nbofcomment} = $nbofcomment;
+}
-my $sub_mana_info = Koha::Subscription::get_search_info($biblionumber);
-my $result =
- Koha::SharedContent::manaGetRequest( "subscription", $sub_mana_info );
-$template->param( subscriptions => $result->{data} );
+$template->param( $input->param('resource')."s" => $result->{data} );
+$template->param( statuscode => $result->{code} );
+$template->param( msg => $result->{msg} );
output_with_http_headers $input, $cookie, $template->output, 'json';
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2017 BibLibre Baptiste Wojtkowski
+#
+# 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::SharedContent;
+use C4::Auth qw(check_cookie_auth);
+
+use CGI;
+use JSON;
+
+
+my $input = new CGI;
+binmode STDOUT, ":encoding(UTF-8)";
+print $input->header( -type => 'text/plain', -charset => 'UTF-8' );
+
+my ( $auth_status, $sessionID ) =
+ check_cookie_auth( $input->cookie('CGISESSID'),
+ { serials => 'create_subscription' } );
+
+if ( $auth_status ne "ok" ) {
+ exit 0;
+}
+
+
+my $content;
+$content->{resource_id} = $input->param("resource_id");
+$content->{resource_type} = $input->param("resource");
+$content->{message} = $input->param("message");
+Koha::SharedContent::send_entity('', undef, undef, 'resource_comment', $content);
+my $package = "Koha::".ucfirst($input->param('resource'));
+my $resource;
+my $result;
+eval{
+ $result = Koha::SharedContent::get_entity_by_id(
+ 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: $@ )";
+}
+else{
+ if ( $input->param( 'saveinbase' )) {
+ $resource = { id => $package->new_from_mana($result->{data})->id };
+ }
+ else{
+ $resource = $result->{data};
+ }
+}
+
+print(to_json($resource));
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2016 BibLibre Baptiste Wojtkowski
+#
+# 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::SharedContent;
+use C4::Auth qw(check_cookie_auth);
+
+use CGI;
+use JSON;
+
+my $input = new CGI;
+binmode STDOUT, ":encoding(UTF-8)";
+print $input->header( -type => 'text/plain', -charset => 'UTF-8' );
+
+my ( $auth_status, $sessionID ) =
+ check_cookie_auth( $input->cookie('CGISESSID'),
+ { serials => 'create_subscription' } );
+
+if ( $auth_status ne "ok" ) {
+ exit 0;
+}
+
+my $mana_ip = C4::Context->config('mana_config');
+
+my $url = "$mana_ip/getsecuritytoken";
+my $request = HTTP::Request->new( POST => $url );
+
+my $content;
+$content->{ firstname }= $input->param("firstname");
+$content->{ lastname }= $input->param("lastname");
+$content->{ email }= $input->param("email");
+my $json = to_json( $content, { utf8 => 1 } );
+$request->content($json);
+my $result = Koha::SharedContent::process_request($request);
+
+print(to_json($result));
# along with Koha; if not, see <http://www.gnu.org/licenses>.
#
-use strict;
-use warnings;
+use Modern::Perl;
use Koha::SharedContent;
use C4::Auth qw(check_cookie_auth);
+use Koha::Report;
use CGI;
use JSON;
exit 0;
}
-my $result = Koha::SharedContent::manaGetRequestWithId("subscription", $input->param('id') );
+my $result = Koha::SharedContent::get_entity_by_id(
+ scalar $input->param('resource'),
+ scalar $input->param('id')
+);
+my $package = "Koha::".ucfirst($input->param('resource'));
+my $resource;
-my $subscription;
-$subscription = $result->{data};
-
-print(to_json($subscription));
+if ( $input->param( 'saveinbase' )) {
+ $resource = { id => $package->new_from_mana($result->{data})->id };
+}
+else{
+ $resource = $result->{data};
+}
+print(to_json($resource));
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 => 44;
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 = {};
+
+t::lib::Mocks::mock_config( 'mana_config', 'https://foo.bar');
+
+is(Koha::SharedContent::get_sharing_url(), 'https://foo.bar', 'Mana URL');
+
+my $result = Koha::SharedContent::search_entities('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::search_entities('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::search_entities('subscription', $query);
+is($result->{code}, 200, 'search_entities success');
+
+$result = Koha::SharedContent::get_entity_by_id('subscription', 23);
+is($result->{code}, 200, 'get_entity_by_id success');
+
+my $params = {
+ title => 'The English historical review',
+ issn => '0013-8266',
+ ean => '',
+ publishercode => 'Longman'
+};
+
+# Search a subscription.
+my $request = Koha::SharedContent::build_request('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::build_request('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::build_request('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::send_entity('en', $loggedinuser->{borrowernumber}, $subscription->{subscriptionid}, 'subscription');
+is($result->{code}, 200, 'send_entity success');
+
+my $s = Koha::Subscriptions->find($subscription->{subscriptionid});
+is($s->mana_id, 5, 'Mana id is set');
+
+my $data = Koha::SharedContent::prepare_entity_data(
+ '',
+ $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::build_request('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;
my $schema = Koha::Database->new->schema;
$schema->storage->txn_begin;
-my $builder = t::lib::TestBuilder->new;
use_ok('Koha::Subscription');
'unit' => $sub_freq_1->{unit},
'unitsperissue' => $sub_freq_1->{unitsperissue},
'issuesperunit' => $sub_freq_1->{issuesperunit},
+ 'label' => $sub_np_1->{label},
'sndescription' => $sub_np_1->{description},
'numberingmethod' => $sub_np_1->{numberingmethod},
'label' => $sub_np_1->{label},
'publishercode' => $bi_1->{publishercode}
};
-is_deeply( Koha::Subscription::get_sharable_info( $sub_1->{subscriptionid} ),
+is_deeply( Koha::Subscription->get_sharable_info( $sub_1->{subscriptionid} ),
$ref, "get_sharable_info function is ok" );
$schema->storage->txn_rollback;
--- /dev/null
+#!/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;
( $total_issues, @serials ) = C4::Serials::GetSerials( $subscriptionid );
my $publisheddate = output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
( $total_issues, @serials ) = C4::Serials::GetSerials( $subscriptionid );
-my $frequency = C4::Serials::Frequency::GetSubscriptionFrequency($subscription->{periodicity});
+$frequency = C4::Serials::Frequency::GetSubscriptionFrequency($subscription->{periodicity});
my $nextpublisheddate = C4::Serials::GetNextDate($subscription, $publisheddate, $frequency, 1);
my @statuses = qw( 2 2 3 3 3 3 3 4 4 41 42 43 44 5 );
# Add 14 serials
#!/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;