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

(-)a/Koha/EDI.pm (-83 / +81 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
                }
334
335
                $logger->trace( "Receipting order:$ordernumber Qty: " . $line->quantity );
336
                $logger->trace( "Updating bib:" . $bib->biblionumber . " id:" . $line->item_number_id );
333
337
334
                    # check suggestions
338
                # check suggestions
335
                    my $s = $schema->resultset('Suggestion')->search(
339
                my $s = $schema->resultset('Suggestion')->search(
340
                    {
341
                        biblionumber => $bib->biblionumber,
342
                    }
343
                )->single;
344
                if ($s) {
345
                    ModSuggestion(
336
                        {
346
                        {
337
                            biblionumber => $order->biblionumber->biblionumber,
347
                            suggestionid => $s->suggestionid,
348
                            STATUS       => 'AVAILABLE',
338
                        }
349
                        }
339
                    )->single;
350
                    );
340
                    if ($s) {
351
                }
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
352
354
                    my ( $price, $price_excl_tax ) = _get_invoiced_price($line, $quantity);
353
                # If quantity_invoiced is present use it in preference
355
                    my $tax_rate = $line->tax_rate;
354
                my $quantity = $line->quantity_invoiced;
356
                    if ($tax_rate && $tax_rate->{rate} != 0) {
355
                if ( !$quantity ) {
357
                       $tax_rate->{rate} /= 100;
356
                    $quantity = $line->quantity;
358
                    }
357
                }
359
358
360
                    if ( $order->quantity > $quantity ) {
359
                my ( $price, $price_excl_tax ) = _get_invoiced_price( $line, $quantity );
361
                        my $ordered = $order->quantity;
360
                my $tax_rate = $line->tax_rate;
362
361
                if ( $tax_rate && $tax_rate->{rate} != 0 ) {
363
                        # part receipt
362
                    $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
                }
363
                }
401
                else {
364
402
                    $logger->error(
365
                if ( $order->quantity > $quantity ) {
403
                        "No order found for $ordernumber Invoice:$invoicenumber"
366
                    my $ordered = $order->quantity;
367
368
                    # part receipt
369
                    $order->orderstatus('partial');
370
                    $order->quantity( $ordered - $quantity );
371
                    $order->update;
372
                    my $received_order = $order->copy(
373
                        {
374
                            ordernumber            => undef,
375
                            quantity               => $quantity,
376
                            quantityreceived       => $quantity,
377
                            orderstatus            => 'complete',
378
                            unitprice              => $price,
379
                            unitprice_tax_included => $price,
380
                            unitprice_tax_excluded => $price_excl_tax,
381
                            invoiceid              => $invoiceid,
382
                            datereceived           => $msg_date,
383
                            tax_rate_on_receiving  => $tax_rate->{rate},
384
                            tax_value_on_receiving => $quantity * $price_excl_tax * $tax_rate->{rate},
385
                        }
404
                    );
386
                    );
405
                    next;
387
                    transfer_items(
388
                        $schema,         $line, $order,
389
                        $received_order, $quantity
390
                    );
391
                    receipt_items(
392
                        $schema,                      $line,
393
                        $received_order->ordernumber, $quantity
394
                    );
395
                } else {    # simple receipt all copies on order
396
                    $order->quantityreceived($quantity);
397
                    $order->datereceived($msg_date);
398
                    $order->invoiceid($invoiceid);
399
                    $order->unitprice($price);
400
                    $order->unitprice_tax_excluded($price_excl_tax);
401
                    $order->unitprice_tax_included($price);
402
                    $order->tax_rate_on_receiving( $tax_rate->{rate} );
403
                    $order->tax_value_on_receiving( $quantity * $price_excl_tax * $tax_rate->{rate} );
404
                    $order->orderstatus('complete');
405
                    $order->update;
406
                    receipt_items( $schema, $line, $ordernumber, $quantity );
406
                }
407
                }
407
408
            }
408
            }
409
410
        }
409
        }
411
    }
410
    }
412
411
413
- 

Return to bug 38423