Lines 24-29
use Carp;
Link Here
|
24 |
use C4::Context; |
24 |
use C4::Context; |
25 |
use C4::Debug; |
25 |
use C4::Debug; |
26 |
use C4::Dates qw(format_date format_date_in_iso); |
26 |
use C4::Dates qw(format_date format_date_in_iso); |
|
|
27 |
use MARC::Field; |
27 |
use MARC::Record; |
28 |
use MARC::Record; |
28 |
use C4::Suggestions; |
29 |
use C4::Suggestions; |
29 |
use C4::Biblio; |
30 |
use C4::Biblio; |
Lines 1130-1135
sub NewOrder {
Link Here
|
1130 |
|
1131 |
|
1131 |
my $ordernumber=InsertInTable("aqorders",$orderinfo); |
1132 |
my $ordernumber=InsertInTable("aqorders",$orderinfo); |
1132 |
if (not $orderinfo->{parent_ordernumber}) { |
1133 |
if (not $orderinfo->{parent_ordernumber}) { |
|
|
1134 |
$orderinfo->{parent_ordernumber} = $ordernumber; |
1133 |
my $sth = $dbh->prepare(" |
1135 |
my $sth = $dbh->prepare(" |
1134 |
UPDATE aqorders |
1136 |
UPDATE aqorders |
1135 |
SET parent_ordernumber = ordernumber |
1137 |
SET parent_ordernumber = ordernumber |
Lines 1137-1143
sub NewOrder {
Link Here
|
1137 |
"); |
1139 |
"); |
1138 |
$sth->execute($ordernumber); |
1140 |
$sth->execute($ordernumber); |
1139 |
} |
1141 |
} |
1140 |
return ( $orderinfo->{'basketno'}, $ordernumber ); |
1142 |
|
|
|
1143 |
$orderinfo->{ordernumber} = $ordernumber; |
1144 |
return $orderinfo; |
1141 |
} |
1145 |
} |
1142 |
|
1146 |
|
1143 |
|
1147 |
|
Lines 1388-1405
sub ModReceiveOrder {
Link Here
|
1388 |
|
1392 |
|
1389 |
$sth->execute($order->{quantity} - $quantrec, $ordernumber); |
1393 |
$sth->execute($order->{quantity} - $quantrec, $ordernumber); |
1390 |
|
1394 |
|
1391 |
$sth->finish; |
1395 |
$order->{quantity} -= $quantrec; |
|
|
1396 |
|
1397 |
UpdateMarcOrder( { |
1398 |
biblionumber => $biblionumber, |
1399 |
order => $order, |
1400 |
} ); |
1392 |
|
1401 |
|
1393 |
delete $order->{'ordernumber'}; |
1402 |
delete $order->{'ordernumber'}; |
1394 |
$order->{'quantity'} = $quantrec; |
1403 |
$order->{'quantity'} = $quantrec; |
|
|
1404 |
$order->{'orderstatus'} = 3; # totally received |
1395 |
$order->{'quantityreceived'} = $quantrec; |
1405 |
$order->{'quantityreceived'} = $quantrec; |
1396 |
$order->{'datereceived'} = $datereceived; |
1406 |
$order->{'datereceived'} = $datereceived; |
1397 |
$order->{'invoiceid'} = $invoiceid; |
1407 |
$order->{'invoiceid'} = $invoiceid; |
1398 |
$order->{'unitprice'} = $cost; |
1408 |
$order->{'unitprice'} = $cost; |
1399 |
$order->{'rrp'} = $rrp; |
1409 |
$order->{'rrp'} = $rrp; |
1400 |
$order->{ecost} = $ecost; |
1410 |
$order->{ecost} = $ecost; |
1401 |
$order->{'orderstatus'} = 3; # totally received |
1411 |
|
1402 |
$new_ordernumber = NewOrder($order); |
1412 |
my $neworder = NewOrder( $order ); |
|
|
1413 |
my $newordernumber = $neworder->{ordernumber}; |
1414 |
|
1415 |
UpdateMarcOrder( { |
1416 |
biblionumber => $biblionumber, |
1417 |
order => $order, |
1418 |
} ); |
1403 |
|
1419 |
|
1404 |
if ($received_items) { |
1420 |
if ($received_items) { |
1405 |
foreach my $itemnumber (@$received_items) { |
1421 |
foreach my $itemnumber (@$received_items) { |
Lines 1407-1474
sub ModReceiveOrder {
Link Here
|
1407 |
} |
1423 |
} |
1408 |
} |
1424 |
} |
1409 |
|
1425 |
|
1410 |
# create a new order for the remaining items, and set its bookfund. |
|
|
1411 |
foreach my $orderkey ( "linenumber", "allocation" ) { |
1412 |
delete($order->{'$orderkey'}); |
1413 |
} |
1414 |
$order->{'quantity'} -= $quantrec; |
1415 |
$order->{'quantityreceived'} = 0; |
1416 |
|
1417 |
my ($newOrder, $newordernumber) = NewOrder($order); |
1418 |
# Change ordernumber in aqorders_items for items not received |
1419 |
my @orderitems = GetItemnumbersFromOrder( $order->{'ordernumber'} ); |
1420 |
my $count = scalar @orderitems; |
1421 |
|
1422 |
for (my $i=0; $i<$count; $i++){ |
1423 |
foreach (@$received_items){ |
1424 |
splice (@orderitems, $i, 1) if ($orderitems[$i] == $_); |
1425 |
} |
1426 |
} |
1427 |
foreach (@orderitems) { |
1428 |
ModItemOrder($_, $newOrder); |
1429 |
} |
1430 |
|
1431 |
# Do we have to update order informations from the marc record? |
1432 |
my ($ordertag, $ordersubtag) = GetMarcFromKohaField('aqorders.ordernumber', 'ACQ'); |
1433 |
|
1434 |
# Updating MARC order field if exists |
1435 |
if ($ordertag and $ordersubtag) { |
1436 |
$debug and warn "updating MARC"; |
1437 |
# Getting record |
1438 |
my $record = GetMarcBiblio($biblionumber); |
1439 |
if ($record) { |
1440 |
$debug and warn "updating Record"; |
1441 |
foreach ($record->field($ordertag)) { |
1442 |
if ($_->subfield($ordersubtag) eq $ordernumber) { |
1443 |
# Updating ordernumber |
1444 |
$debug and warn "updating ordernumber $ordernumber => $newordernumber"; |
1445 |
$_->update($ordersubtag => $newordernumber); |
1446 |
|
1447 |
# Updating quantity |
1448 |
my ($quantitytag, $quantitysubtag) = GetMarcFromKohaField('aqorders.quantity', 'ACQ'); |
1449 |
if ($quantitysubtag) { |
1450 |
$debug and warn "updating quantity " . $order->{quantity}; |
1451 |
$_->update($quantitysubtag => $order->{quantity}); |
1452 |
} |
1453 |
} |
1454 |
} |
1455 |
|
1456 |
# Applying changes |
1457 |
ModBiblio($record, $biblionumber, 'ACQ'); |
1458 |
} |
1459 |
} |
1460 |
|
1461 |
|
1462 |
} else { |
1426 |
} else { |
1463 |
$sth=$dbh->prepare("update aqorders |
1427 |
$sth=$dbh->prepare("update aqorders |
1464 |
set quantityreceived=?,datereceived=?,invoiceid=?, |
1428 |
set quantityreceived=?,datereceived=?,invoiceid=?, |
1465 |
unitprice=?,rrp=?,ecost=? |
1429 |
unitprice=?,rrp=?,ecost=? |
1466 |
where biblionumber=? and ordernumber=?"); |
1430 |
where biblionumber=? and ordernumber=?"); |
1467 |
$sth->execute($quantrec,$datereceived,$invoiceid,$cost,$rrp,$ecost,$biblionumber,$ordernumber); |
1431 |
$sth->execute($quantrec,$datereceived,$invoiceid,$cost,$rrp,$ecost,$biblionumber,$ordernumber); |
1468 |
$sth->finish; |
|
|
1469 |
|
1432 |
|
1470 |
# Removing MARC order field if exists |
1433 |
# Removing MARC order field if exists |
1471 |
DelMarcOrder($biblionumber, $ordernumber); |
1434 |
DelMarcOrder({ |
|
|
1435 |
biblionumber => $biblionumber, |
1436 |
ordernumber => $ordernumber |
1437 |
} ); |
1472 |
} |
1438 |
} |
1473 |
return ($datereceived, $new_ordernumber); |
1439 |
return ($datereceived, $new_ordernumber); |
1474 |
} |
1440 |
} |
Lines 1520-1525
sub CancelReceipt {
Link Here
|
1520 |
}; |
1486 |
}; |
1521 |
$sth = $dbh->prepare($query); |
1487 |
$sth = $dbh->prepare($query); |
1522 |
$sth->execute(0, undef, undef, $ordernumber); |
1488 |
$sth->execute(0, undef, undef, $ordernumber); |
|
|
1489 |
|
1490 |
UpdateMarcOrder( { ordernumber => $ordernumber } ); |
1523 |
} else { |
1491 |
} else { |
1524 |
# The order line has a parent, increase parent quantity and delete |
1492 |
# The order line has a parent, increase parent quantity and delete |
1525 |
# the order line. |
1493 |
# the order line. |
Lines 1582-1587
sub CancelReceipt {
Link Here
|
1582 |
$sth = $dbh->prepare($query); |
1550 |
$sth = $dbh->prepare($query); |
1583 |
$sth->execute($ordernumber); |
1551 |
$sth->execute($ordernumber); |
1584 |
|
1552 |
|
|
|
1553 |
DelMarcOrder( { ordernumber => $ordernumber } ); |
1554 |
UpdateMarcOrder( { ordernumber => $parent_ordernumber } ); |
1585 |
} |
1555 |
} |
1586 |
|
1556 |
|
1587 |
return $parent_ordernumber; |
1557 |
return $parent_ordernumber; |
Lines 1690-1696
sub DelOrder {
Link Here
|
1690 |
$sth->finish; |
1660 |
$sth->finish; |
1691 |
|
1661 |
|
1692 |
# Removing MARC order field if exists |
1662 |
# Removing MARC order field if exists |
1693 |
DelMarcOrder($bibnum, $ordernumber); |
1663 |
DelMarcOrder( { |
|
|
1664 |
biblionumber => $bibnum, |
1665 |
ordernumber => $ordernumber, |
1666 |
} ); |
1694 |
|
1667 |
|
1695 |
my @itemnumbers = GetItemnumbersFromOrder( $ordernumber ); |
1668 |
my @itemnumbers = GetItemnumbersFromOrder( $ordernumber ); |
1696 |
foreach my $itemnumber (@itemnumbers){ |
1669 |
foreach my $itemnumber (@itemnumbers){ |
Lines 1711-1717
in parameter
Link Here
|
1711 |
=cut |
1684 |
=cut |
1712 |
|
1685 |
|
1713 |
sub DelMarcOrder { |
1686 |
sub DelMarcOrder { |
1714 |
my ($biblionumber, $ordernumber) = @_; |
1687 |
my ( $params ) = @_; |
|
|
1688 |
my $biblionumber = $params->{biblionumber}; |
1689 |
my $ordernumber = $params->{ordernumber}; |
1690 |
|
1691 |
unless ( $biblionumber ) { |
1692 |
$biblionumber = GetBiblionumberFromOrdernumber( $ordernumber ); |
1693 |
} |
1715 |
|
1694 |
|
1716 |
# Do we have to remove order informations from the marc record? |
1695 |
# Do we have to remove order informations from the marc record? |
1717 |
my ($ordertag, $ordersubtag) = GetMarcFromKohaField('aqorders.ordernumber', 'ACQ'); |
1696 |
my ($ordertag, $ordersubtag) = GetMarcFromKohaField('aqorders.ordernumber', 'ACQ'); |
Lines 1722-1730
sub DelMarcOrder {
Link Here
|
1722 |
my $record = GetMarcBiblio($biblionumber); |
1701 |
my $record = GetMarcBiblio($biblionumber); |
1723 |
if ($record) { |
1702 |
if ($record) { |
1724 |
# Looking for the right field |
1703 |
# Looking for the right field |
1725 |
foreach ($record->field($ordertag)) { |
1704 |
foreach my $field ( $record->field($ordertag) ) { |
1726 |
if ($_->subfield($ordersubtag) eq $ordernumber) { |
1705 |
if ($field->subfield($ordersubtag) eq $ordernumber) { |
1727 |
$record->delete_field($_); |
1706 |
$record->delete_field($field); |
1728 |
} |
1707 |
} |
1729 |
} |
1708 |
} |
1730 |
# Applying changes |
1709 |
# Applying changes |
Lines 1733-1738
sub DelMarcOrder {
Link Here
|
1733 |
} |
1712 |
} |
1734 |
} |
1713 |
} |
1735 |
|
1714 |
|
|
|
1715 |
sub GetBiblionumberFromOrdernumber { |
1716 |
my $ordernumber = shift; |
1717 |
my $dbh = C4::Context->dbh; |
1718 |
my $biblionumber = $dbh->selectrow_array(q| |
1719 |
SELECT biblionumber |
1720 |
FROM aqorders |
1721 |
WHERE ordernumber = ? |
1722 |
|, {}, $ordernumber ); |
1723 |
|
1724 |
return $biblionumber; |
1725 |
} |
1726 |
|
1727 |
sub UpdateMarcOrder { |
1728 |
my ( $params ) = @_; |
1729 |
my $biblionumber = $params->{biblionumber}; |
1730 |
my $order = $params->{order}; |
1731 |
my $ordernumber = $params->{ordernumber}; |
1732 |
my $old_ordernumber = $params->{old_ordernumber}; |
1733 |
|
1734 |
if ( $ordernumber and not $order ) { |
1735 |
$order = GetOrder( $ordernumber ); |
1736 |
} |
1737 |
unless ( $order ) { |
1738 |
carp "A parameter is missing, ordernumber or order is required"; |
1739 |
return; |
1740 |
} |
1741 |
unless ( $biblionumber ) { |
1742 |
$biblionumber = GetBiblionumberFromOrdernumber( $ordernumber ); |
1743 |
} |
1744 |
$old_ordernumber ||= $order->{ordernumber}; |
1745 |
|
1746 |
# Do we have to update order informations from the marc record? |
1747 |
my ($ordertag, $ordersubtag) = GetMarcFromKohaField('aqorders.ordernumber', 'ACQ'); |
1748 |
|
1749 |
return 0 unless $ordertag or $ordersubtag; |
1750 |
|
1751 |
# Updating MARC order field if exists |
1752 |
my $record = GetMarcBiblio($biblionumber); |
1753 |
return unless $record; |
1754 |
my $matching_field; |
1755 |
foreach my $field ($record->field($ordertag)) { |
1756 |
if ( $field->subfield($ordersubtag) eq $old_ordernumber ) { |
1757 |
$matching_field = $field; |
1758 |
last; |
1759 |
} |
1760 |
} |
1761 |
|
1762 |
unless ( $matching_field ) { |
1763 |
$matching_field = MARC::Field->new( $ordertag, '', '', $ordersubtag => $order->{ordernumber} ); |
1764 |
$record->insert_fields_ordered( $matching_field ); |
1765 |
} |
1766 |
# Updating ordernumber |
1767 |
$matching_field->update($ordersubtag => $order->{ordernumber}); |
1768 |
|
1769 |
# Updating quantity |
1770 |
my ($quantitytag, $quantitysubtag) = GetMarcFromKohaField('aqorders.quantity', 'ACQ'); |
1771 |
if ($quantitysubtag) { |
1772 |
$matching_field->update($quantitysubtag => $order->{quantity}); |
1773 |
} |
1774 |
|
1775 |
# Applying changes |
1776 |
ModBiblio($record, $biblionumber, 'ACQ'); |
1777 |
} |
1778 |
|
1736 |
=head2 FUNCTIONS ABOUT PARCELS |
1779 |
=head2 FUNCTIONS ABOUT PARCELS |
1737 |
|
1780 |
|
1738 |
=cut |
1781 |
=cut |