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