Lines 27-33
use Business::ISBN;
Link Here
|
27 |
use DateTime; |
27 |
use DateTime; |
28 |
use C4::Context; |
28 |
use C4::Context; |
29 |
use Koha::Database; |
29 |
use Koha::Database; |
30 |
use C4::Acquisition qw( NewBasket CloseBasket ModOrder); |
30 |
use C4::Acquisition qw( NewBasket CloseBasket ModOrder ModReceiveOrder); |
31 |
use C4::Suggestions qw( ModSuggestion ); |
31 |
use C4::Suggestions qw( ModSuggestion ); |
32 |
use C4::Items qw(AddItem); |
32 |
use C4::Items qw(AddItem); |
33 |
use C4::Biblio qw( AddBiblio TransformKohaToMarc GetMarcBiblio ); |
33 |
use C4::Biblio qw( AddBiblio TransformKohaToMarc GetMarcBiblio ); |
Lines 270-325
sub process_invoice {
Link Here
|
270 |
|
270 |
|
271 |
# ModReceiveOrder does not validate that $ordernumber exists validate here |
271 |
# ModReceiveOrder does not validate that $ordernumber exists validate here |
272 |
if ($order) { |
272 |
if ($order) { |
|
|
273 |
my $received_items = |
274 |
receipt_items( $schema, $line, $ordernumber ); |
273 |
|
275 |
|
274 |
# check suggestions |
276 |
my $price = _get_invoiced_price($line); |
275 |
my $s = $schema->resultset('Suggestion')->search( |
277 |
ModReceiveOrder( |
276 |
{ |
278 |
{ |
277 |
biblionumber => $order->biblionumber->biblionumber, |
279 |
biblionumber => $order->biblionumber->biblionumber, |
|
|
280 |
ordernumber => $ordernumber, |
281 |
quantityreceived => $line->quantity, |
282 |
cost => $price, |
283 |
ecost => $order->ecost, |
284 |
invoiceid => $invoiceid, |
285 |
rrp => $order->rrp, |
286 |
budget_id => $order->budget_id, |
287 |
datereceived => $msg_date, |
288 |
received_items => $received_items, |
289 |
order_internalnote => $order->order_internalnote, |
290 |
order_vendornote => $order->order_vendornote, |
278 |
} |
291 |
} |
279 |
)->single; |
292 |
); |
280 |
if ($s) { |
|
|
281 |
ModSuggestion( |
282 |
{ |
283 |
suggestionid => $s->suggestionid, |
284 |
STATUS => 'AVAILABLE', |
285 |
} |
286 |
); |
287 |
} |
288 |
|
289 |
my $price = _get_invoiced_price($line); |
290 |
|
291 |
if ( $order->quantity > $line->quantity ) { |
292 |
my $ordered = $order->quantity; |
293 |
|
294 |
# part receipt |
295 |
$order->orderstatus('partial'); |
296 |
$order->quantity( $ordered - $line->quantity ); |
297 |
$order->update; |
298 |
my $received_order = $order->copy( |
299 |
{ |
300 |
ordernumber => undef, |
301 |
quantity => $line->quantity, |
302 |
quantityreceived => $line->quantity, |
303 |
orderstatus => 'complete', |
304 |
unitprice => $price, |
305 |
invoiceid => $invoiceid, |
306 |
datereceived => $msg_date, |
307 |
} |
308 |
); |
309 |
transfer_items( $schema, $line, $order, |
310 |
$received_order ); |
311 |
receipt_items( $schema, $line, |
312 |
$received_order->ordernumber ); |
313 |
} |
314 |
else { # simple receipt all copies on order |
315 |
$order->quantityreceived( $line->quantity ); |
316 |
$order->datereceived($msg_date); |
317 |
$order->invoiceid($invoiceid); |
318 |
$order->unitprice($price); |
319 |
$order->orderstatus('complete'); |
320 |
$order->update; |
321 |
receipt_items( $schema, $line, $ordernumber ); |
322 |
} |
323 |
} |
293 |
} |
324 |
else { |
294 |
else { |
325 |
$logger->error( |
295 |
$logger->error( |
Lines 366-385
sub receipt_items {
Link Here
|
366 |
my $item = $schema->resultset('Item')->find( $ilink->itemnumber ); |
336 |
my $item = $schema->resultset('Item')->find( $ilink->itemnumber ); |
367 |
if ( !$item ) { |
337 |
if ( !$item ) { |
368 |
my $i = $ilink->itemnumber; |
338 |
my $i = $ilink->itemnumber; |
369 |
$logger->warn( |
339 |
$logger->warn("Cannot find item for $i : Order:$ordernumber"); |
370 |
"Cannot find aqorder item for $i :Order:$ordernumber"); |
|
|
371 |
next; |
340 |
next; |
372 |
} |
341 |
} |
373 |
my $b = $item->homebranch->branchcode; |
342 |
my $b = $item->homebranch->branchcode; |
|
|
343 |
if ( !defined $b ) { |
344 |
$b = 'undef'; |
345 |
} |
374 |
if ( !exists $branch_map{$b} ) { |
346 |
if ( !exists $branch_map{$b} ) { |
375 |
$branch_map{$b} = []; |
347 |
$branch_map{$b} = []; |
376 |
} |
348 |
} |
377 |
push @{ $branch_map{$b} }, $item; |
349 |
push @{ $branch_map{$b} }, $item; |
378 |
} |
350 |
} |
|
|
351 |
|
352 |
my $received_items = []; |
379 |
my $gir_occurrence = 0; |
353 |
my $gir_occurrence = 0; |
380 |
while ( $gir_occurrence < $quantity ) { |
354 |
while ( $gir_occurrence < $quantity ) { |
381 |
my $branch = $inv_line->girfield( 'branch', $gir_occurrence ); |
355 |
my $branch = $inv_line->girfield( 'branch', $gir_occurrence ); |
382 |
my $item = shift @{ $branch_map{$branch} }; |
356 |
my $barcode = $inv_line->girfield( 'barcode', $gir_occurrence ); |
|
|
357 |
my $item = shift @{ $branch_map{$branch} }; |
358 |
if ( !defined $item ) { |
359 |
$item = shift @{ $branch_map{undef} }; |
360 |
} |
361 |
|
383 |
if ($item) { |
362 |
if ($item) { |
384 |
my $barcode = $inv_line->girfield( 'barcode', $gir_occurrence ); |
363 |
my $barcode = $inv_line->girfield( 'barcode', $gir_occurrence ); |
385 |
if ( $barcode && !$item->barcode ) { |
364 |
if ( $barcode && !$item->barcode ) { |
Lines 398-403
sub receipt_items {
Link Here
|
398 |
} |
377 |
} |
399 |
} |
378 |
} |
400 |
|
379 |
|
|
|
380 |
push @{$received_items}, $item->itemnumber; |
401 |
$item->update; |
381 |
$item->update; |
402 |
} |
382 |
} |
403 |
else { |
383 |
else { |
Lines 405-463
sub receipt_items {
Link Here
|
405 |
} |
385 |
} |
406 |
++$gir_occurrence; |
386 |
++$gir_occurrence; |
407 |
} |
387 |
} |
408 |
return; |
388 |
return $received_items; |
409 |
|
|
|
410 |
} |
411 |
|
412 |
sub transfer_items { |
413 |
my ( $schema, $inv_line, $order_from, $order_to ) = @_; |
414 |
|
415 |
# Transfer x items from the orig order to a completed partial order |
416 |
my $quantity = $inv_line->quantity; |
417 |
my $gocc = 0; |
418 |
my %mapped_by_branch; |
419 |
while ( $gocc < $quantity ) { |
420 |
my $branch = $inv_line->girfield( 'branch', $gocc ); |
421 |
if ( !exists $mapped_by_branch{$branch} ) { |
422 |
$mapped_by_branch{$branch} = 1; |
423 |
} |
424 |
else { |
425 |
$mapped_by_branch{$branch}++; |
426 |
} |
427 |
++$gocc; |
428 |
} |
429 |
my $logger = Log::Log4perl->get_logger(); |
430 |
my $o1 = $order_from->ordernumber; |
431 |
my $o2 = $order_to->ordernumber; |
432 |
$logger->warn("transferring $quantity copies from order $o1 to order $o2"); |
433 |
|
434 |
my @item_links = $schema->resultset('AqordersItem')->search( |
435 |
{ |
436 |
ordernumber => $order_from->ordernumber, |
437 |
} |
438 |
); |
439 |
foreach my $ilink (@item_links) { |
440 |
my $ino = $ilink->itemnumber; |
441 |
my $item = $schema->resultset('Item')->find( $ilink->itemnumber ); |
442 |
my $i_branch = $item->homebranch; |
443 |
if ( exists $mapped_by_branch{$i_branch} |
444 |
&& $mapped_by_branch{$i_branch} > 0 ) |
445 |
{ |
446 |
$ilink->ordernumber( $order_to->ordernumber ); |
447 |
$ilink->update; |
448 |
--$quantity; |
449 |
--$mapped_by_branch{$i_branch}; |
450 |
$logger->warn("Transferred item $item"); |
451 |
} |
452 |
else { |
453 |
$logger->warn("Skipped item $item"); |
454 |
} |
455 |
if ( $quantity < 1 ) { |
456 |
last; |
457 |
} |
458 |
} |
459 |
|
389 |
|
460 |
return; |
|
|
461 |
} |
390 |
} |
462 |
|
391 |
|
463 |
sub process_quote { |
392 |
sub process_quote { |
Lines 1080-1098
Koha::EDI
Link Here
|
1080 |
|
1009 |
|
1081 |
receipt_items( schema_obj, invoice_line, ordernumber) |
1010 |
receipt_items( schema_obj, invoice_line, ordernumber) |
1082 |
|
1011 |
|
1083 |
receipts the items recorded on this invoice line |
1012 |
checks the items recorded on this invoice line, updating their barcodes if supplied |
1084 |
|
1013 |
by the vendor |
1085 |
no meaningful return |
|
|
1086 |
|
1087 |
=head2 transfer_items |
1088 |
|
1089 |
transfer_items(schema, invoice_line, originating_order, receiving_order) |
1090 |
|
1091 |
Transfer the items covered by this invoice line from their original |
1092 |
order to another order recording the partial fulfillment of the original |
1093 |
order |
1094 |
|
1014 |
|
1095 |
no meaningful return |
1015 |
returns an arrayref of matched itemnumbers |
1096 |
|
1016 |
|
1097 |
=head2 get_edifact_ean |
1017 |
=head2 get_edifact_ean |
1098 |
|
1018 |
|
1099 |
- |
|
|