Bug 18736: Use rounding syspref to determine correct prices in calculations
[koha.git] / acqui / finishreceive.pl
index 7bec865..90faed3 100755 (executable)
@@ -20,8 +20,7 @@
 # You should have received a copy of the GNU General Public License
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
-use strict;
-use warnings;
+use Modern::Perl;
 use CGI qw ( -utf8 );
 use C4::Auth;
 use C4::Output;
@@ -49,6 +48,7 @@ my $origquantityrec  = $input->param('origquantityrec');
 my $quantityrec      = $input->param('quantityrec');
 my $quantity         = $input->param('quantity');
 my $unitprice        = $input->param('unitprice');
+my $replacementprice = $input->param('replacementprice');
 my $datereceived     = $input->param('datereceived'),
 my $invoiceid        = $input->param('invoiceid');
 my $invoice          = GetInvoice($invoiceid);
@@ -59,8 +59,20 @@ my $bookfund         = $input->param("bookfund");
 my $order            = GetOrder($ordernumber);
 my $new_ordernumber  = $ordernumber;
 
+#bug18723 regression fix
+if (C4::Context->preference("CurrencyFormat") eq 'FR') {
+    if (rindex($unitprice, '.') ge 0) {
+        substr($unitprice, rindex($unitprice, '.'), 1, ',');
+    }
+    if (rindex($replacementprice,'.') ge 0) {
+        substr($replacementprice, rindex($replacementprice, '.'), 1, ',');
+    }
+}
+
 $unitprice = Koha::Number::Price->new( $unitprice )->unformat();
-my $basket = Koha::Acquisition::Orders->find( $ordernumber )->basket;
+$replacementprice = Koha::Number::Price->new( $replacementprice )->unformat();
+my $order_obj = Koha::Acquisition::Orders->find( $ordernumber );
+my $basket = $order_obj->basket;
 
 #need old receivedate if we update the order, parcel.pl only shows the right parcel this way FIXME
 if ($quantityrec > $origquantityrec ) {
@@ -86,6 +98,7 @@ if ($quantityrec > $origquantityrec ) {
 
     $order->{order_internalnote} = $input->param("order_internalnote");
     $order->{tax_rate_on_receiving} = $input->param("tax_rate");
+    $order->{replacementprice} = $replacementprice;
     $order->{unitprice} = $unitprice;
 
     $order = C4::Acquisition::populate_order_with_prices(
@@ -98,6 +111,10 @@ if ($quantityrec > $origquantityrec ) {
 
     # save the quantity received.
     if ( $quantityrec > 0 ) {
+        if ( $order_obj->subscriptionid ) {
+            # Quantity can only be modified if linked to a subscription
+            $order->{quantity} = $quantity; # quantityrec will be deduced from this value in ModReceiveOrder
+        }
         ( $datereceived, $new_ordernumber ) = ModReceiveOrder(
             {
                 biblionumber     => $biblionumber,
@@ -151,17 +168,21 @@ if ($quantityrec > $origquantityrec ) {
     }
 }
 
-ModItem(
-    {
-        booksellerid         => $booksellerid,
-        dateaccessioned      => $datereceived,
-        datelastseen         => $datereceived,
-        price                => $unitprice,
-        replacementprice     => $order->{rrp},
-        replacementpricedate => $datereceived,
-    },
-    $biblionumber,
-    $_
-) foreach GetItemnumbersFromOrder($new_ordernumber);
+my $new_order_object = Koha::Acquisition::Orders->find( $new_ordernumber ); # FIXME we should not need to refetch it
+my $items = $new_order_object->items;
+while ( my $item = $items->next )  {
+    ModItem(
+        {
+            booksellerid         => $booksellerid,
+            dateaccessioned      => $datereceived,
+            datelastseen         => $datereceived,
+            price                => $unitprice,
+            replacementprice     => $replacementprice,
+            replacementpricedate => $datereceived,
+        },
+        $biblionumber,
+        $item->itemnumber,
+    );
+}
 
 print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid&sticky_filters=1");