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, |