| 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 1029-1034
          sub NewOrder {
      
      
        Link Here | 
        
          | 1029 |     } | 1029 |     } | 
        
          | 1030 |  | 1030 |  | 
        
          | 1031 |     my $ordernumber=InsertInTable("aqorders",$orderinfo); | 1031 |     my $ordernumber=InsertInTable("aqorders",$orderinfo); | 
            
              |  |  | 1032 |     if (not $orderinfo->{parent_ordernumber}) { | 
            
              | 1033 |         my $sth = $dbh->prepare(" | 
            
              | 1034 |             UPDATE aqorders | 
            
              | 1035 |             SET parent_ordernumber = ordernumber | 
            
              | 1036 |             WHERE ordernumber = ? | 
            
              | 1037 |         "); | 
            
              | 1038 |         $sth->execute($ordernumber); | 
            
              | 1039 |     } | 
        
          | 1032 |     return ( $orderinfo->{'basketno'}, $ordernumber ); | 1040 |     return ( $orderinfo->{'basketno'}, $ordernumber ); | 
        
          | 1033 | } | 1041 | } | 
        
          | 1034 |  | 1042 |  | 
  
    | Lines 1246-1251
          sub ModReceiveOrder {
      
      
        Link Here | 
        
          | 1246 |         $invoiceno, $freight, $rrp, $budget_id, $datereceived, $received_items | 1254 |         $invoiceno, $freight, $rrp, $budget_id, $datereceived, $received_items | 
        
          | 1247 |     ) | 1255 |     ) | 
        
          | 1248 |     = @_; | 1256 |     = @_; | 
            
              |  |  | 1257 |  | 
        
          | 1249 |     my $dbh = C4::Context->dbh; | 1258 |     my $dbh = C4::Context->dbh; | 
        
          | 1250 |     $datereceived = C4::Dates->output('iso') unless $datereceived; | 1259 |     $datereceived = C4::Dates->output('iso') unless $datereceived; | 
        
          | 1251 |     my $suggestionid = GetSuggestionFromBiblionumber( $biblionumber ); | 1260 |     my $suggestionid = GetSuggestionFromBiblionumber( $biblionumber ); | 
  
    | Lines 1264-1303
          sub ModReceiveOrder {
      
      
        Link Here | 
        
          | 1264 |     my $order = $sth->fetchrow_hashref(); | 1273 |     my $order = $sth->fetchrow_hashref(); | 
        
          | 1265 |     $sth->finish(); | 1274 |     $sth->finish(); | 
        
          | 1266 |  | 1275 |  | 
            
              |  |  | 1276 |     my $new_ordernumber = $ordernumber; | 
        
          | 1267 |     if ( $order->{quantity} > $quantrec ) { | 1277 |     if ( $order->{quantity} > $quantrec ) { | 
            
              |  |  | 1278 |         # Split order line in two parts: the first is the original order line | 
            
              | 1279 |         # without received items (the quantity is decreased), | 
            
              | 1280 |         # the second part is a new order line with quantity=quantityrec | 
            
              | 1281 |         # (entirely received) | 
        
          | 1268 |         $sth=$dbh->prepare(" | 1282 |         $sth=$dbh->prepare(" | 
        
          | 1269 |             UPDATE aqorders | 1283 |             UPDATE aqorders | 
          
            
              | 1270 |             SET quantityreceived=? | 1284 |             SET quantity = ? | 
            
              | 1271 |                 , datereceived=? | 1285 |             WHERE ordernumber = ? | 
            
              | 1272 |                 , booksellerinvoicenumber=? | 1286 |         "); | 
            
              | 1273 |                 , unitprice=? | 1287 |  | 
            
              | 1274 |                 , freight=? | 1288 |         $sth->execute($order->{quantity} - $quantrec, $ordernumber); | 
            
              | 1275 |                 , rrp=? |  |  | 
            
              | 1276 |                 , quantity=? | 
            
              | 1277 |             WHERE biblionumber=? AND ordernumber=?"); | 
            
              | 1278 |  | 
            
              | 1279 |         $sth->execute($quantrec,$datereceived,$invoiceno,$cost,$freight,$rrp,$quantrec,$biblionumber,$ordernumber); | 
        
          | 1280 |         $sth->finish; | 1289 |         $sth->finish; | 
        
          | 1281 |  | 1290 |  | 
          
            
              | 1282 |         # create a new order for the remaining items, and set its bookfund. | 1291 |         delete $order->{'ordernumber'}; | 
            
              | 1283 |         foreach my $orderkey ( "linenumber", "allocation" ) { | 1292 |         $order->{'quantity'} = $quantrec; | 
            
              | 1284 |             delete($order->{'$orderkey'}); | 1293 |         $order->{'quantityreceived'} = $quantrec; | 
            
              | 1285 |         } | 1294 |         $order->{'datereceived'} = $datereceived; | 
            
              | 1286 |         $order->{'quantity'} -= $quantrec; | 1295 |         $order->{'booksellerinvoicenumber'} = $invoiceno; | 
            
              | 1287 |         $order->{'quantityreceived'} = 0; | 1296 |         $order->{'unitprice'} = $cost; | 
            
              | 1288 |         my $newOrder = NewOrder($order); | 1297 |         $order->{'freight'} = $freight; | 
            
              | 1289 |         # Change ordernumber in aqorders_items for items not received | 1298 |         $order->{'rrp'} = $rrp; | 
            
              | 1290 |         my @orderitems = GetItemnumbersFromOrder( $order->{'ordernumber'} ); | 1299 |         $order->{'orderstatus'} = 3;    # totally received | 
            
              | 1291 |         my $count = scalar @orderitems; | 1300 |         $new_ordernumber = NewOrder($order); | 
            
              | 1292 |  | 1301 |  | 
            
              | 1293 |         for (my $i=0; $i<$count; $i++){ | 1302 |         if ($received_items) { | 
            
              | 1294 |             foreach (@$received_items){ | 1303 |             foreach my $itemnumber (@$received_items) { | 
            
              | 1295 |                 splice (@orderitems, $i, 1) if ($orderitems[$i] == $_); | 1304 |                 ModItemOrder($itemnumber, $new_ordernumber); | 
        
          | 1296 |             } | 1305 |             } | 
        
          | 1297 |         } | 1306 |         } | 
            
              | 1298 |         foreach (@orderitems) { |  |  | 
            
              | 1299 |             ModItemOrder($_, $newOrder); | 
            
              | 1300 |         } | 
        
          | 1301 |     } else { | 1307 |     } else { | 
        
          | 1302 |         $sth=$dbh->prepare("update aqorders | 1308 |         $sth=$dbh->prepare("update aqorders | 
        
          | 1303 |                             set quantityreceived=?,datereceived=?,booksellerinvoicenumber=?, | 1309 |                             set quantityreceived=?,datereceived=?,booksellerinvoicenumber=?, | 
  
    | Lines 1306-1313
          sub ModReceiveOrder {
      
      
        Link Here | 
        
          | 1306 |         $sth->execute($quantrec,$datereceived,$invoiceno,$cost,$freight,$rrp,$biblionumber,$ordernumber); | 1312 |         $sth->execute($quantrec,$datereceived,$invoiceno,$cost,$freight,$rrp,$biblionumber,$ordernumber); | 
        
          | 1307 |         $sth->finish; | 1313 |         $sth->finish; | 
        
          | 1308 |     } | 1314 |     } | 
          
            
              | 1309 |     return $datereceived; | 1315 |     return ($datereceived, $new_ordernumber); | 
        
          | 1310 | } | 1316 | } | 
            
              |  |  | 1317 |  | 
            
              | 1318 | =head3 CancelReceipt | 
            
              | 1319 |  | 
            
              | 1320 |     my $parent_ordernumber = CancelReceipt($ordernumber); | 
            
              | 1321 |  | 
            
              | 1322 |     Cancel an order line receipt and update the parent order line, as if no | 
            
              | 1323 |     receipt was made. | 
            
              | 1324 |     If items are created at receipt (AcqCreateItem = receiving) then delete | 
            
              | 1325 |     these items. | 
            
              | 1326 |  | 
            
              | 1327 | =cut | 
            
              | 1328 |  | 
            
              | 1329 | sub CancelReceipt { | 
            
              | 1330 |     my $ordernumber = shift; | 
            
              | 1331 |  | 
            
              | 1332 |     return unless $ordernumber; | 
            
              | 1333 |  | 
            
              | 1334 |     my $dbh = C4::Context->dbh; | 
            
              | 1335 |     my $query = qq{ | 
            
              | 1336 |         SELECT datereceived, parent_ordernumber, quantity | 
            
              | 1337 |         FROM aqorders | 
            
              | 1338 |         WHERE ordernumber = ? | 
            
              | 1339 |     }; | 
            
              | 1340 |     my $sth = $dbh->prepare($query); | 
            
              | 1341 |     $sth->execute($ordernumber); | 
            
              | 1342 |     my $order = $sth->fetchrow_hashref; | 
            
              | 1343 |     unless($order) { | 
            
              | 1344 |         warn "CancelReceipt: order $ordernumber does not exist"; | 
            
              | 1345 |         return; | 
            
              | 1346 |     } | 
            
              | 1347 |     unless($order->{'datereceived'}) { | 
            
              | 1348 |         warn "CancelReceipt: order $ordernumber is not received"; | 
            
              | 1349 |         return; | 
            
              | 1350 |     } | 
            
              | 1351 |  | 
            
              | 1352 |     my $parent_ordernumber = $order->{'parent_ordernumber'}; | 
            
              | 1353 |  | 
            
              | 1354 |     if($parent_ordernumber == $ordernumber || not $parent_ordernumber) { | 
            
              | 1355 |         # The order line has no parent, just mark it as not received | 
            
              | 1356 |         $query = qq{ | 
            
              | 1357 |             UPDATE aqorders | 
            
              | 1358 |             SET quantityreceived = ?, | 
            
              | 1359 |                 datereceived = ?, | 
            
              | 1360 |                 booksellerinvoicenumber = ? | 
            
              | 1361 |             WHERE ordernumber = ? | 
            
              | 1362 |         }; | 
            
              | 1363 |         $sth = $dbh->prepare($query); | 
            
              | 1364 |         $sth->execute(0, undef, undef, $ordernumber); | 
            
              | 1365 |     } else { | 
            
              | 1366 |         # The order line has a parent, increase parent quantity and delete | 
            
              | 1367 |         # the order line. | 
            
              | 1368 |         $query = qq{ | 
            
              | 1369 |             SELECT quantity, datereceived | 
            
              | 1370 |             FROM aqorders | 
            
              | 1371 |             WHERE ordernumber = ? | 
            
              | 1372 |         }; | 
            
              | 1373 |         $sth = $dbh->prepare($query); | 
            
              | 1374 |         $sth->execute($parent_ordernumber); | 
            
              | 1375 |         my $parent_order = $sth->fetchrow_hashref; | 
            
              | 1376 |         unless($parent_order) { | 
            
              | 1377 |             warn "Parent order $parent_ordernumber does not exist."; | 
            
              | 1378 |             return; | 
            
              | 1379 |         } | 
            
              | 1380 |         if($parent_order->{'datereceived'}) { | 
            
              | 1381 |             warn "CancelReceipt: parent order is received.". | 
            
              | 1382 |                 " Can't cancel receipt."; | 
            
              | 1383 |             return; | 
            
              | 1384 |         } | 
            
              | 1385 |         $query = qq{ | 
            
              | 1386 |             UPDATE aqorders | 
            
              | 1387 |             SET quantity = ? | 
            
              | 1388 |             WHERE ordernumber = ? | 
            
              | 1389 |         }; | 
            
              | 1390 |         $sth = $dbh->prepare($query); | 
            
              | 1391 |         my $rv = $sth->execute( | 
            
              | 1392 |             $order->{'quantity'} + $parent_order->{'quantity'}, | 
            
              | 1393 |             $parent_ordernumber | 
            
              | 1394 |         ); | 
            
              | 1395 |         unless($rv) { | 
            
              | 1396 |             warn "Cannot update parent order line, so do not cancel". | 
            
              | 1397 |                 " receipt"; | 
            
              | 1398 |             return; | 
            
              | 1399 |         } | 
            
              | 1400 |         if(C4::Context->preference('AcqCreateItem') eq 'receiving') { | 
            
              | 1401 |             # Remove items that were created at receipt | 
            
              | 1402 |             $query = qq{ | 
            
              | 1403 |                 DELETE FROM items, aqorders_items | 
            
              | 1404 |                 USING items, aqorders_items | 
            
              | 1405 |                 WHERE items.itemnumber = ? AND aqorders_items.itemnumber = ? | 
            
              | 1406 |             }; | 
            
              | 1407 |             $sth = $dbh->prepare($query); | 
            
              | 1408 |             my @itemnumbers = GetItemnumbersFromOrder($ordernumber); | 
            
              | 1409 |             foreach my $itemnumber (@itemnumbers) { | 
            
              | 1410 |                 $sth->execute($itemnumber, $itemnumber); | 
            
              | 1411 |             } | 
            
              | 1412 |         } else { | 
            
              | 1413 |             # Update items | 
            
              | 1414 |             my @itemnumbers = GetItemnumbersFromOrder($ordernumber); | 
            
              | 1415 |             foreach my $itemnumber (@itemnumbers) { | 
            
              | 1416 |                 ModItemOrder($itemnumber, $parent_ordernumber); | 
            
              | 1417 |             } | 
            
              | 1418 |         } | 
            
              | 1419 |         # Delete order line | 
            
              | 1420 |         $query = qq{ | 
            
              | 1421 |             DELETE FROM aqorders | 
            
              | 1422 |             WHERE ordernumber = ? | 
            
              | 1423 |         }; | 
            
              | 1424 |         $sth = $dbh->prepare($query); | 
            
              | 1425 |         $sth->execute($ordernumber); | 
            
              | 1426 |  | 
            
              | 1427 |     } | 
            
              | 1428 |  | 
            
              | 1429 |     return $parent_ordernumber; | 
            
              | 1430 | } | 
            
              | 1431 |  | 
        
          | 1311 | #------------------------------------------------------------# | 1432 | #------------------------------------------------------------# | 
        
          | 1312 |  | 1433 |  | 
        
          | 1313 | =head3 SearchOrder | 1434 | =head3 SearchOrder | 
  
    | Lines 1451-1456
          sub GetParcel {
      
      
        Link Here | 
        
          | 1451 |                 firstname, | 1572 |                 firstname, | 
        
          | 1452 |                 aqorders.biblionumber, | 1573 |                 aqorders.biblionumber, | 
        
          | 1453 |                 aqorders.ordernumber, | 1574 |                 aqorders.ordernumber, | 
            
              |  |  | 1575 |                 aqorders.parent_ordernumber, | 
        
          | 1454 |                 aqorders.quantity, | 1576 |                 aqorders.quantity, | 
        
          | 1455 |                 aqorders.quantityreceived, | 1577 |                 aqorders.quantityreceived, | 
        
          | 1456 |                 aqorders.unitprice, | 1578 |                 aqorders.unitprice, |