&SearchOrder &GetHistory &GetRecentAcqui
&ModReceiveOrder &CancelReceipt &ModOrderBiblioitemNumber
&GetCancelledOrders
-
+ &GetLastOrderNotReceivedFromSubscriptionid &GetLastOrderReceivedFromSubscriptionid
&NewOrderItem &ModOrderItem &ModItemOrder
&GetParcels &GetParcel
return $data;
}
+=head3 GetLastOrderNotReceivedFromSubscriptionid
+
+ $order = &GetLastOrderNotReceivedFromSubscriptionid($subscriptionid);
+
+Returns a reference-to-hash describing the last order not received for a subscription.
+
+=cut
+
+sub GetLastOrderNotReceivedFromSubscriptionid {
+ my ( $subscriptionid ) = @_;
+ my $dbh = C4::Context->dbh;
+ my $query = qq|
+ SELECT * FROM aqorders
+ LEFT JOIN subscription
+ ON ( aqorders.subscriptionid = subscription.subscriptionid )
+ WHERE aqorders.subscriptionid = ?
+ AND aqorders.datereceived IS NULL
+ LIMIT 1
+ |;
+ my $sth = $dbh->prepare( $query );
+ $sth->execute( $subscriptionid );
+ my $order = $sth->fetchrow_hashref;
+ return $order;
+}
+
+=head3 GetLastOrderReceivedFromSubscriptionid
+
+ $order = &GetLastOrderReceivedFromSubscriptionid($subscriptionid);
+
+Returns a reference-to-hash describing the last order received for a subscription.
+
+=cut
+
+sub GetLastOrderReceivedFromSubscriptionid {
+ my ( $subscriptionid ) = @_;
+ my $dbh = C4::Context->dbh;
+ my $query = qq|
+ SELECT * FROM aqorders
+ LEFT JOIN subscription
+ ON ( aqorders.subscriptionid = subscription.subscriptionid )
+ WHERE aqorders.subscriptionid = ?
+ AND aqorders.datereceived =
+ (
+ SELECT MAX( aqorders.datereceived )
+ FROM aqorders
+ LEFT JOIN subscription
+ ON ( aqorders.subscriptionid = subscription.subscriptionid )
+ WHERE aqorders.subscriptionid = ?
+ AND aqorders.datereceived IS NOT NULL
+ )
+ ORDER BY ordernumber DESC
+ LIMIT 1
+ |;
+ my $sth = $dbh->prepare( $query );
+ $sth->execute( $subscriptionid, $subscriptionid );
+ my $order = $sth->fetchrow_hashref;
+ return $order;
+
+}
+
+
#------------------------------------------------------------#
=head3 NewOrder
&DelBudget
&GetBudgetSpent
&GetBudgetOrdered
+ &GetBudgetName
&GetPeriodsCount
&GetChildBudgetsSpent
return $sum;
}
+=head2 GetBudgetName
+
+ my $budget_name = &GetBudgetName($budget_id);
+
+get the budget_name for a given budget_id
+
+=cut
+
+sub GetBudgetName {
+ my ( $budget_id ) = @_;
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare(
+ qq|
+ SELECT budget_name
+ FROM aqbudgets
+ WHERE budget_id = ?
+ |);
+
+ $sth->execute($budget_id);
+ return $sth->fetchrow_array;
+}
+
# -------------------------------------------------------------------
sub GetBudgetAuthCats {
my ($budget_period_id) = shift;
&CountIssues
HasItems
&GetSubscriptionsFromBorrower
+ &subscriptionCurrentlyOnOrder
);
}
# renew subscription
$query = qq|
UPDATE subscription
- SET startdate=?,numberlength=?,weeklength=?,monthlength=?
+ SET startdate=?,numberlength=?,weeklength=?,monthlength=?,reneweddate=NOW()
WHERE subscriptionid=?
|;
$sth = $dbh->prepare($query);
$sth->execute( $subscriptionid );
}
+=head2 subscriptionCurrentlyOnOrder
+
+ $bool = subscriptionCurrentlyOnOrder( $subscriptionid );
+
+Return 1 if subscription is currently on order else 0.
+
+=cut
+
+sub subscriptionCurrentlyOnOrder {
+ my ( $subscriptionid ) = @_;
+ my $dbh = C4::Context->dbh;
+ my $query = qq|
+ SELECT COUNT(*) FROM aqorders
+ WHERE subscriptionid = ?
+ AND datereceived IS NULL
+ AND datecancellationprinted IS NULL
+ |;
+ my $sth = $dbh->prepare( $query );
+ $sth->execute($subscriptionid);
+ return $sth->fetchrow_array;
+}
+
1;
__END__
my $orderinfo = $input->Vars;
$orderinfo->{'list_price'} ||= 0;
$orderinfo->{'uncertainprice'} ||= 0;
+$orderinfo->{subscriptionid} ||= undef;
my $user = $input->remote_user;
my $datereceived = $invoice->{shipmentdate};
my $booksellerid = $input->param('booksellerid');
my $cnt = 0;
-my $error_url_str;
my $ecost = $input->param('ecost');
my $rrp = $input->param('rrp');
my $note = $input->param("note");
my $title = $input->param('title');
my $author = $input->param('author');
my $publicationyear = $input->param('publicationyear');
-my $bookseller = GetBookSellerFromId($booksellerid); # FIXME: else ERROR!
my $ordernumber = $input->param('ordernumber') || '';
our $biblionumber = $input->param('biblionumber');
our $basketno = $input->param('basketno');
my $close = $input->param('close');
my $uncertainprice = $input->param('uncertainprice');
my $import_batch_id = $input->param('import_batch_id'); # if this is filled, we come from a staged file, and we will return here after saving the order !
+my $subscriptionid = $input->param('subscriptionid');
my $data;
my $new = 'no';
}
our $basket = GetBasket($basketno);
+$booksellerid = $basket->{booksellerid} unless $booksellerid;
+my $bookseller = GetBookSellerFromId($booksellerid);
+
my $contract = &GetContract($basket->{contractnumber});
#simple parameters reading (all in one :-)
$biblionumber = $data->{'biblionumber'};
$budget_id = $data->{'budget_id'};
- #get basketno and supplierno. too!
- my $data2 = GetBasket( $data->{'basketno'} );
- $basketno = $data2->{'basketno'};
- $booksellerid = $data2->{'booksellerid'};
+ $basket = GetBasket( $data->{'basketno'} );
+ $basketno = $basket->{'basketno'};
}
my $suggestion;
my @itemtypes;
@itemtypes = C4::ItemType->all unless C4::Context->preference('item-level_itypes');
+if ( defined $subscriptionid ) {
+ my $lastOrderReceived = GetLastOrderReceivedFromSubscriptionid $subscriptionid;
+ if ( defined $lastOrderReceived ) {
+ $budget_id = $lastOrderReceived->{budgetid};
+ $data->{listprice} = $lastOrderReceived->{listprice};
+ $data->{uncertainprice} = $lastOrderReceived->{uncertainprice};
+ $data->{gstrate} = $lastOrderReceived->{gstrate};
+ $data->{discount} = $lastOrderReceived->{discount};
+ $data->{rrp} = $lastOrderReceived->{rrp};
+ $data->{ecost} = $lastOrderReceived->{ecost};
+ $data->{quantity} = $lastOrderReceived->{quantity};
+ $data->{unitprice} = $lastOrderReceived->{unitprice};
+ $data->{notes} = $lastOrderReceived->{notes};
+ $data->{sort1} = $lastOrderReceived->{sort1};
+ $data->{sort2} = $lastOrderReceived->{sort2};
+
+ $basket = GetBasket( $input->param('basketno') );
+ }
+}
+
# Find the items.barcode subfield for barcode validations
my (undef, $barcode_subfield) = GetMarcFromKohaField('items.barcode', '');
publishercode => $data->{'publishercode'},
barcode_subfield => $barcode_subfield,
import_batch_id => $import_batch_id,
+ subscriptionid => $subscriptionid,
(uc(C4::Context->preference("marcflavour"))) => 1
);
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2012 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 2 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+use Modern::Perl;
+use CGI;
+use C4::Acquisition;
+use C4::Auth;
+use C4::Bookseller qw/GetBookSellerFromId/;
+use C4::Branch;
+use C4::Context;
+use C4::Output;
+use C4::Serials;
+
+my $query = new CGI;
+my $title = $query->param('title_filter');
+my $ISSN = $query->param('ISSN_filter');
+my $EAN = $query->param('EAN_filter');
+my $publisher = $query->param('publisher_filter');
+my $supplier = $query->param('supplier_filter');
+my $branch = $query->param('branch_filter');
+my $routing = $query->param('routing') || C4::Context->preference("RoutingSerials");
+my $searched = $query->param('searched');
+my $biblionumber = $query->param('biblionumber');
+
+my $basketno = $query->param('basketno');
+my $booksellerid = $query->param('booksellerid');
+
+my ( $template, $loggedinuser, $cookie, $flags ) = get_template_and_user(
+ { template_name => "acqui/newordersubscription.tt",
+ query => $query,
+ type => "intranet",
+ authnotrequired => 0,
+ flagsrequired => { acquisition => 'order_manage' },
+ }
+);
+
+my $basket = GetBasket($basketno);
+$booksellerid = $basket->{booksellerid} unless $booksellerid;
+my ($bookseller) = GetBookSellerFromId($booksellerid);
+
+my @subscriptions;
+if ($searched) {
+ @subscriptions = SearchSubscriptions({
+ title => $title,
+ issn => $ISSN,
+ ean => $EAN,
+ publisher => $publisher,
+ bookseller => $supplier,
+ branch => $branch
+ });
+}
+
+foreach my $sub (@subscriptions) {
+ $sub->{alreadyOnOrder} = subscriptionCurrentlyOnOrder $sub->{subscriptionid};
+
+ # to toggle between create or edit routing list options
+ if ($routing) {
+ $sub->{routingedit} = check_routing( $sub->{subscriptionid} );
+ }
+}
+
+my $branches = GetBranches();
+my @branches_loop;
+foreach (sort keys %$branches){
+ my $selected = 0;
+ $selected = 1 if defined $branch && $branch eq $_;
+ push @branches_loop, {
+ branchcode => $_,
+ branchname => $branches->{$_}->{branchname},
+ selected => $selected,
+ };
+}
+
+$template->param(
+ subs_loop => \@subscriptions,
+ title_filter => $title,
+ ISSN_filter => $ISSN,
+ EAN_filter => $EAN,
+ publisher_filter => $publisher,
+ supplier_filter => $supplier,
+ branch_filter => $branch,
+ branches_loop => \@branches_loop,
+ done_searched => $searched,
+ routing => $routing,
+ booksellerid => $booksellerid,
+ basketno => $basket->{basketno},
+ basketname => $basket->{basketname},
+ booksellername => $bookseller->{name},
+ dateformat => C4::Context->preference("dateformat"),
+);
+output_html_with_http_headers $query, $cookie, $template->output;
biblionumber => $order->{'biblionumber'},
ordernumber => $order->{'ordernumber'},
biblioitemnumber => $order->{'biblioitemnumber'},
+ subscriptionid => $order->{subscriptionid},
booksellerid => $order->{'booksellerid'},
freight => $freight,
name => $bookseller->{'name'},
`graceperiod` int(11) NOT NULL default '0',
`enddate` date default NULL,
`closed` INT(1) NOT NULL DEFAULT 0,
+ `reneweddate` date default NULL,
PRIMARY KEY (`subscriptionid`),
CONSTRAINT subscription_ibfk_1 FOREIGN KEY (periodicity) REFERENCES subscription_frequencies (id) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT subscription_ibfk_2 FOREIGN KEY (numberpattern) REFERENCES subscription_numberpatterns (id) ON DELETE SET NULL ON UPDATE CASCADE
`notes` mediumtext, -- notes related to this order line
`supplierreference` mediumtext, -- not used? always NULL
`purchaseordernumber` mediumtext, -- not used? always NULL
- `subscription` tinyint(1) default NULL, -- not used? always NULL
- `serialid` varchar(30) default NULL, -- not used? always NULL
`basketno` int(11) default NULL, -- links this order line to a specific basket (aqbasket.basketno)
`biblioitemnumber` int(11) default NULL, -- links this order line the biblioitems table (biblioitems.biblioitemnumber)
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, -- the date and time this order line was last modified
`uncertainprice` tinyint(1), -- was this price uncertain (1 for yes, 0 for no)
`claims_count` int(11) default 0, -- count of claim letters generated
`claimed_date` date default NULL, -- last date a claim was generated
+ `subscriptionid` int(11) default NULL, -- links this order line to a subscription (subscription.subscriptionid)
parent_ordernumber int(11) default NULL, -- ordernumber of parent order line, or same as ordernumber if no parent
PRIMARY KEY (`ordernumber`),
KEY `basketno` (`basketno`),
KEY `budget_id` (`budget_id`),
CONSTRAINT `aqorders_ibfk_1` FOREIGN KEY (`basketno`) REFERENCES `aqbasket` (`basketno`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `aqorders_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE SET NULL ON UPDATE CASCADE,
- CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (invoiceid) REFERENCES aqinvoices (invoiceid) ON DELETE SET NULL ON UPDATE CASCADE
+ CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (invoiceid) REFERENCES aqinvoices (invoiceid) ON DELETE SET NULL ON UPDATE CASCADE,
+ CONSTRAINT `aqorders_subscriptionid` FOREIGN KEY (`subscriptionid`) REFERENCES `subscription` (`subscriptionid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SetVersion ($DBversion);
}
+$DBversion = "3.11.00.116";
+if ( CheckVersion($DBversion) ) {
+ $dbh->do(q{ALTER TABLE aqorders DROP COLUMN serialid;});
+ $dbh->do(q{ALTER TABLE aqorders DROP COLUMN subscription;});
+ $dbh->do(q{ALTER TABLE aqorders ADD COLUMN subscriptionid INT(11) DEFAULT NULL;});
+ $dbh->do(q{ALTER TABLE aqorders ADD CONSTRAINT aqorders_subscriptionid FOREIGN KEY (subscriptionid) REFERENCES subscription (subscriptionid) ON DELETE CASCADE ON UPDATE CASCADE;});
+ $dbh->do(q{ALTER TABLE subscription ADD COLUMN reneweddate DATE DEFAULT NULL;});
+ print "Upgrade to $DBversion done (Bug 5343: table aqorders: DROP serialid and subscription fields and ADD subscriptionid, table subscription: ADD reneweddate)\n";
+ SetVersion ($DBversion);
+}
+
=head1 FUNCTIONS
=head2 TableExists($table)
<fieldset id="acqui_basket_add">
<legend>Add order to basket</legend>
[% IF has_budgets %]
- <form action="/cgi-bin/koha/acqui/neworderbiblio.pl" method="post">
- <input type="hidden" name="booksellerid" value="[% booksellerid %]" />
- <input type="hidden" name="basketno" value="[% basketno %]" />
- <ul><li><label for="q">From an existing record: </label><input id="q" type="text" size="25" name="q" />
- <input type="submit" class="submit" value="Search" /></li>
+ <ul>
+ <li>
+ <label for="q">From an existing record: </label>
+ <form action="/cgi-bin/koha/acqui/neworderbiblio.pl" method="post">
+ <input type="hidden" name="booksellerid" value="[% booksellerid %]" />
+ <input type="hidden" name="basketno" value="[% basketno %]" />
+ <input id="q" type="text" size="25" name="q" />
+ <input type="submit" class="submit" value="Search" />
+ </form>
+ </li>
<li><a href="/cgi-bin/koha/acqui/newordersuggestion.pl?booksellerid=[% booksellerid %]&basketno=[% basketno %]">From a suggestion</a></li>
+ <li><a href="/cgi-bin/koha/acqui/newordersubscription.pl?booksellerid=[% booksellerid %]&basketno=[% basketno %]">From a subscription</a></li>
<li><a href="/cgi-bin/koha/acqui/neworderempty.pl?booksellerid=[% booksellerid %]&basketno=[% basketno %]">From a new (empty) record</a></li>
<li><a href="/cgi-bin/koha/acqui/z3950_search.pl?booksellerid=[% booksellerid %]&basketno=[% basketno %]">From an external source</a></li>
<li><a href="/cgi-bin/koha/acqui/addorderiso2709.pl?booksellerid=[% booksellerid %]&basketno=[% basketno %]"> From a staged file</a></li>
- </ul>
- </form>
+ </ul>
[% ELSE %]
You can't create any orders unless you first <a href="/cgi-bin/koha/admin/aqbudgetperiods.pl">define a budget and a fund</a>.
[% END %]
--- /dev/null
+<div id="advsearch">
+ <form action="" method="get">
+ <fieldset class="brief">
+ <a id="unfold_advsearch" style="cursor:pointer" onclick="$('#advsearch_form').slideToggle(400);">Advanced search</a>
+ <div id="advsearch_form" style="display:none">
+ <ol>
+ <li>
+ <label for="issn">ISSN:</label>
+ <input type="text" id="issn" name="ISSN_filter" value="[% ISSN_filter %]" />
+ </li>
+ <li>
+ <label for="title">Title:</label>
+ <input type="text" id="title" name="title_filter" value="[% title_filter %]" />
+ </li>
+ <li>
+ <label for="ean">EAN:</label>
+ <input type="text" id="ean" name="EAN_filter" value="[% EAN_filter %]" />
+ </li>
+ <li>
+ <label for="publisher">Publisher:</label>
+ <input type="text" id="publisher" name="publisher_filter" value="[% publisher_filter %]" />
+ </li>
+ <li>
+ <label for="supplier">Supplier:</label>
+ <input type="text" id="supplier" name="supplier_filter" value="[% supplier_filter %]" />
+ </li>
+ <li>
+ <label for="branch">Branch:</label>
+ <select id="branch" name="branch_filter">
+ <option value="">All</option>
+ [% FOREACH branch IN branches_loop %]
+ [% IF (branch.selected) %]
+ <option selected="branch.selected" value="[% branch.branchcode %]">[% branch.branchname %]</option>
+ [% ELSE %]
+ <option value="[% branch.branchcode %]">[% branch.branchname %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </li>
+ </ol>
+ <input type="hidden" name="searched" value="1" />
+ [% IF (booksellerid) %]
+ <input type="hidden" name="booksellerid" value="[% booksellerid %]" />
+ [% END %]
+ [% IF (basketno) %]
+ <input type="hidden" name="basketno" value="[% basketno %]" />
+ [% END %]
+ <fieldset class="action">
+ <input type="submit" value="Search" />
+ </fieldset>
+ </div>
+ </fieldset>
+ </form>
+</div>
</fieldset>
[% END %]
- [% IF (AcqCreateItemOrdering) %]
-
- <div id="items_list" style="display:none">
- <p><b>Items list</b></p>
- <div style="width:100%;overflow:auto;">
- <table>
- <thead>
- <tr>
- <th> </th>
- <th> </th>
- <th>Barcode</th>
- <th>Home library</th>
- <th>Holding library</th>
- <th>Not for loan</th>
- <th>Restricted</th>
- <th>Location</th>
- <th>Call number</th>
- <th>Copy number</th>
- <th>Stock number</th>
- <th>Collection code</th>
- <th>Item type</th>
- <th>Materials</th>
- <th>Notes</th>
- </tr>
- </thead>
- <tbody>
- </tbody>
- </table>
- </div>
- </div>
-
- <fieldset class="rows" id="itemfieldset">
- <legend>Item</legend>
- [% IF ( NoACQframework ) %]
- <div class="dialog message">No ACQ framework, using default. You should create a framework with code ACQ, the items framework would be used</div>
- [% END %]
-
- <div id="outeritemblock"></div>
-
- </fieldset>
+ [% UNLESS subscriptionid %][% # it is a suggestion, we have not items %]
+ [% IF (AcqCreateItemOrdering) %]
+
+ <div id="items_list" style="display:none">
+ <p><b>Items list</b></p>
+ <div style="width:100%;overflow:auto;">
+ <table>
+ <thead>
+ <tr>
+ <th> </th>
+ <th> </th>
+ <th>Barcode</th>
+ <th>Home library</th>
+ <th>Holding library</th>
+ <th>Not for loan</th>
+ <th>Restricted</th>
+ <th>Location</th>
+ <th>Call number</th>
+ <th>Copy number</th>
+ <th>Stock number</th>
+ <th>Collection code</th>
+ <th>Item type</th>
+ <th>Materials</th>
+ <th>Notes</th>
+ </tr>
+ </thead>
+ <tbody>
+ </tbody>
+ </table>
+ </div>
+ </div>
+
+ <fieldset class="rows" id="itemfieldset">
+ <legend>Item</legend>
+ [% IF ( NoACQframework ) %]
+ <div class="dialog message">No ACQ framework, using default. You should create a framework with code ACQ, the items framework would be used</div>
+ [% END %]
+
+ <div id="outeritemblock"></div>
+
+ </fieldset>
+ [% END %][%# UNLESS subscriptionid %]
[% END %][%# IF (AcqCreateItemOrdering) %]
<fieldset class="rows">
<legend>Accounting Details</legend>
[% ELSE %]
<label class="required" for="quantity">Quantity: </label>
[% IF (AcqCreateItemOrdering) %]
- <input type="text" readonly="readonly" size="20" id="quantity" name="quantity" value="0" />
+ [% IF subscriptionid %]
+ <input type="text" readonly="readonly" size="20" id="quantity" name="quantity" value="1" />
+ [% ELSE %]
+ <input type="text" readonly="readonly" size="20" id="quantity" name="quantity" value="0" />
+ [% END %]
[% ELSE %]
- <input type="text" size="20" id="quantity" name="quantity" value="[% quantityrec %]" onchange="updateCosts();" />
+ [% IF subscriptionid %]
+ <input type="text" readonly="readonly" size="20" id="quantity" name="quantity" value="1" />
+ [% ELSE %]
+ <input type="text" size="20" id="quantity" name="quantity" value="[% quantityrec %]" onchange="updateCosts();" />
+ [% END %]
[% END %]
[% END %]
<!-- origquantityrec only here for javascript compatibility (additem.js needs it, useless here, usefull when receiveing an order -->
[% END %]
</span>
</li>
-</ol>
+ </ol>
</fieldset>
<fieldset class="action">
+ <input type="hidden" name="subscriptionid" value="[% subscriptionid %]" />
<input type="submit" value="Save" />
[% IF (suggestionid) %]
<a class="cancel" href="/cgi-bin/koha/acqui/newordersuggestion.pl?booksellerid=[% booksellerid %]&basketno=[% basketno %]">Cancel</a>
[% ELSE %]
- <a class="cancel" href="/cgi-bin/koha/acqui/basket.pl?basketno=[% basketno %]">Cancel</a>
+ [% IF subscriptionid %]
+ <a class="cancel" href="/cgi-bin/koha/acqui/newordersubscription.pl?booksellerid=[% booksellerid %]&basketno=[% basketno %]">Cancel</a>
+ [% ELSE %]
+ <a class="cancel" href="/cgi-bin/koha/acqui/basket.pl?basketno=[% basketno %]">Cancel</a>
+ [% END %]
[% END %]
</fieldset>
</form>
--- /dev/null
+[% USE KohaDates %]
+[% INCLUDE 'doc-head-open.inc' %]
+<title>Koha › Serials [% biblionumber %]</title>
+<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" />
+[% INCLUDE 'doc-head-close.inc' %]
+<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.dataTables.min.js"></script>
+[% INCLUDE 'datatables-strings.inc' %]
+<script type="text/javascript" src="[% themelang %]/js/datatables.js"></script>
+<script type="text/javascript">
+//<![CDATA[
+ function updateRowsVisibility(show_only_renewed) {
+ if ( show_only_renewed ) {
+ $("#srlt [data-reneweddate='']").hide();
+ } else {
+ $("#srlt > tbody > tr").show();
+ }
+ }
+
+ [% IF (dateformat == 'metric') %]
+ dt_add_type_uk_date();
+ [% END %]
+ $(document).ready(function() {
+ $("#srlt").dataTable($.extend(true, {}, dataTablesDefaults, {
+ "aoColumnDefs": [
+ [% IF (dateformat == 'metric') %]
+ { "aTargets": [ -2 ], "sType": "uk_date" },
+ [% END %]
+ ],
+ } ) )
+
+ $("#show_only_renewed").click(function(){
+ updateRowsVisibility($(this+":checked").val());
+ });
+ $("#show_only_renewed").attr('checked', false);
+ updateRowsVisibility(false);
+
+ $("#advsearch_form").show();
+ });
+ //]]>
+</script>
+</head>
+<body>
+[% INCLUDE 'header.inc' %]
+[% INCLUDE 'acquisitions-search.inc' %]
+
+<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/acqui/acqui-home.pl">Acquisitions</a> › <a href="/cgi-bin/koha/acqui/supplier.pl?supplierid=[% supplierid %]">[% booksellername %]</a> › <a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% basketno %]">Shopping Basket [% basketno %]</a> › Add order from a subscription</div>
+
+<div id="doc3" class="yui-t2">
+ <div id="bd">
+ <div id="yui-main">
+ <div class="yui-b">
+ <h2>Serials subscriptions</h2>
+ [% IF (done_searched) %]
+ <label for="show_only_renewed">
+ <input type="checkbox" style="vertical-align: middle;" id="show_only_renewed" />
+ Show only renewed
+ </label>
+ [% IF (subs_loop) %]
+ <table id="srlt">
+ <thead>
+ <tr>
+ <th>ISSN</th>
+ <th>Title</th>
+ <th> Notes </th>
+ <th>Library</th>
+ <th>Call number</th>
+ <th>Expiration date</th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ [% FOREACH sub IN subs_loop %]
+ <tr data-reneweddate="[% sub.reneweddate %]" >
+ <td>[% sub.issn %]</td>
+ <td><a href="/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=[% sub.subscriptionid %]" class="button" title="subscription detail">[% IF (sub.title) %][% sub.title |html %][% ELSE %]
+ ---
+ [% END %][% IF (sub.unititle) %], [% sub.unititle %][% END %]</a>
+ </td>
+ <td>[% notes %]
+ [% IF (sub.internalnotes) %]([% sub.internalnotes %])[% END %]
+ </td>
+ <td>
+ [% IF (sub.branchcode) %][% sub.branchcode %][% END %]
+ </td>
+ <td>
+ [% IF (sub.callnumber) %][% sub.callnumber %][% END %]
+ </td>
+ <td>
+ [% IF (sub.enddate) %][% sub.enddate | $KohaDates %][% END %]
+ </td>
+ <td>
+ [% IF (sub.alreadyOnOrder) %]
+ Outstanding order (only one order per subscription is allowed)
+ [% ELSIF not sub.aqbooksellerid || booksellerid == sub.aqbooksellerid%]
+ <a href="/cgi-bin/koha/acqui/neworderempty.pl?booksellerid=[% booksellerid %]&basketno=[% basketno %]&biblionumber=[% sub.biblionumber %]&subscriptionid=[% sub.subscriptionid %]" title="Order this one">
+ Order
+ </a>
+ [% ELSE %]
+ <a title="This subscription depends on another supplier" style="cursor:help">Cannot be ordered</a>
+ [% END %]
+ </td>
+ </tr>
+ [% END %]
+ </tbody>
+ </table>
+ [% ELSE %]
+ <p>Sorry, there is no result for your search.</p>
+ [% END %]
+ [% ELSE %]
+ <p>Use the search form on the left to find subscriptions.</p>
+ [% END %]
+ </div>
+ </div>
+
+ <div class="yui-b">
+ [% INCLUDE 'subscriptions-search.inc' %]
+ [% INCLUDE 'acquisitions-menu.inc' %]
+ </div>
+</div>
+[% INCLUDE 'intranet-bottom.inc' %]
$(document).ready(function() {
[% IF (AcqCreateItemReceiving) %]
cloneItemBlock(0, '[% UniqueItemFields %]');
- [% ELSIF (AcqCreateItem == 'ordering') %]
+ [% ELSIF (AcqCreateItem == 'ordering') && not subscriptionid %]
$("input[name='items_to_receive']").change(function() {
CalcQtyToReceive();
});
</div>
</div>
- <fieldset class="rows" id="itemfieldset">
- <legend>Item</legend>
- [% IF ( NoACQframework ) %]
- <p class="required">
- No ACQ framework, using default. You should create a
- framework with code ACQ, the items framework would be
- used
- </p>
- [% END %]
- <div id="outeritemblock"></div>
- </fieldset>
+ [% UNLESS subscriptionid %]
+ <fieldset class="rows" id="itemfieldset">
+ <legend>Item</legend>
+ [% IF ( NoACQframework ) %]
+ <p class="required">
+ No ACQ framework, using default. You should create a
+ framework with code ACQ, the items framework would be
+ used
+ </p>
+ [% END %]
+ <div id="outeritemblock"></div>
+ </fieldset>
+ [% END %]
[% ELSIF (AcqCreateItem == 'ordering') %]
[% IF (items.size) %]
<h5>Items</h5>
<li><label for="bookfund">Budget: </label><span> [% bookfund %] </span></li>
<li><label for="creator">Created by: </label><span> [% IF ( memberfirstname and membersurname ) %][% IF ( memberfirstname ) %][% memberfirstname %][% END %] [% membersurname %][% ELSE %]No name[% END %]</span></li>
<li><label for="quantity_to_receive">Quantity to receive: </label><span class="label">
- [% IF ( edit ) %]
+ [% IF ( edit and not subscriptionid) %]
<input type="text" id="quantity_to_receive" name="quantity" value="[% quantity %]" />
- [% ELSE %]
+ [% ELSE%]
<input type="text" readonly="readonly" id="quantity_to_receive" name="quantity" value="[% quantity %]" />
[% END %]
</span></li>
<li><label for="quantity">Quantity received: </label>
[% IF (AcqCreateItemReceiving) %]
- <input readonly="readonly" type="text" size="20" name="quantityrec" id="quantity" value="0" />
+ [% IF ( subscriptionid ) %]
+ <input readonly="readonly" type="text" size="20" name="quantityrec" id="quantity" value="1" />
+ [% ELSE %]
+ <input readonly="readonly" type="text" size="20" name="quantityrec" id="quantity" value="0" />
+ [% END %]
[% ELSE %]
[% IF ( quantityreceived ) %]
[% IF ( edit ) %]
<input type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceived %]" />
- <input id="origquantityrec" READONLY type="hidden" name="origquantityrec" value="[% quantityreceived %]" />
+ <input id="origquantityrec" readonly="readonly" type="hidden" name="origquantityrec" value="[% quantityreceived %]" />
[% ELSE %]
- [% IF ( items ) %]
- <input READONLY type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceivedplus1 %]" />
- [% ELSE %]
- <input type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceivedplus1 %]" />
- [% END %]
- <input id="origquantityrec" READONLY type="hidden" name="origquantityrec" value="[% quantityreceived %]" />
+ [% IF ( items ) %]
+ <input readonly="readonly" type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceivedplus1 %]" />
+ [% ELSE %]
+ <input type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceivedplus1 %]" />
+ [% END %]
+ <input id="origquantityrec" readonly="readonly" type="hidden" name="origquantityrec" value="[% quantityreceived %]" />
[% END %]
[% ELSE %]
- [% IF ( items ) %]
- <input type="text" id="quantity" size="20" name="quantityrec" value="1" />
+ [% IF ( subscriptionid ) %]
+ <input type="text" readonly="readonly" id="quantity" size="20" name="quantityrec" value="1" />
[% ELSE %]
- <input type="text" size="20" id="quantity" name="quantityrec" value="1" />
+ <input type="text" id="quantity" size="20" name="quantityrec" value="1" />
[% END %]
- <input id="origquantityrec" READONLY type="hidden" name="origquantityrec" value="0" />
+ <input id="origquantityrec" readonly="readonly" type="hidden" name="origquantityrec" value="0" />
[% END %]
<div id="qtyrecerror" style="display:none">
<p class="error">Warning, you have entered more items than expected.
</div>
</div>
<div class="yui-b">
+ [% INCLUDE 'subscriptions-search.inc' %]
[% INCLUDE 'serials-menu.inc' %]
</div>
</div>
<h2>Acquisition details</h2>
<table>
<thead>
- <tr><th></th><th>Price exc. taxes</th><th>Price inc. taxes</th><th>fund</th><th></th></tr>
+ <tr><th></th><th>Price exc. taxes</th><th>Price inc. taxes</th><th>Fund</th><th></th></tr>
</thead>
<tbody>
<tr>
<td>[% budget_name_ordered %]</td>
<td>
[% IF ( ordered_exists ) %]
- <a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% basketno %]">See basket informations</a>
+ <a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% basketno %]">See basket information</a>
[% END %]
</td>
</tr>
<td>[% budget_name_spent %]</td>
<td>
[% IF ( spent_exists ) %]
- <a href="/cgi-bin/koha/acqui/invoice.pl?invoicenumber=[% invoicenumber %]">See invoice informations</a>
+ <a href="/cgi-bin/koha/acqui/invoice.pl?invoiceid=[% invoiceid %]">See invoice information</a>
[% END %]
</td>
</tr>
use strict;
sub kohaversion {
- our $VERSION = '3.11.00.115';
+ our $VERSION = '3.11.00.116';
# version needs to be set this way
# so that it can be picked up by Makefile.PL
# during install
my @branches_loop;
foreach (sort keys %$branches){
my $selected = 0;
- $selected = 1 if( $branch eq $_ );
+ $selected = 1 if( defined $branch and $branch eq $_ );
push @branches_loop, {
branchcode => $_,
branchname => $branches->{$_}->{'branchname'},
# with Koha; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-use strict;
-use warnings;
+use Modern::Perl;
use CGI;
+use C4::Acquisition;
use C4::Auth;
+use C4::Bookseller qw/GetBookSellerFromId/;
+use C4::Budgets;
use C4::Koha;
use C4::Dates qw/format_date/;
use C4::Serials;
my $default_bib_view = get_default_view();
my ( $order, $bookseller, $tmpl_infos );
-# FIXME = see http://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=5335#c52
-#if ( defined $subscriptionid ) {
-# my $lastOrderNotReceived = GetLastOrderNotReceivedFromSubscriptionid $subscriptionid;
-# my $lastOrderReceived = GetLastOrderReceivedFromSubscriptionid $subscriptionid;
-# if ( defined $lastOrderNotReceived ) {
-# my $basket = GetBasket $lastOrderNotReceived->{basketno};
-# my $bookseller = GetBookSellerFromId $basket->{booksellerid};
-# ( $tmpl_infos->{valuegsti_ordered}, $tmpl_infos->{valuegste_ordered} ) = get_value_with_gst_params ( $lastOrderNotReceived->{ecost}, $lastOrderNotReceived->{gstrate}, $bookseller );
-# $tmpl_infos->{valuegsti_ordered} = sprintf( "%.2f", $tmpl_infos->{valuegsti_ordered} );
-# $tmpl_infos->{valuegste_ordered} = sprintf( "%.2f", $tmpl_infos->{valuegste_ordered} );
-# $tmpl_infos->{budget_name_ordered} = GetBudgetName $lastOrderNotReceived->{budget_id};
-# $tmpl_infos->{basketno} = $lastOrderNotReceived->{basketno};
-# $tmpl_infos->{ordered_exists} = 1;
-# }
-# if ( defined $lastOrderReceived ) {
-# my $basket = GetBasket $lastOrderReceived->{basketno};
-# my $bookseller = GetBookSellerFromId $basket->{booksellerid};
-# ( $tmpl_infos->{valuegsti_spent}, $tmpl_infos->{valuegste_spent} ) = get_value_with_gst_params ( $lastOrderReceived->{unitprice}, $lastOrderReceived->{gstrate}, $bookseller );
-# $tmpl_infos->{valuegsti_spent} = sprintf( "%.2f", $tmpl_infos->{valuegsti_spent} );
-# $tmpl_infos->{valuegste_spent} = sprintf( "%.2f", $tmpl_infos->{valuegste_spent} );
-# $tmpl_infos->{budget_name_spent} = GetBudgetName $lastOrderReceived->{budget_id};
-# $tmpl_infos->{invoicenumber} = $lastOrderReceived->{booksellerinvoicenumber};
-# $tmpl_infos->{spent_exists} = 1;
-# }
-#}
+if ( defined $subscriptionid ) {
+ my $lastOrderNotReceived = GetLastOrderNotReceivedFromSubscriptionid $subscriptionid;
+ my $lastOrderReceived = GetLastOrderReceivedFromSubscriptionid $subscriptionid;
+ if ( defined $lastOrderNotReceived ) {
+ my $basket = GetBasket $lastOrderNotReceived->{basketno};
+ my $bookseller = GetBookSellerFromId $basket->{booksellerid};
+ ( $tmpl_infos->{valuegsti_ordered}, $tmpl_infos->{valuegste_ordered} ) = get_value_with_gst_params ( $lastOrderNotReceived->{ecost}, $lastOrderNotReceived->{gstrate}, $bookseller );
+ $tmpl_infos->{valuegsti_ordered} = sprintf( "%.2f", $tmpl_infos->{valuegsti_ordered} );
+ $tmpl_infos->{valuegste_ordered} = sprintf( "%.2f", $tmpl_infos->{valuegste_ordered} );
+ $tmpl_infos->{budget_name_ordered} = GetBudgetName $lastOrderNotReceived->{budget_id};
+ $tmpl_infos->{basketno} = $lastOrderNotReceived->{basketno};
+ $tmpl_infos->{ordered_exists} = 1;
+ }
+ if ( defined $lastOrderReceived ) {
+ my $basket = GetBasket $lastOrderReceived->{basketno};
+ my $bookseller = GetBookSellerFromId $basket->{booksellerid};
+ ( $tmpl_infos->{valuegsti_spent}, $tmpl_infos->{valuegste_spent} ) = get_value_with_gst_params ( $lastOrderReceived->{unitprice}, $lastOrderReceived->{gstrate}, $bookseller );
+ $tmpl_infos->{valuegsti_spent} = sprintf( "%.2f", $tmpl_infos->{valuegsti_spent} );
+ $tmpl_infos->{valuegste_spent} = sprintf( "%.2f", $tmpl_infos->{valuegste_spent} );
+ $tmpl_infos->{budget_name_spent} = GetBudgetName $lastOrderReceived->{budget_id};
+ $tmpl_infos->{invoiceid} = $lastOrderReceived->{invoiceid};
+ $tmpl_infos->{spent_exists} = 1;
+ }
+}
$template->param(
- subscriptionid => $subscriptionid,
+ subscriptionid => $subscriptionid,
serialslist => \@serialslist,
hasRouting => $hasRouting,
routing => C4::Context->preference("RoutingSerials"),
default_bib_view => $default_bib_view,
(uc(C4::Context->preference("marcflavour"))) => 1,
show_acquisition_details => defined $tmpl_infos->{ordered_exists} || defined $tmpl_infos->{spent_exists} ? 1 : 0,
- );
+ basketno => $order->{basketno},
+ %$tmpl_infos,
+);
output_html_with_http_headers $query, $cookie, $template->output;
}
return 'detail';
}
+
+sub get_value_with_gst_params {
+ my $value = shift;
+ my $gstrate = shift;
+ my $bookseller = shift;
+ if ( $bookseller->{listincgst} ) {
+ return ( $value, $value / ( 1 + $gstrate ) );
+ } else {
+ return ( $value * ( 1 + $gstrate ), $value );
+ }
+}
+
+sub get_gste {
+ my $value = shift;
+ my $gstrate = shift;
+ my $bookseller = shift;
+ if ( $bookseller->{invoiceincgst} ) {
+ return $value / ( 1 + $gstrate );
+ } else {
+ return $value;
+ }
+}
+
+sub get_gst {
+ my $value = shift;
+ my $gstrate = shift;
+ my $bookseller = shift;
+ if ( $bookseller->{invoiceincgst} ) {
+ return $value / ( 1 + $gstrate ) * $gstrate;
+ } else {
+ return $value * ( 1 + $gstrate ) - $value;
+ }
+}