| Lines 56-62
          BEGIN {
      
      
        Link Here | 
        
          | 56 |         &NewOrder &DelOrder &ModOrder &GetPendingOrders &GetOrder &GetOrders | 56 |         &NewOrder &DelOrder &ModOrder &GetPendingOrders &GetOrder &GetOrders | 
        
          | 57 |         &GetOrderNumber &GetLateOrders &GetOrderFromItemnumber | 57 |         &GetOrderNumber &GetLateOrders &GetOrderFromItemnumber | 
        
          | 58 |         &SearchOrder &GetHistory &GetRecentAcqui | 58 |         &SearchOrder &GetHistory &GetRecentAcqui | 
          
            
              | 59 |         &ModReceiveOrder &ModOrderBiblioitemNumber | 59 |         &ModReceiveOrder &CancelReceipt &ModOrderBiblioitemNumber | 
        
          | 60 |         &GetCancelledOrders | 60 |         &GetCancelledOrders | 
        
          | 61 |  | 61 |  | 
        
          | 62 |         &NewOrderItem &ModOrderItem &ModItemOrder | 62 |         &NewOrderItem &ModOrderItem &ModItemOrder | 
  
    | Lines 1042-1047
          sub NewOrder {
      
      
        Link Here | 
        
          | 1042 |     } | 1042 |     } | 
        
          | 1043 |  | 1043 |  | 
        
          | 1044 |     my $ordernumber=InsertInTable("aqorders",$orderinfo); | 1044 |     my $ordernumber=InsertInTable("aqorders",$orderinfo); | 
            
              |  |  | 1045 |     if (not $orderinfo->{parent_ordernumber}) { | 
            
              | 1046 |         my $sth = $dbh->prepare(" | 
            
              | 1047 |             UPDATE aqorders | 
            
              | 1048 |             SET parent_ordernumber = ordernumber | 
            
              | 1049 |             WHERE ordernumber = ? | 
            
              | 1050 |         "); | 
            
              | 1051 |         $sth->execute($ordernumber); | 
            
              | 1052 |     } | 
        
          | 1045 |     return ( $orderinfo->{'basketno'}, $ordernumber ); | 1053 |     return ( $orderinfo->{'basketno'}, $ordernumber ); | 
        
          | 1046 | } | 1054 | } | 
        
          | 1047 |  | 1055 |  | 
  
    | Lines 1259-1264
          sub ModReceiveOrder {
      
      
        Link Here | 
        
          | 1259 |         $invoiceno, $freight, $rrp, $budget_id, $datereceived, $received_items | 1267 |         $invoiceno, $freight, $rrp, $budget_id, $datereceived, $received_items | 
        
          | 1260 |     ) | 1268 |     ) | 
        
          | 1261 |     = @_; | 1269 |     = @_; | 
            
              |  |  | 1270 |  | 
        
          | 1262 |     my $dbh = C4::Context->dbh; | 1271 |     my $dbh = C4::Context->dbh; | 
        
          | 1263 |     $datereceived = C4::Dates->output('iso') unless $datereceived; | 1272 |     $datereceived = C4::Dates->output('iso') unless $datereceived; | 
        
          | 1264 |     my $suggestionid = GetSuggestionFromBiblionumber( $biblionumber ); | 1273 |     my $suggestionid = GetSuggestionFromBiblionumber( $biblionumber ); | 
  
    | Lines 1277-1316
          sub ModReceiveOrder {
      
      
        Link Here | 
        
          | 1277 |     my $order = $sth->fetchrow_hashref(); | 1286 |     my $order = $sth->fetchrow_hashref(); | 
        
          | 1278 |     $sth->finish(); | 1287 |     $sth->finish(); | 
        
          | 1279 |  | 1288 |  | 
            
              |  |  | 1289 |     my $new_ordernumber = $ordernumber; | 
        
          | 1280 |     if ( $order->{quantity} > $quantrec ) { | 1290 |     if ( $order->{quantity} > $quantrec ) { | 
            
              |  |  | 1291 |         # Split order line in two parts: the first is the original order line | 
            
              | 1292 |         # without received items (the quantity is decreased), | 
            
              | 1293 |         # the second part is a new order line with quantity=quantityrec | 
            
              | 1294 |         # (entirely received) | 
        
          | 1281 |         $sth=$dbh->prepare(" | 1295 |         $sth=$dbh->prepare(" | 
        
          | 1282 |             UPDATE aqorders | 1296 |             UPDATE aqorders | 
          
            
              | 1283 |             SET quantityreceived=? | 1297 |             SET quantity = ? | 
            
              | 1284 |                 , datereceived=? | 1298 |             WHERE ordernumber = ? | 
            
              | 1285 |                 , booksellerinvoicenumber=? | 1299 |         "); | 
            
              | 1286 |                 , unitprice=? | 1300 |  | 
            
              | 1287 |                 , freight=? | 1301 |         $sth->execute($order->{quantity} - $quantrec, $ordernumber); | 
            
              | 1288 |                 , rrp=? |  |  | 
            
              | 1289 |                 , quantity=? | 
            
              | 1290 |             WHERE biblionumber=? AND ordernumber=?"); | 
            
              | 1291 |  | 
            
              | 1292 |         $sth->execute($quantrec,$datereceived,$invoiceno,$cost,$freight,$rrp,$quantrec,$biblionumber,$ordernumber); | 
        
          | 1293 |         $sth->finish; | 1302 |         $sth->finish; | 
        
          | 1294 |  | 1303 |  | 
          
            
              | 1295 |         # create a new order for the remaining items, and set its bookfund. | 1304 |         delete $order->{'ordernumber'}; | 
            
              | 1296 |         foreach my $orderkey ( "linenumber", "allocation" ) { | 1305 |         $order->{'quantity'} = $quantrec; | 
            
              | 1297 |             delete($order->{'$orderkey'}); | 1306 |         $order->{'quantityreceived'} = $quantrec; | 
            
              | 1298 |         } | 1307 |         $order->{'datereceived'} = $datereceived; | 
            
              | 1299 |         $order->{'quantity'} -= $quantrec; | 1308 |         $order->{'booksellerinvoicenumber'} = $invoiceno; | 
            
              | 1300 |         $order->{'quantityreceived'} = 0; | 1309 |         $order->{'unitprice'} = $cost; | 
            
              | 1301 |         my $newOrder = NewOrder($order); | 1310 |         $order->{'freight'} = $freight; | 
            
              | 1302 |         # Change ordernumber in aqorders_items for items not received | 1311 |         $order->{'rrp'} = $rrp; | 
            
              | 1303 |         my @orderitems = GetItemnumbersFromOrder( $order->{'ordernumber'} ); | 1312 |         $order->{'orderstatus'} = 3;    # totally received | 
            
              | 1304 |         my $count = scalar @orderitems; | 1313 |         $new_ordernumber = NewOrder($order); | 
            
              | 1305 |  | 1314 |  | 
            
              | 1306 |         for (my $i=0; $i<$count; $i++){ | 1315 |         if ($received_items) { | 
            
              | 1307 |             foreach (@$received_items){ | 1316 |             foreach my $itemnumber (@$received_items) { | 
            
              | 1308 |                 splice (@orderitems, $i, 1) if ($orderitems[$i] == $_); | 1317 |                 ModItemOrder($itemnumber, $new_ordernumber); | 
        
          | 1309 |             } | 1318 |             } | 
        
          | 1310 |         } | 1319 |         } | 
            
              | 1311 |         foreach (@orderitems) { |  |  | 
            
              | 1312 |             ModItemOrder($_, $newOrder); | 
            
              | 1313 |         } | 
        
          | 1314 |     } else { | 1320 |     } else { | 
        
          | 1315 |         $sth=$dbh->prepare("update aqorders | 1321 |         $sth=$dbh->prepare("update aqorders | 
        
          | 1316 |                             set quantityreceived=?,datereceived=?,booksellerinvoicenumber=?, | 1322 |                             set quantityreceived=?,datereceived=?,booksellerinvoicenumber=?, | 
  
    | Lines 1319-1326
          sub ModReceiveOrder {
      
      
        Link Here | 
        
          | 1319 |         $sth->execute($quantrec,$datereceived,$invoiceno,$cost,$freight,$rrp,$biblionumber,$ordernumber); | 1325 |         $sth->execute($quantrec,$datereceived,$invoiceno,$cost,$freight,$rrp,$biblionumber,$ordernumber); | 
        
          | 1320 |         $sth->finish; | 1326 |         $sth->finish; | 
        
          | 1321 |     } | 1327 |     } | 
          
            
              | 1322 |     return $datereceived; | 1328 |     return ($datereceived, $new_ordernumber); | 
        
          | 1323 | } | 1329 | } | 
            
              |  |  | 1330 |  | 
            
              | 1331 | =head3 CancelReceipt | 
            
              | 1332 |  | 
            
              | 1333 |     my $parent_ordernumber = CancelReceipt($ordernumber); | 
            
              | 1334 |  | 
            
              | 1335 |     Cancel an order line receipt and update the parent order line, as if no | 
            
              | 1336 |     receipt was made. | 
            
              | 1337 |     If items are created at receipt (AcqCreateItem = receiving) then delete | 
            
              | 1338 |     these items. | 
            
              | 1339 |  | 
            
              | 1340 | =cut | 
            
              | 1341 |  | 
            
              | 1342 | sub CancelReceipt { | 
            
              | 1343 |     my $ordernumber = shift; | 
            
              | 1344 |  | 
            
              | 1345 |     return unless $ordernumber; | 
            
              | 1346 |  | 
            
              | 1347 |     my $dbh = C4::Context->dbh; | 
            
              | 1348 |     my $query = qq{ | 
            
              | 1349 |         SELECT datereceived, parent_ordernumber, quantity | 
            
              | 1350 |         FROM aqorders | 
            
              | 1351 |         WHERE ordernumber = ? | 
            
              | 1352 |     }; | 
            
              | 1353 |     my $sth = $dbh->prepare($query); | 
            
              | 1354 |     $sth->execute($ordernumber); | 
            
              | 1355 |     my $order = $sth->fetchrow_hashref; | 
            
              | 1356 |     unless($order) { | 
            
              | 1357 |         warn "CancelReceipt: order $ordernumber does not exist"; | 
            
              | 1358 |         return; | 
            
              | 1359 |     } | 
            
              | 1360 |     unless($order->{'datereceived'}) { | 
            
              | 1361 |         warn "CancelReceipt: order $ordernumber is not received"; | 
            
              | 1362 |         return; | 
            
              | 1363 |     } | 
            
              | 1364 |  | 
            
              | 1365 |     my $parent_ordernumber = $order->{'parent_ordernumber'}; | 
            
              | 1366 |  | 
            
              | 1367 |     if($parent_ordernumber == $ordernumber || not $parent_ordernumber) { | 
            
              | 1368 |         # The order line has no parent, just mark it as not received | 
            
              | 1369 |         $query = qq{ | 
            
              | 1370 |             UPDATE aqorders | 
            
              | 1371 |             SET quantityreceived = ?, | 
            
              | 1372 |                 datereceived = ?, | 
            
              | 1373 |                 booksellerinvoicenumber = ? | 
            
              | 1374 |             WHERE ordernumber = ? | 
            
              | 1375 |         }; | 
            
              | 1376 |         $sth = $dbh->prepare($query); | 
            
              | 1377 |         $sth->execute(0, undef, undef, $ordernumber); | 
            
              | 1378 |     } else { | 
            
              | 1379 |         # The order line has a parent, increase parent quantity and delete | 
            
              | 1380 |         # the order line. | 
            
              | 1381 |         $query = qq{ | 
            
              | 1382 |             SELECT quantity, datereceived | 
            
              | 1383 |             FROM aqorders | 
            
              | 1384 |             WHERE ordernumber = ? | 
            
              | 1385 |         }; | 
            
              | 1386 |         $sth = $dbh->prepare($query); | 
            
              | 1387 |         $sth->execute($parent_ordernumber); | 
            
              | 1388 |         my $parent_order = $sth->fetchrow_hashref; | 
            
              | 1389 |         unless($parent_order) { | 
            
              | 1390 |             warn "Parent order $parent_ordernumber does not exist."; | 
            
              | 1391 |             return; | 
            
              | 1392 |         } | 
            
              | 1393 |         if($parent_order->{'datereceived'}) { | 
            
              | 1394 |             warn "CancelReceipt: parent order is received.". | 
            
              | 1395 |                 " Can't cancel receipt."; | 
            
              | 1396 |             return; | 
            
              | 1397 |         } | 
            
              | 1398 |         $query = qq{ | 
            
              | 1399 |             UPDATE aqorders | 
            
              | 1400 |             SET quantity = ? | 
            
              | 1401 |             WHERE ordernumber = ? | 
            
              | 1402 |         }; | 
            
              | 1403 |         $sth = $dbh->prepare($query); | 
            
              | 1404 |         my $rv = $sth->execute( | 
            
              | 1405 |             $order->{'quantity'} + $parent_order->{'quantity'}, | 
            
              | 1406 |             $parent_ordernumber | 
            
              | 1407 |         ); | 
            
              | 1408 |         unless($rv) { | 
            
              | 1409 |             warn "Cannot update parent order line, so do not cancel". | 
            
              | 1410 |                 " receipt"; | 
            
              | 1411 |             return; | 
            
              | 1412 |         } | 
            
              | 1413 |         if(C4::Context->preference('AcqCreateItem') eq 'receiving') { | 
            
              | 1414 |             # Remove items that were created at receipt | 
            
              | 1415 |             $query = qq{ | 
            
              | 1416 |                 DELETE FROM items, aqorders_items | 
            
              | 1417 |                 USING items, aqorders_items | 
            
              | 1418 |                 WHERE items.itemnumber = ? AND aqorders_items.itemnumber = ? | 
            
              | 1419 |             }; | 
            
              | 1420 |             $sth = $dbh->prepare($query); | 
            
              | 1421 |             my @itemnumbers = GetItemnumbersFromOrder($ordernumber); | 
            
              | 1422 |             foreach my $itemnumber (@itemnumbers) { | 
            
              | 1423 |                 $sth->execute($itemnumber, $itemnumber); | 
            
              | 1424 |             } | 
            
              | 1425 |         } else { | 
            
              | 1426 |             # Update items | 
            
              | 1427 |             my @itemnumbers = GetItemnumbersFromOrder($ordernumber); | 
            
              | 1428 |             foreach my $itemnumber (@itemnumbers) { | 
            
              | 1429 |                 ModItemOrder($itemnumber, $parent_ordernumber); | 
            
              | 1430 |             } | 
            
              | 1431 |         } | 
            
              | 1432 |         # Delete order line | 
            
              | 1433 |         $query = qq{ | 
            
              | 1434 |             DELETE FROM aqorders | 
            
              | 1435 |             WHERE ordernumber = ? | 
            
              | 1436 |         }; | 
            
              | 1437 |         $sth = $dbh->prepare($query); | 
            
              | 1438 |         $sth->execute($ordernumber); | 
            
              | 1439 |  | 
            
              | 1440 |     } | 
            
              | 1441 |  | 
            
              | 1442 |     return $parent_ordernumber; | 
            
              | 1443 | } | 
            
              | 1444 |  | 
        
          | 1324 | #------------------------------------------------------------# | 1445 | #------------------------------------------------------------# | 
        
          | 1325 |  | 1446 |  | 
        
          | 1326 | =head3 SearchOrder | 1447 | =head3 SearchOrder | 
  
    | Lines 1464-1469
          sub GetParcel {
      
      
        Link Here | 
        
          | 1464 |                 firstname, | 1585 |                 firstname, | 
        
          | 1465 |                 aqorders.biblionumber, | 1586 |                 aqorders.biblionumber, | 
        
          | 1466 |                 aqorders.ordernumber, | 1587 |                 aqorders.ordernumber, | 
            
              |  |  | 1588 |                 aqorders.parent_ordernumber, | 
        
          | 1467 |                 aqorders.quantity, | 1589 |                 aqorders.quantity, | 
        
          | 1468 |                 aqorders.quantityreceived, | 1590 |                 aqorders.quantityreceived, | 
        
          | 1469 |                 aqorders.unitprice, | 1591 |                 aqorders.unitprice, |