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

(-)a/Koha/Edifact/Order.pm (-5 / +26 lines)
Lines 263-269 sub order_msg_header { Link Here
263
        beginning_of_message(
263
        beginning_of_message(
264
        $self->{basket}->basketno,
264
        $self->{basket}->basketno,
265
        $self->{recipient}->standard,
265
        $self->{recipient}->standard,
266
        $self->{is_response}
266
        $self->{is_response},
267
        $self->purchase_order_number
267
        );
268
        );
268
269
269
    # DTM
270
    # DTM
Lines 295-304 sub order_msg_header { Link Here
295
}
296
}
296
297
297
sub beginning_of_message {
298
sub beginning_of_message {
298
    my $basketno            = shift;
299
    my $basketno              = shift;
299
    my $standard            = shift;
300
    my $standard              = shift;
300
    my $response            = shift;
301
    my $response              = shift;
301
    my $document_message_no = sprintf '%011d', $basketno;
302
    my $purchase_order_number = shift;
303
304
    # Use purchase order number if available, otherwise use basketno
305
    my $document_message_no = $purchase_order_number ? $purchase_order_number : sprintf '%011d', $basketno;
302
306
303
    #    my $message_function = 9;    # original 7 = retransmission
307
    #    my $message_function = 9;    # original 7 = retransmission
304
    # message_code values
308
    # message_code values
Lines 332-337 sub name_and_address { Link Here
332
    return "NAD+$qualifier_code{$party}+${id_code}::$id_agency$seg_terminator";
336
    return "NAD+$qualifier_code{$party}+${id_code}::$id_agency$seg_terminator";
333
}
337
}
334
338
339
sub purchase_order_number {
340
    my $self = shift;
341
342
    # If the vendor EDI account is configured to use purchase order numbers for basket names,
343
    # then the basket name IS the purchase order number
344
    my $vendor_config = $self->{recipient};
345
    if ( $vendor_config && $vendor_config->po_is_basketname ) {
346
        return $self->{basket}->basketname;
347
    }
348
349
    return;
350
}
351
335
sub order_line {
352
sub order_line {
336
    my ( $self, $linenumber, $orderline ) = @_;
353
    my ( $self, $linenumber, $orderline ) = @_;
337
354
Lines 805-810 Make handling of GIR segments more customizable Link Here
805
    value. Handles the fact that NAD segments encode the value for 'EAN' differently
822
    value. Handles the fact that NAD segments encode the value for 'EAN' differently
806
    to elsewhere.
823
    to elsewhere.
807
824
825
=head2 purchase_order_number
826
827
    Returns the purchase_order_number given the edi vendor configuration
828
808
=head2 order_line
829
=head2 order_line
809
830
810
    Creates the message segments wncoding an order line
831
    Creates the message segments wncoding an order line
(-)a/t/db_dependent/Koha/Edifact/Order.t (-4 / +150 lines)
Lines 20-26 Link Here
20
use Modern::Perl;
20
use Modern::Perl;
21
21
22
use Test::NoWarnings;
22
use Test::NoWarnings;
23
use Test::More tests => 4;
23
use Test::More tests => 5;
24
24
25
use Koha::Edifact::Order;
25
use Koha::Edifact::Order;
26
26
Lines 32-38 my $schema = Koha::Database->new->schema; Link Here
32
my $builder = t::lib::TestBuilder->new;
32
my $builder = t::lib::TestBuilder->new;
33
33
34
subtest 'beggining_of_message tests' => sub {
34
subtest 'beggining_of_message tests' => sub {
35
    plan tests => 2;
35
    plan tests => 3;
36
36
37
    $schema->storage->txn_begin;
37
    $schema->storage->txn_begin;
38
38
Lines 54-59 subtest 'beggining_of_message tests' => sub { Link Here
54
    $bgm = Koha::Edifact::Order::beginning_of_message( $basketno, $dbic_edi_vendor->standard, 1 );
54
    $bgm = Koha::Edifact::Order::beginning_of_message( $basketno, $dbic_edi_vendor->standard, 1 );
55
    is( $bgm, qq{BGM+22V+$basketno+9'}, "When vendor is set to BiC standard we use 22V in BGM segment" );
55
    is( $bgm, qq{BGM+22V+$basketno+9'}, "When vendor is set to BiC standard we use 22V in BGM segment" );
56
56
57
    # Test BGM with purchase order number
58
    my $purchase_order_number = 'PO123456789';
59
    $bgm =
60
        Koha::Edifact::Order::beginning_of_message( $basketno, $dbic_edi_vendor->standard, 1, $purchase_order_number );
61
    is(
62
        $bgm, qq{BGM+22V+$purchase_order_number+9'},
63
        "When purchase order number provided, it's used in BGM segment instead of basketno"
64
    );
65
57
    $schema->storage->txn_rollback;
66
    $schema->storage->txn_rollback;
58
};
67
};
59
68
Lines 264-273 subtest 'filename() tests' => sub { Link Here
264
273
265
    my @orders = $schema->resultset('Aqorder')->search( { basketno => $order->basket->basketno } )->all;
274
    my @orders = $schema->resultset('Aqorder')->search( { basketno => $order->basket->basketno } )->all;
266
275
276
    my $dbic_vendor = $schema->resultset('VendorEdiAccount')->find( $vendor->{id} );
277
267
    my $edi_order = Koha::Edifact::Order->new(
278
    my $edi_order = Koha::Edifact::Order->new(
268
        {
279
        {
269
            orderlines => \@orders,
280
            orderlines => \@orders,
270
            vendor     => $vendor,
281
            vendor     => $dbic_vendor,
271
            ean        => $ean
282
            ean        => $ean
272
        }
283
        }
273
    );
284
    );
Lines 280-282 subtest 'filename() tests' => sub { Link Here
280
291
281
    $schema->storage->txn_rollback;
292
    $schema->storage->txn_rollback;
282
};
293
};
283
- 
294
295
subtest 'RFF+ON purchase order number generation' => sub {
296
    plan tests => 3;
297
298
    $schema->storage->txn_begin;
299
300
    # Create vendor with po_is_basketname set to true
301
    my $vendor_po = $builder->build(
302
        {
303
            source => 'VendorEdiAccount',
304
            value  => {
305
                description      => 'Test vendor PO mode',
306
                po_is_basketname => 1,
307
                standard         => 'EUR',
308
            }
309
        }
310
    );
311
312
    # Create vendor with po_is_basketname set to false (default)
313
    my $vendor_filename = $builder->build(
314
        {
315
            source => 'VendorEdiAccount',
316
            value  => {
317
                description      => 'Test vendor filename mode',
318
                po_is_basketname => 0,
319
                standard         => 'EUR',
320
            }
321
        }
322
    );
323
324
    # Create baskets with different naming schemes
325
    my $basket_po = $builder->build(
326
        {
327
            source => 'Aqbasket',
328
            value  => {
329
                basketname   => 'PO123456789',             # Purchase order number
330
                booksellerid => $vendor_po->{vendor_id},
331
            }
332
        }
333
    );
334
335
    my $basket_filename = $builder->build(
336
        {
337
            source => 'Aqbasket',
338
            value  => {
339
                basketname   => 'quote_file.ceq',                # Filename
340
                booksellerid => $vendor_filename->{vendor_id},
341
            }
342
        }
343
    );
344
345
    # Create biblio records for the orders
346
    my $biblio_po       = $builder->build_sample_biblio();
347
    my $biblio_filename = $builder->build_sample_biblio();
348
349
    # Create orders for the baskets
350
    my $order_po = $builder->build(
351
        {
352
            source => 'Aqorder',
353
            value  => {
354
                basketno     => $basket_po->{basketno},
355
                biblionumber => $biblio_po->biblionumber,
356
                orderstatus  => 'new',
357
                quantity     => 1,
358
                listprice    => '10.00',
359
            }
360
        }
361
    );
362
363
    my $order_filename = $builder->build(
364
        {
365
            source => 'Aqorder',
366
            value  => {
367
                basketno     => $basket_filename->{basketno},
368
                biblionumber => $biblio_filename->biblionumber,
369
                orderstatus  => 'new',
370
                quantity     => 1,
371
                listprice    => '10.00',
372
            }
373
        }
374
    );
375
376
    # Create EAN object
377
    my $ean = $builder->build(
378
        {
379
            source => 'EdifactEan',
380
            value  => { ean => '1234567890123' }
381
        }
382
    );
383
384
    # Get database objects
385
    my $dbic_vendor_po       = $schema->resultset('VendorEdiAccount')->find( $vendor_po->{id} );
386
    my $dbic_vendor_filename = $schema->resultset('VendorEdiAccount')->find( $vendor_filename->{id} );
387
    my $dbic_ean             = $schema->resultset('EdifactEan')->find( $ean->{ee_id} );
388
    my @orderlines_po        = $schema->resultset('Aqorder')->search( { basketno => $basket_po->{basketno} } );
389
    my @orderlines_filename  = $schema->resultset('Aqorder')->search( { basketno => $basket_filename->{basketno} } );
390
391
    # Test order generation with purchase order number
392
    my $order_obj_po = Koha::Edifact::Order->new(
393
        {
394
            orderlines => \@orderlines_po,
395
            vendor     => $dbic_vendor_po,
396
            ean        => $dbic_ean,
397
        }
398
    );
399
400
    # Test order generation with filename
401
    my $order_obj_filename = Koha::Edifact::Order->new(
402
        {
403
            orderlines => \@orderlines_filename,
404
            vendor     => $dbic_vendor_filename,
405
            ean        => $dbic_ean,
406
        }
407
    );
408
409
    # Test that purchase order number is extracted correctly
410
    is(
411
        $order_obj_po->purchase_order_number, 'PO123456789',
412
        'Purchase order number extracted from basket name when vendor configured for PO mode'
413
    );
414
415
    # Test that no purchase order number is extracted when vendor uses filename mode
416
    is(
417
        $order_obj_filename->purchase_order_number, undef,
418
        'No purchase order number when vendor configured for filename mode'
419
    );
420
421
    # Test that purchase order number is included in BGM segment when purchase order number present
422
    my $transmission = $order_obj_po->encode();
423
    like(
424
        $transmission, qr/BGM\+220\+PO123456789\+9'/,
425
        'Purchase order number included in BGM segment when purchase order number present'
426
    );
427
428
    $schema->storage->txn_rollback;
429
};

Return to bug 20253