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

(-)a/Koha/Edifact/Order.pm (+22 lines)
Lines 52-57 sub new { Link Here
52
        # convenient alias
52
        # convenient alias
53
        $self->{basket}       = $self->{orderlines}->[0]->basketno;
53
        $self->{basket}       = $self->{orderlines}->[0]->basketno;
54
        $self->{message_date} = dt_from_string();
54
        $self->{message_date} = dt_from_string();
55
        
56
        # Extract purchase order number for RFF+ON segment
57
        $self->{purchase_order_number} = $self->_get_purchase_order_number();
55
    }
58
    }
56
59
57
    # validate that its worth proceeding
60
    # validate that its worth proceeding
Lines 283-288 sub order_msg_header { Link Here
283
        $self->{recipient}->id_code_qualifier
286
        $self->{recipient}->id_code_qualifier
284
        );
287
        );
285
288
289
    # RFF Purchase order number (if configured)
290
    if ($self->{purchase_order_number}) {
291
        push @header, "RFF+ON:$self->{purchase_order_number}$seg_terminator";
292
    }
293
286
    # repeat for for other relevant parties
294
    # repeat for for other relevant parties
287
295
288
    # CUX currency
296
    # CUX currency
Lines 693-698 sub encode_text { Link Here
693
    return $string;
701
    return $string;
694
}
702
}
695
703
704
sub _get_purchase_order_number {
705
    my $self = shift;
706
    
707
    # If the vendor EDI account is configured to use purchase order numbers for basket names,
708
    # then the basket name IS the purchase order number
709
    my $vendor_config = $self->{recipient};
710
    if ($vendor_config && $vendor_config->basket_name_source && 
711
        $vendor_config->basket_name_source eq 'purchase_order_number') {
712
        return $self->{basket}->basketname;
713
    }
714
    
715
    return;
716
}
717
696
1;
718
1;
697
__END__
719
__END__
698
720
(-)a/t/db_dependent/Koha/Edifact/Order.t (-2 / +123 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 280-282 subtest 'filename() tests' => sub { Link Here
280
280
281
    $schema->storage->txn_rollback;
281
    $schema->storage->txn_rollback;
282
};
282
};
283
- 
283
284
subtest 'RFF+ON purchase order number generation' => sub {
285
    plan tests => 3;
286
287
    $schema->storage->txn_begin;
288
289
    # Create vendor with basket_name_source set to purchase_order_number
290
    my $vendor_po = $builder->build(
291
        {
292
            source => 'VendorEdiAccount',
293
            value  => {
294
                description        => 'Test vendor PO mode',
295
                basket_name_source => 'purchase_order_number',
296
                standard           => 'EUR',
297
            }
298
        }
299
    );
300
301
    # Create vendor with basket_name_source set to filename (default)
302
    my $vendor_filename = $builder->build(
303
        {
304
            source => 'VendorEdiAccount',
305
            value  => {
306
                description        => 'Test vendor filename mode',
307
                basket_name_source => 'filename',
308
                standard           => 'EUR',
309
            }
310
        }
311
    );
312
313
    # Create baskets with different naming schemes
314
    my $basket_po = $builder->build(
315
        {
316
            source => 'Aqbasket',
317
            value  => {
318
                basketname     => 'PO123456789',  # Purchase order number
319
                booksellerid   => $vendor_po->{vendor_id},
320
            }
321
        }
322
    );
323
324
    my $basket_filename = $builder->build(
325
        {
326
            source => 'Aqbasket',
327
            value  => {
328
                basketname     => 'quote_file.ceq',  # Filename
329
                booksellerid   => $vendor_filename->{vendor_id},
330
            }
331
        }
332
    );
333
334
    # Create orders for the baskets
335
    my $order_po = $builder->build(
336
        {
337
            source => 'Aqorder',
338
            value  => {
339
                basketno    => $basket_po->{basketno},
340
                orderstatus => 'new',
341
            }
342
        }
343
    );
344
345
    my $order_filename = $builder->build(
346
        {
347
            source => 'Aqorder',
348
            value  => {
349
                basketno    => $basket_filename->{basketno},
350
                orderstatus => 'new',
351
            }
352
        }
353
    );
354
355
    # Create EAN object
356
    my $ean = $builder->build(
357
        {
358
            source => 'EdifactEan',
359
            value  => {
360
                ean => '1234567890123'
361
            }
362
        }
363
    );
364
365
    # Get database objects
366
    my $dbic_vendor_po = $schema->resultset('VendorEdiAccount')->find($vendor_po->{id});
367
    my $dbic_vendor_filename = $schema->resultset('VendorEdiAccount')->find($vendor_filename->{id});
368
    my $dbic_ean = $schema->resultset('EdifactEan')->find($ean->{id});
369
    my @orderlines_po = $schema->resultset('Aqorder')->search({ basketno => $basket_po->{basketno} });
370
    my @orderlines_filename = $schema->resultset('Aqorder')->search({ basketno => $basket_filename->{basketno} });
371
372
    # Test order generation with purchase order number
373
    my $order_obj_po = Koha::Edifact::Order->new(
374
        {
375
            orderlines => \@orderlines_po,
376
            vendor     => $dbic_vendor_po,
377
            ean        => $dbic_ean,
378
        }
379
    );
380
381
    # Test order generation with filename
382
    my $order_obj_filename = Koha::Edifact::Order->new(
383
        {
384
            orderlines => \@orderlines_filename,
385
            vendor     => $dbic_vendor_filename,
386
            ean        => $dbic_ean,
387
        }
388
    );
389
390
    # Test that purchase order number is extracted correctly
391
    is($order_obj_po->{purchase_order_number}, 'PO123456789', 
392
       'Purchase order number extracted from basket name when vendor configured for PO mode');
393
394
    # Test that no purchase order number is extracted when vendor uses filename mode
395
    is($order_obj_filename->{purchase_order_number}, undef,
396
       'No purchase order number when vendor configured for filename mode');
397
398
    # Test that RFF+ON segment is included in order header when purchase order number present
399
    my $transmission = $order_obj_po->encode();
400
    like($transmission, qr/RFF\+ON:PO123456789'/,
401
         'RFF+ON segment included in ORDER message when purchase order number present');
402
403
    $schema->storage->txn_rollback;
404
};

Return to bug 20253