View | Details | Raw Unified | Return to bug 38423
Collapse All | Expand All

(-)a/Koha/EDI.pm (-83 / +87 lines)
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
- 

Return to bug 38423