|
Lines 290-297
sub process_invoice {
Link Here
|
| 290 |
)->single; |
290 |
)->single; |
| 291 |
} |
291 |
} |
| 292 |
if ( !$vendor_acct ) { |
292 |
if ( !$vendor_acct ) { |
| 293 |
carp |
293 |
carp "Cannot find vendor with ean $vendor_ean for invoice $invoicenumber in $invoice_message->filename"; |
| 294 |
"Cannot find vendor with ean $vendor_ean for invoice $invoicenumber in $invoice_message->filename"; |
|
|
| 295 |
next; |
294 |
next; |
| 296 |
} |
295 |
} |
| 297 |
$invoice_message->edi_acct( $vendor_acct->id ); |
296 |
$invoice_message->edi_acct( $vendor_acct->id ); |
|
Lines 313-412
sub process_invoice {
Link Here
|
| 313 |
|
312 |
|
| 314 |
foreach my $line ( @{$lines} ) { |
313 |
foreach my $line ( @{$lines} ) { |
| 315 |
my $ordernumber = $line->ordernumber; |
314 |
my $ordernumber = $line->ordernumber; |
| 316 |
if (!$ordernumber ) { |
315 |
if ( !$ordernumber ) { |
| 317 |
$logger->trace( "Skipping invoice line, no associated ordernumber" ); |
316 |
$logger->error("Skipping invoice line, no associated ordernumber"); |
| 318 |
next; |
317 |
next; |
| 319 |
} |
318 |
} |
| 320 |
|
319 |
|
| 321 |
$logger->trace( "Receipting order:$ordernumber Qty: ", |
320 |
# ModReceiveOrder does not validate that $ordernumber exists validate here |
| 322 |
$line->quantity ); |
|
|
| 323 |
|
| 324 |
my $order = $schema->resultset('Aqorder')->find($ordernumber); |
321 |
my $order = $schema->resultset('Aqorder')->find($ordernumber); |
| 325 |
if (my $bib = $order->biblionumber) { |
322 |
if ( !$order ) { |
| 326 |
my $b = $bib->biblionumber; |
323 |
$logger->error("Skipping invoice line, no order found for $ordernumber, invoice:$invoicenumber"); |
| 327 |
my $id = $line->item_number_id; |
324 |
next; |
| 328 |
$logger->trace("Updating bib:$b id:$id"); |
|
|
| 329 |
} |
325 |
} |
| 330 |
|
326 |
|
| 331 |
# ModReceiveOrder does not validate that $ordernumber exists validate here |
327 |
my $bib = $order->biblionumber; |
| 332 |
if ($order) { |
328 |
if ( !$bib ) { |
|
|
329 |
$logger->error( |
| 330 |
"Skipping invoice line, no bibliographic record found for $ordernumber, invoice:$invoicenumber" |
| 331 |
); |
| 332 |
next; |
| 333 |
} |
| 333 |
|
334 |
|
| 334 |
# check suggestions |
335 |
$logger->trace( |
| 335 |
my $s = $schema->resultset('Suggestion')->search( |
336 |
"Receipting order:$ordernumber Qty: ", |
|
|
337 |
$line->quantity |
| 338 |
); |
| 339 |
|
| 340 |
my $b = $bib->biblionumber; |
| 341 |
my $id = $line->item_number_id; |
| 342 |
$logger->trace("Updating bib:$b id:$id"); |
| 343 |
|
| 344 |
# check suggestions |
| 345 |
my $s = $schema->resultset('Suggestion')->search( |
| 346 |
{ |
| 347 |
biblionumber => $order->biblionumber->biblionumber, |
| 348 |
} |
| 349 |
)->single; |
| 350 |
if ($s) { |
| 351 |
ModSuggestion( |
| 336 |
{ |
352 |
{ |
| 337 |
biblionumber => $order->biblionumber->biblionumber, |
353 |
suggestionid => $s->suggestionid, |
|
|
354 |
STATUS => 'AVAILABLE', |
| 338 |
} |
355 |
} |
| 339 |
)->single; |
356 |
); |
| 340 |
if ($s) { |
357 |
} |
| 341 |
ModSuggestion( |
|
|
| 342 |
{ |
| 343 |
suggestionid => $s->suggestionid, |
| 344 |
STATUS => 'AVAILABLE', |
| 345 |
} |
| 346 |
); |
| 347 |
} |
| 348 |
# If quantity_invoiced is present use it in preference |
| 349 |
my $quantity = $line->quantity_invoiced; |
| 350 |
if (!$quantity) { |
| 351 |
$quantity = $line->quantity; |
| 352 |
} |
| 353 |
|
358 |
|
| 354 |
my ( $price, $price_excl_tax ) = _get_invoiced_price($line, $quantity); |
359 |
# If quantity_invoiced is present use it in preference |
| 355 |
my $tax_rate = $line->tax_rate; |
360 |
my $quantity = $line->quantity_invoiced; |
| 356 |
if ($tax_rate && $tax_rate->{rate} != 0) { |
361 |
if ( !$quantity ) { |
| 357 |
$tax_rate->{rate} /= 100; |
362 |
$quantity = $line->quantity; |
| 358 |
} |
363 |
} |
| 359 |
|
364 |
|
| 360 |
if ( $order->quantity > $quantity ) { |
365 |
my ( $price, $price_excl_tax ) = _get_invoiced_price( $line, $quantity ); |
| 361 |
my $ordered = $order->quantity; |
366 |
my $tax_rate = $line->tax_rate; |
| 362 |
|
367 |
if ( $tax_rate && $tax_rate->{rate} != 0 ) { |
| 363 |
# part receipt |
368 |
$tax_rate->{rate} /= 100; |
| 364 |
$order->orderstatus('partial'); |
|
|
| 365 |
$order->quantity( $ordered - $quantity ); |
| 366 |
$order->update; |
| 367 |
my $received_order = $order->copy( |
| 368 |
{ |
| 369 |
ordernumber => undef, |
| 370 |
quantity => $quantity, |
| 371 |
quantityreceived => $quantity, |
| 372 |
orderstatus => 'complete', |
| 373 |
unitprice => $price, |
| 374 |
unitprice_tax_included => $price, |
| 375 |
unitprice_tax_excluded => $price_excl_tax, |
| 376 |
invoiceid => $invoiceid, |
| 377 |
datereceived => $msg_date, |
| 378 |
tax_rate_on_receiving => $tax_rate->{rate}, |
| 379 |
tax_value_on_receiving => $quantity * $price_excl_tax * $tax_rate->{rate}, |
| 380 |
} |
| 381 |
); |
| 382 |
transfer_items( $schema, $line, $order, |
| 383 |
$received_order, $quantity ); |
| 384 |
receipt_items( $schema, $line, |
| 385 |
$received_order->ordernumber, $quantity ); |
| 386 |
} |
| 387 |
else { # simple receipt all copies on order |
| 388 |
$order->quantityreceived( $quantity ); |
| 389 |
$order->datereceived($msg_date); |
| 390 |
$order->invoiceid($invoiceid); |
| 391 |
$order->unitprice($price); |
| 392 |
$order->unitprice_tax_excluded($price_excl_tax); |
| 393 |
$order->unitprice_tax_included($price); |
| 394 |
$order->tax_rate_on_receiving($tax_rate->{rate}); |
| 395 |
$order->tax_value_on_receiving( $quantity * $price_excl_tax * $tax_rate->{rate}); |
| 396 |
$order->orderstatus('complete'); |
| 397 |
$order->update; |
| 398 |
receipt_items( $schema, $line, $ordernumber, $quantity ); |
| 399 |
} |
| 400 |
} |
369 |
} |
| 401 |
else { |
370 |
|
| 402 |
$logger->error( |
371 |
if ( $order->quantity > $quantity ) { |
| 403 |
"No order found for $ordernumber Invoice:$invoicenumber" |
372 |
my $ordered = $order->quantity; |
|
|
373 |
|
| 374 |
# part receipt |
| 375 |
$order->orderstatus('partial'); |
| 376 |
$order->quantity( $ordered - $quantity ); |
| 377 |
$order->update; |
| 378 |
my $received_order = $order->copy( |
| 379 |
{ |
| 380 |
ordernumber => undef, |
| 381 |
quantity => $quantity, |
| 382 |
quantityreceived => $quantity, |
| 383 |
orderstatus => 'complete', |
| 384 |
unitprice => $price, |
| 385 |
unitprice_tax_included => $price, |
| 386 |
unitprice_tax_excluded => $price_excl_tax, |
| 387 |
invoiceid => $invoiceid, |
| 388 |
datereceived => $msg_date, |
| 389 |
tax_rate_on_receiving => $tax_rate->{rate}, |
| 390 |
tax_value_on_receiving => $quantity * $price_excl_tax * $tax_rate->{rate}, |
| 391 |
} |
| 404 |
); |
392 |
); |
| 405 |
next; |
393 |
transfer_items( |
|
|
394 |
$schema, $line, $order, |
| 395 |
$received_order, $quantity |
| 396 |
); |
| 397 |
receipt_items( |
| 398 |
$schema, $line, |
| 399 |
$received_order->ordernumber, $quantity |
| 400 |
); |
| 401 |
} else { # simple receipt all copies on order |
| 402 |
$order->quantityreceived($quantity); |
| 403 |
$order->datereceived($msg_date); |
| 404 |
$order->invoiceid($invoiceid); |
| 405 |
$order->unitprice($price); |
| 406 |
$order->unitprice_tax_excluded($price_excl_tax); |
| 407 |
$order->unitprice_tax_included($price); |
| 408 |
$order->tax_rate_on_receiving( $tax_rate->{rate} ); |
| 409 |
$order->tax_value_on_receiving( $quantity * $price_excl_tax * $tax_rate->{rate} ); |
| 410 |
$order->orderstatus('complete'); |
| 411 |
$order->update; |
| 412 |
receipt_items( $schema, $line, $ordernumber, $quantity ); |
| 406 |
} |
413 |
} |
| 407 |
|
|
|
| 408 |
} |
414 |
} |
| 409 |
|
|
|
| 410 |
} |
415 |
} |
| 411 |
} |
416 |
} |
| 412 |
|
417 |
|
| 413 |
- |
|
|