Merge branch 'bug_5343' into 3.12-master
authorJared Camins-Esakov <jcamins@cpbibliography.com>
Sat, 23 Mar 2013 03:57:05 +0000 (23:57 -0400)
committerJared Camins-Esakov <jcamins@cpbibliography.com>
Sat, 23 Mar 2013 03:57:05 +0000 (23:57 -0400)
20 files changed:
C4/Acquisition.pm
C4/Budgets.pm
C4/Serials.pm
acqui/addorder.pl
acqui/finishreceive.pl
acqui/neworderempty.pl
acqui/newordersubscription.pl [new file with mode: 0755]
acqui/orderreceive.pl
installer/data/mysql/kohastructure.sql
installer/data/mysql/updatedatabase.pl
koha-tmpl/intranet-tmpl/prog/en/includes/acquisitions-add-to-basket.inc
koha-tmpl/intranet-tmpl/prog/en/includes/subscriptions-search.inc [new file with mode: 0644]
koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt
koha-tmpl/intranet-tmpl/prog/en/modules/acqui/newordersubscription.tt [new file with mode: 0644]
koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt
koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-home.tt
koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-detail.tt
kohaversion.pl
serials/serials-search.pl
serials/subscription-detail.pl

index 4a9eae6..5973456 100644 (file)
@@ -58,7 +58,7 @@ BEGIN {
         &SearchOrder &GetHistory &GetRecentAcqui
         &ModReceiveOrder &CancelReceipt &ModOrderBiblioitemNumber
         &GetCancelledOrders
-
+        &GetLastOrderNotReceivedFromSubscriptionid &GetLastOrderReceivedFromSubscriptionid
         &NewOrderItem &ModOrderItem &ModItemOrder
 
         &GetParcels &GetParcel
@@ -1007,6 +1007,67 @@ sub GetOrder {
     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
index 7b553e6..2c78284 100644 (file)
@@ -41,6 +41,7 @@ BEGIN {
         &DelBudget
         &GetBudgetSpent
         &GetBudgetOrdered
+        &GetBudgetName
         &GetPeriodsCount
         &GetChildBudgetsSpent
 
@@ -356,6 +357,28 @@ sub GetBudgetOrdered {
        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;
index 48880b2..a1597c8 100644 (file)
@@ -58,6 +58,7 @@ BEGIN {
       &CountIssues
       HasItems
       &GetSubscriptionsFromBorrower
+      &subscriptionCurrentlyOnOrder
 
     );
 }
@@ -1542,7 +1543,7 @@ sub ReNewSubscription {
     # renew subscription
     $query = qq|
         UPDATE subscription
-        SET    startdate=?,numberlength=?,weeklength=?,monthlength=?
+        SET    startdate=?,numberlength=?,weeklength=?,monthlength=?,reneweddate=NOW()
         WHERE  subscriptionid=?
     |;
     $sth = $dbh->prepare($query);
@@ -2730,6 +2731,28 @@ sub ReopenSubscription {
     $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__
 
index 3fa7620..077adaf 100755 (executable)
@@ -153,6 +153,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
 my $orderinfo                                  = $input->Vars;
 $orderinfo->{'list_price'}    ||=  0;
 $orderinfo->{'uncertainprice'} ||= 0;
+$orderinfo->{subscriptionid} ||= undef;
 
 my $user = $input->remote_user;
 
index 0ea16ca..5ca2c98 100755 (executable)
@@ -52,7 +52,6 @@ my $invoiceno        = $invoice->{invoicenumber};
 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");
index 0a279c0..b1c9afa 100755 (executable)
@@ -97,7 +97,6 @@ my $budget_id       = $input->param('budget_id') || 0;
 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');
@@ -105,6 +104,7 @@ my $suggestionid    = $input->param('suggestionid');
 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';
 
@@ -129,6 +129,9 @@ if(!$basketno) {
 }
 
 our $basket = GetBasket($basketno);
+$booksellerid = $basket->{booksellerid} unless $booksellerid;
+my $bookseller = GetBookSellerFromId($booksellerid);
+
 my $contract = &GetContract($basket->{contractnumber});
 
 #simple parameters reading (all in one :-)
@@ -186,10 +189,8 @@ else {    #modify order
     $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;
@@ -321,6 +322,26 @@ if (C4::Context->preference('AcqCreateItem') eq 'ordering' && !$ordernumber) {
 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', '');
 
@@ -392,6 +413,7 @@ $template->param(
     publishercode    => $data->{'publishercode'},
     barcode_subfield => $barcode_subfield,
     import_batch_id  => $import_batch_id,
+    subscriptionid   => $subscriptionid,
     (uc(C4::Context->preference("marcflavour"))) => 1
 );
 
diff --git a/acqui/newordersubscription.pl b/acqui/newordersubscription.pl
new file mode 100755 (executable)
index 0000000..c44ff3b
--- /dev/null
@@ -0,0 +1,107 @@
+#!/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;
index f25b5a9..ec60f54 100755 (executable)
@@ -199,6 +199,7 @@ $template->param(
     biblionumber          => $order->{'biblionumber'},
     ordernumber           => $order->{'ordernumber'},
     biblioitemnumber      => $order->{'biblioitemnumber'},
+    subscriptionid        => $order->{subscriptionid},
     booksellerid          => $order->{'booksellerid'},
     freight               => $freight,
     name                  => $bookseller->{'name'},
index 68a5715..ae6be56 100644 (file)
@@ -1945,6 +1945,7 @@ CREATE TABLE `subscription` (
   `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
@@ -2811,8 +2812,6 @@ CREATE TABLE `aqorders` ( -- information related to the basket line items
   `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
@@ -2830,6 +2829,7 @@ CREATE TABLE `aqorders` ( -- information related to the basket line items
   `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`),
@@ -2837,7 +2837,8 @@ CREATE TABLE `aqorders` ( -- information related to the basket line items
   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;
 
 
index 9c04a25..a01be2b 100755 (executable)
@@ -6984,6 +6984,17 @@ if ( CheckVersion($DBversion) ) {
     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)
index c36698d..01ecec9 100644 (file)
@@ -1,17 +1,22 @@
 <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 %]&amp;basketno=[% basketno %]">From a suggestion</a></li>
+        <li><a href="/cgi-bin/koha/acqui/newordersubscription.pl?booksellerid=[% booksellerid %]&amp;basketno=[% basketno %]">From a subscription</a></li>
         <li><a href="/cgi-bin/koha/acqui/neworderempty.pl?booksellerid=[% booksellerid %]&amp;basketno=[% basketno %]">From a new (empty) record</a></li>
         <li><a href="/cgi-bin/koha/acqui/z3950_search.pl?booksellerid=[% booksellerid %]&amp;basketno=[% basketno %]">From an external source</a></li>
         <li><a href="/cgi-bin/koha/acqui/addorderiso2709.pl?booksellerid=[% booksellerid %]&amp;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 %]
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/subscriptions-search.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/subscriptions-search.inc
new file mode 100644 (file)
index 0000000..db65f93
--- /dev/null
@@ -0,0 +1,54 @@
+<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>
index 8a1534a..549bf62 100644 (file)
@@ -361,46 +361,48 @@ $(document).ready(function()
         </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>&nbsp;</th>
-                        <th>&nbsp;</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>&nbsp;</th>
+                          <th>&nbsp;</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>
@@ -412,9 +414,17 @@ $(document).ready(function()
                 [% 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 -->
@@ -586,14 +596,19 @@ $(document).ready(function()
                 [% 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 %]&amp;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 %]&amp;basketno=[% basketno %]">Cancel</a>
+            [% ELSE %]
+                <a class="cancel" href="/cgi-bin/koha/acqui/basket.pl?basketno=[% basketno %]">Cancel</a>
+            [% END %]
         [% END %]
     </fieldset>
 </form>
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/newordersubscription.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/newordersubscription.tt
new file mode 100644 (file)
index 0000000..ea9bc32
--- /dev/null
@@ -0,0 +1,120 @@
+[% USE KohaDates %]
+[% INCLUDE 'doc-head-open.inc' %]
+<title>Koha &rsaquo; 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> &rsaquo; <a href="/cgi-bin/koha/acqui/acqui-home.pl">Acquisitions</a> &rsaquo; <a href="/cgi-bin/koha/acqui/supplier.pl?supplierid=[% supplierid %]">[% booksellername %]</a> &rsaquo; <a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% basketno %]">Shopping Basket [% basketno %]</a> &rsaquo; 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 %]&amp;basketno=[% basketno %]&amp;biblionumber=[% sub.biblionumber %]&amp;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' %]
index 910844d..9e16755 100644 (file)
@@ -122,7 +122,7 @@ function IEEventHandler_KeyDown() {
     $(document).ready(function() {
         [% IF (AcqCreateItemReceiving) %]
             cloneItemBlock(0, '[% UniqueItemFields %]');
-        [% ELSIF (AcqCreateItem == 'ordering') %]
+        [% ELSIF (AcqCreateItem == 'ordering') && not subscriptionid %]
             $("input[name='items_to_receive']").change(function() {
                 CalcQtyToReceive();
             });
@@ -218,17 +218,19 @@ function IEEventHandler_KeyDown() {
             </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>
@@ -294,35 +296,39 @@ function IEEventHandler_KeyDown() {
        <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.
index eaafc94..4037b45 100644 (file)
@@ -17,6 +17,7 @@
     </div>
   </div>
   <div class="yui-b">
+    [% INCLUDE 'subscriptions-search.inc' %]
     [% INCLUDE 'serials-menu.inc' %]
   </div>
 </div>
index 80f74e7..a507abb 100644 (file)
@@ -129,7 +129,7 @@ $(document).ready(function() {
             <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>
@@ -139,7 +139,7 @@ $(document).ready(function() {
                         <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>
@@ -150,7 +150,7 @@ $(document).ready(function() {
                         <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>
index 40292c1..1d37e96 100644 (file)
@@ -16,7 +16,7 @@ the kohaversion is divided in 4 parts :
 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
index aaf64e6..bc84ed6 100755 (executable)
@@ -106,7 +106,7 @@ my $branches = GetBranches();
 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'},
index 3b36284..8a829ed 100755 (executable)
 # 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;
@@ -122,34 +124,33 @@ my $numberpattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($su
 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"),
@@ -171,7 +172,9 @@ $template->param(
     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;
 
@@ -189,3 +192,36 @@ sub get_default_view {
     }
     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;
+    }
+}