Bug 18736: (follow-up) Remove duplicate code and adjust tests
authorNick Clemens <nick@bywatersolutions.com>
Thu, 20 Sep 2018 19:34:10 +0000 (19:34 +0000)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Mon, 25 Mar 2019 14:29:30 +0000 (14:29 +0000)
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
(cherry picked from commit ca28c83abbd449c7e5f1d7b86760b7fb53741988)
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

C4/Acquisition.pm
C4/Budgets.pm
t/Acquisition.t

index d58d3bd..9373868 100644 (file)
@@ -94,6 +94,7 @@ BEGIN {
         &FillWithDefaultValues
 
         &get_rounded_price
+        &get_rounding_sql
     );
 }
 
@@ -1462,8 +1463,8 @@ sub ModReceiveOrder {
         $dbh->do(q|
             UPDATE aqorders
             SET
-                tax_value_on_ordering = quantity * | . _get_rounding_sql(q|ecost_tax_excluded|) . q| * tax_rate_on_ordering,
-                tax_value_on_receiving = quantity * | . _get_rounding_sql(q|unitprice_tax_excluded|) . q| * tax_rate_on_receiving
+                tax_value_on_ordering = quantity * | . get_rounding_sql(q|ecost_tax_excluded|) . q| * tax_rate_on_ordering,
+                tax_value_on_receiving = quantity * | . get_rounding_sql(q|unitprice_tax_excluded|) . q| * tax_rate_on_receiving
             WHERE ordernumber = ?
         |, undef, $order->{ordernumber});
 
@@ -1646,8 +1647,8 @@ sub CancelReceipt {
         $dbh->do(q|
             UPDATE aqorders
             SET
-                tax_value_on_ordering = quantity * | . _get_rounding_sql(q|ecost_tax_excluded|) . q| * tax_rate_on_ordering,
-                tax_value_on_receiving = quantity * | . _get_rounding_sql(q|unitprice_tax_excluded|) . q| * tax_rate_on_receiving
+                tax_value_on_ordering = quantity * | . get_rounding_sql(q|ecost_tax_excluded|) . q| * tax_rate_on_ordering,
+                tax_value_on_receiving = quantity * | . get_rounding_sql(q|unitprice_tax_excluded|) . q| * tax_rate_on_receiving
             WHERE ordernumber = ?
         |, undef, $parent_ordernumber);
 
@@ -1999,15 +2000,15 @@ sub TransferOrder {
     return $newordernumber;
 }
 
-=head3 _get_rounding_sql
+=head3 get_rounding_sql
 
-    $rounding_sql = _get_rounding_sql("mysql_variable_to_round_string");
+    $rounding_sql = get_rounding_sql("mysql_variable_to_round_string");
 
 returns the correct SQL routine based on OrderPriceRounding system preference.
 
 =cut
 
-sub _get_rounding_sql {
+sub get_rounding_sql {
     my ( $round_string ) = @_;
     my $rounding_pref = C4::Context->preference('OrderPriceRounding');
     if ( $rounding_pref eq "nearest_cent"  ) { return ("CAST($round_string*100 AS UNSIGNED)/100"); }
index 83ed17d..9c53236 100644 (file)
@@ -24,6 +24,7 @@ use Koha::Database;
 use Koha::Patrons;
 use Koha::Acquisition::Invoice::Adjustments;
 use C4::Debug;
+use C4::Acquisition;
 use vars qw(@ISA @EXPORT);
 
 BEGIN {
@@ -211,7 +212,7 @@ sub GetBudgetsPlanCell {
     my ( $cell, $period, $budget ) = @_; #FIXME we don't use $period
     my ($actual, $sth);
     my $dbh = C4::Context->dbh;
-    my $roundsql = _get_rounding_sql(qq|ecost_tax_included|);
+    my $roundsql = C4::Acquisition::get_rounding_sql(qq|ecost_tax_included|);
     if ( $cell->{'authcat'} eq 'MONTHS' ) {
         # get the actual amount
         # FIXME we should consider quantity
@@ -336,7 +337,7 @@ sub GetBudgetSpent {
     # unitprice_tax_included should always been set here
     # we should not need to retrieve ecost_tax_included
     my $sth = $dbh->prepare(qq|
-        SELECT SUM( | . _get_rounding_sql("COALESCE(unitprice_tax_included, ecost_tax_included)") . qq| * quantity ) AS sum FROM aqorders
+        SELECT SUM( | . C4::Acquisition::get_rounding_sql("COALESCE(unitprice_tax_included, ecost_tax_included)") . qq| * quantity ) AS sum FROM aqorders
             WHERE budget_id = ? AND
             quantityreceived > 0 AND
             datecancellationprinted IS NULL
@@ -367,7 +368,7 @@ sub GetBudgetOrdered {
        my ($budget_id) = @_;
        my $dbh = C4::Context->dbh;
        my $sth = $dbh->prepare(qq|
-        SELECT SUM(| . _get_rounding_sql(qq|ecost_tax_included|) . qq| *  quantity) AS sum FROM aqorders
+        SELECT SUM(| . C4::Acquisition::get_rounding_sql(qq|ecost_tax_included|) . qq| *  quantity) AS sum FROM aqorders
             WHERE budget_id = ? AND
             quantityreceived = 0 AND
             datecancellationprinted IS NULL
@@ -561,14 +562,14 @@ sub GetBudgetHierarchy {
     # Get all the budgets totals in as few queries as possible
     my $hr_budget_spent = $dbh->selectall_hashref(q|
         SELECT aqorders.budget_id, aqbudgets.budget_parent_id,
-               SUM( | . _get_rounding_sql(qq|COALESCE(unitprice_tax_included, ecost_tax_included)|) . q| * quantity ) AS budget_spent
+               SUM( | . C4::Acquisition::get_rounding_sql(qq|COALESCE(unitprice_tax_included, ecost_tax_included)|) . q| * quantity ) AS budget_spent
         FROM aqorders JOIN aqbudgets USING (budget_id)
         WHERE quantityreceived > 0 AND datecancellationprinted IS NULL
         GROUP BY budget_id, budget_parent_id
         |, 'budget_id');
     my $hr_budget_ordered = $dbh->selectall_hashref(q|
         SELECT aqorders.budget_id, aqbudgets.budget_parent_id,
-               SUM( | . _get_rounding_sql(qq|ecost_tax_included|) . q| *  quantity) AS budget_ordered
+               SUM( | . C4::Acquisition::get_rounding_sql(qq|ecost_tax_included|) . q| *  quantity) AS budget_ordered
         FROM aqorders JOIN aqbudgets USING (budget_id)
         WHERE quantityreceived = 0 AND datecancellationprinted IS NULL
         GROUP BY budget_id, budget_parent_id
@@ -1367,25 +1368,6 @@ sub MoveOrders {
     return \@report;
 }
 
-=head1 INTERNAL FUNCTIONS
-
-=cut
-
-=head3 _get_rounding_sql
-
-    $rounding_sql = _get_rounding_sql("mysql_variable_to_round_string");
-
-returns the correct SQL routine based on OrderPriceRounding system preference.
-
-=cut
-
-sub _get_rounding_sql {
-    my $to_round = shift;
-    my $rounding_pref = C4::Context->preference('OrderPriceRounding');
-    if   ($rounding_pref eq 'nearest_cent') { return "CAST($to_round*100 AS UNSIGNED)/100"; }
-    else { return "$to_round"; }
-}
-
 END { }    # module clean-up code here (global destructor)
 
 1;
index 1acca9c..9c5102c 100644 (file)
@@ -23,16 +23,16 @@ use t::lib::Mocks;
 
 use_ok( 'C4::Acquisition' );
 
-subtest 'Tests for _get_rounding_sql' => sub {
+subtest 'Tests for get_rounding_sql' => sub {
 
     plan tests => 2;
 
     my $value = '3.141592';
 
     t::lib::Mocks::mock_preference( 'OrderPriceRounding', q{} );
-    my $no_rounding_result = C4::Acquisition::_get_rounding_sql($value);
+    my $no_rounding_result = C4::Acquisition::get_rounding_sql($value);
     t::lib::Mocks::mock_preference( 'OrderPriceRounding', q{nearest_cent} );
-    my $rounding_result = C4::Acquisition::_get_rounding_sql($value);
+    my $rounding_result = C4::Acquisition::get_rounding_sql($value);
 
     ok( $no_rounding_result eq $value, "Value ($value) not to be rounded" );
     ok( $rounding_result =~ /CAST/,    "Value ($value) will be rounded" );