Koha/t/db_dependent/Bookseller.t
root 9620d2d249 Bug 10641 - GetBooksellerWithLateOrders in C4::Bookseller.pm has some incoherences
This patch fixes some incoherences of the routine
GetBooksellerWithOrders().

Now it considers the field $estimateddeliverydateto and it replaces it
by now() only if it is undef.

Also, it doesn't test if $aqbookseller.deliverytime is not Null anymore
but if $deliverytime = null or undef, it replaces it by 0.

It also verifies if $delay is >= 0 and return undef if it is a negative
value.

To Test:
Before, this routine sorts out the BookSellerWithLateOrders. If a
bookseller did not specify a deliverytime, it would never appears in
the list of LateOrders.  Moreover, if the field "Estimated delivery
date to" was specified, it didn't take care of the value and it
returns the late order up to today's date.

Now, the returned list considers all the fields give and if the
delivery time of the bookseller is not specified, it calculates the
late orders as if the deliverytime is 0.  By default, all booksellers
which have orders in late until today are listed unless "estimated
delivery date to" is specified.

prove t/db_dependent/Bookseller.t
t/db_dependent/Bookseller.t ..
[Some warnings about uninitialized values]
WARNING: GetBooksellerWithLateOrders is called with a negative value at C4/Bookseller.pm line 135.
t/db_dependent/Bookseller.t .. ok
All tests successful.

Signed-off-by: Srdjan <srdjan@catalyst.net.nz>
Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
All tests and QA script pass.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
2013-10-09 04:02:47 +00:00

682 lines
25 KiB
Perl

#!/usr/bin/perl
use Modern::Perl;
use Test::More tests => 63;
use C4::Context;
use Koha::DateUtils;
use DateTime::Duration;
use C4::Acquisition;
use C4::Serials;
use C4::Budgets;
use C4::Biblio;
BEGIN {
use_ok('C4::Bookseller');
}
can_ok(
'C4::Bookseller', qw(
AddBookseller
DelBookseller
GetBookSeller
GetBookSellerFromId
GetBooksellersWithLateOrders
ModBookseller )
);
#Start transaction
my $dbh = C4::Context->dbh;
$dbh->{RaiseError} = 1;
$dbh->{AutoCommit} = 0;
#Start tests
$dbh->do(q|DELETE FROM aqorders|);
$dbh->do(q|DELETE FROM aqbasket|);
$dbh->do(q|DELETE FROM aqbooksellers|);
#Test AddBookseller
my $count = scalar( C4::Bookseller::GetBookSeller('') );
my $sample_supplier1 = {
name => 'Name1',
address1 => 'address1_1',
address2 => 'address1-2',
address3 => 'address1_2',
address4 => 'address1_2',
postal => 'postal1',
phone => 'phone1',
accountnumber => 'accountnumber1',
fax => 'fax1',
url => 'url1',
contact => 'contact1',
contpos => 'contpos1',
contphone => 'contphone1',
contfax => 'contefax1',
contaltphone => 'contaltphone1',
contemail => 'contemail1',
contnotes => 'contnotes1',
active => 1,
gstreg => 1,
listincgst => 1,
invoiceincgst => 1,
gstrate => '1.0000',
discount => '1.0000',
notes => 'notes1',
deliverytime => undef
};
my $sample_supplier2 = {
name => 'Name2',
address1 => 'address1_2',
address2 => 'address2-2',
address3 => 'address3_2',
address4 => 'address4_2',
postal => 'postal2',
phone => 'phone2',
accountnumber => 'accountnumber2',
fax => 'fax2',
url => 'url2',
contact => 'contact2',
contpos => 'contpos2',
contphone => 'contphone2',
contfax => 'contefax2',
contaltphone => 'contaltphone2',
contemail => 'contemail2',
contnotes => 'contnotes2',
active => 1,
gstreg => 1,
listincgst => 1,
invoiceincgst => 1,
gstrate => '2.0000',
discount => '2.0000',
notes => 'notes2',
deliverytime => 2,
};
my $id_supplier1 = C4::Bookseller::AddBookseller($sample_supplier1);
my $id_supplier2 = C4::Bookseller::AddBookseller($sample_supplier2);
#my $id_bookseller3 = C4::Bookseller::AddBookseller();# NOTE : Doesn't work because the field name cannot be null
like( $id_supplier1, '/^\d+$/', "AddBookseller for supplier1 return an id" );
like( $id_supplier2, '/^\d+$/', "AddBookseller for supplier2 return an id" );
is( scalar( C4::Bookseller::GetBookSeller('') ),
$count + 2, "Supplier1 and Supplier2 have been added" );
#Test DelBookseller
my $del = C4::Bookseller::DelBookseller($id_supplier1);
is( $del, 1, "DelBookseller returns 1 - 1 supplier has been deleted " );
is( C4::Bookseller::GetBookSellerFromId($id_supplier1),
undef, "Supplier1 has been deleted - id_supplier1 doesnt exist anymore" );
#Test GetBookSeller
my @bookseller2 = C4::Bookseller::GetBookSeller( $sample_supplier2->{name} );
is( scalar(@bookseller2), 1, "Get only Supplier2" );
$bookseller2[0] = field_filter( $bookseller2[0] );
delete $bookseller2[0]->{basketcount};
$sample_supplier2->{id} = $id_supplier2;
is_deeply( $bookseller2[0], $sample_supplier2,
"GetBookSeller returns the right informations about $sample_supplier2" );
$id_supplier1 = C4::Bookseller::AddBookseller($sample_supplier1);
my @booksellers = C4::Bookseller::GetBookSeller('')
; #NOTE :without params, it returns all the booksellers
for my $i ( 0 .. scalar(@booksellers) - 1 ) {
$booksellers[$i] = field_filter( $booksellers[$i] );
delete $booksellers[$i]->{basketcount};
}
$sample_supplier1->{id} = $id_supplier1;
is( scalar(@booksellers), $count + 2, "Get Supplier1 and Supplier2" );
my @tab = ( $sample_supplier1, $sample_supplier2 );
is_deeply( \@booksellers, \@tab,
"Returns right fields of Supplier1 and Supplier2" );
#Test basketcount
my @bookseller1 = C4::Bookseller::GetBookSeller( $sample_supplier1->{name} );
#FIXME : if there is 0 basket, GetBookSeller returns 1 as basketcount
#is( $bookseller1[0]->{basketcount}, 0, 'Supplier1 has 0 basket' );
my $sample_basket1 =
C4::Acquisition::NewBasket( $id_supplier1, 'authorisedby1', 'basketname1' );
my $sample_basket2 =
C4::Acquisition::NewBasket( $id_supplier1, 'authorisedby2', 'basketname2' );
@bookseller1 = C4::Bookseller::GetBookSeller( $sample_supplier1->{name} );
is( $bookseller1[0]->{basketcount}, 2, 'Supplier1 has 2 baskets' );
#Test GetBookSellerFromId
my $bookseller1fromid = C4::Bookseller::GetBookSellerFromId();
is( $bookseller1fromid, undef,
"GetBookSellerFromId returns undef if no id given" );
$bookseller1fromid = C4::Bookseller::GetBookSellerFromId($id_supplier1);
$bookseller1fromid = field_filter($bookseller1fromid);
delete $bookseller1fromid->{basketcount};
delete $bookseller1fromid->{subscriptioncount};
is_deeply( $bookseller1fromid, $sample_supplier1,
"Get Supplier1 (GetBookSellerFromId)" );
#Test basketcount
$bookseller1fromid = C4::Bookseller::GetBookSellerFromId($id_supplier1);
is( $bookseller1fromid->{basketcount}, 2, 'Supplier1 has 2 baskets' );
#Test subscriptioncount
my $dt_today = dt_from_string;
my $today = output_pref( $dt_today, 'iso', '24hr', 1 );
my $dt_today1 = dt_from_string;
my $dur5 = DateTime::Duration->new( days => -5 );
$dt_today1->add_duration($dur5);
my $daysago5 = output_pref( $dt_today1, 'iso', '24hr', 1 );
my $budgetperiod = C4::Budgets::AddBudgetPeriod({
budget_period_startdate => $daysago5,
budget_period_enddate => $today,
budget_description => "budget desc"
});
my $id_budget = AddBudget({
budget_code => "CODE",
budget_amount => "123.132",
budget_name => "Budgetname",
budget_notes => "This is a note",
budget_description => "BudgetDescription",
budget_active => 1,
budget_period_id => $budgetperiod
});
my ($biblionumber, $biblioitemnumber) = AddBiblio(MARC::Record->new, '');
$bookseller1fromid = C4::Bookseller::GetBookSellerFromId($id_supplier1);
is( $bookseller1fromid->{subscriptioncount},
0, 'Supplier1 has 0 subscription' );
my $id_subscription1 = C4::Serials::NewSubscription(
undef, "", $id_supplier1, undef,
$id_budget, $biblionumber, '01-01-2013', undef,
undef, undef, undef, undef,
undef, undef, undef, undef,
undef, undef, undef, undef,
undef, undef, undef, undef,
undef, undef, undef, undef,
undef, undef, undef, 1,
"notes", undef, undef, undef,
undef, undef, undef, 0,
"intnotes", 0, undef, undef,
0, undef, '31-12-2013',
);
my $id_subscription2 = C4::Serials::NewSubscription(
undef, "", $id_supplier1, undef,
$id_budget, $biblionumber, '01-01-2013', undef,
undef, undef, undef, undef,
undef, undef, undef, undef,
undef, undef, undef, undef,
undef, undef, undef, undef,
undef, undef, undef, undef,
undef, undef, undef, 1,
"notes", undef, undef, undef,
undef, undef, undef, 0,
"intnotes", 0, undef, undef,
0, undef, '31-12-2013',
);
$bookseller1fromid = C4::Bookseller::GetBookSellerFromId($id_supplier1);
is( $bookseller1fromid->{subscriptioncount},
2, 'Supplier1 has 2 subscriptions' );
#Test ModBookseller
$sample_supplier2 = {
id => $id_supplier2,
name => 'Name2 modified',
address1 => 'address1_2 modified',
address2 => 'address2-2 modified',
address3 => 'address3_2 modified',
address4 => 'address4_2 modified',
postal => 'postal2 modified',
phone => 'phone2 modified',
accountnumber => 'accountnumber2 modified',
fax => 'fax2 modified',
url => 'url2 modified',
contact => 'contact2 modified',
contpos => 'contpos2 modified',
contphone => 'contphone2 modified',
contfax => 'contefax2 modified',
contaltphone => 'contaltphone2 modified',
contemail => 'contemail2 modified',
contnotes => 'contnotes2 modified',
active => 1,
gstreg => 1,
listincgst => 1,
invoiceincgst => 1,
gstrate => '2.0000 ',
discount => '2.0000',
notes => 'notes2 modified',
deliverytime => 2,
};
my $modif1 = C4::Bookseller::ModBookseller();
is( $modif1, undef,
"ModBookseller returns undef if no params given - Nothing happened" );
$modif1 = C4::Bookseller::ModBookseller($sample_supplier2);
is( $modif1, 1, "ModBookseller modifies only the supplier2" );
is( scalar( C4::Bookseller::GetBookSeller('') ),
$count + 2, "Supplier2 has been modified - Nothing added" );
$modif1 = C4::Bookseller::ModBookseller(
{
id => -1,
name => 'name3'
}
);
#is( $modif1, '0E0',
# "ModBookseller returns OEO if the id doesnt exist - Nothing modified" );
#Test GetBooksellersWithLateOrders
#Add 2 suppliers
my $sample_supplier3 = {
name => 'Name3',
address1 => 'address1_3',
address2 => 'address1-3',
address3 => 'address1_3',
address4 => 'address1_3',
postal => 'postal3',
phone => 'phone3',
accountnumber => 'accountnumber3',
fax => 'fax3',
url => 'url3',
contact => 'contact3',
contpos => 'contpos3',
contphone => 'contphone3',
contfax => 'contefax3',
contaltphone => 'contaltphone3',
contemail => 'contemail3',
contnotes => 'contnotes3',
active => 1,
gstreg => 1,
listincgst => 1,
invoiceincgst => 1,
gstrate => '3.0000',
discount => '3.0000',
notes => 'notes3',
deliverytime => 3
};
my $sample_supplier4 = {
name => 'Name4',
address1 => 'address1_4',
address2 => 'address1-4',
address3 => 'address1_4',
address4 => 'address1_4',
postal => 'postal4',
phone => 'phone4',
accountnumber => 'accountnumber4',
fax => 'fax4',
url => 'url4',
contact => 'contact4',
contpos => 'contpos4',
contphone => 'contphone4',
contfax => 'contefax4',
contaltphone => 'contaltphone4',
contemail => 'contemail4',
contnotes => 'contnotes4',
active => 1,
gstreg => 1,
listincgst => 1,
invoiceincgst => 1,
gstrate => '3.0000',
discount => '3.0000',
notes => 'notes3',
};
my $id_supplier3 = C4::Bookseller::AddBookseller($sample_supplier3);
my $id_supplier4 = C4::Bookseller::AddBookseller($sample_supplier4);
#Add 2 baskets
my $sample_basket3 =
C4::Acquisition::NewBasket( $id_supplier3, 'authorisedby3', 'basketname3',
'basketnote3' );
my $sample_basket4 =
C4::Acquisition::NewBasket( $id_supplier4, 'authorisedby4', 'basketname4',
'basketnote4' );
#Modify the basket to add a close date
my $basket1info = {
basketno => $sample_basket1,
closedate => $today,
booksellerid => $id_supplier1
};
my $basket2info = {
basketno => $sample_basket2,
closedate => $daysago5,
booksellerid => $id_supplier2
};
my $dt_today2 = dt_from_string;
my $dur10 = DateTime::Duration->new( days => -10 );
$dt_today2->add_duration($dur10);
my $daysago10 = output_pref( $dt_today2, 'iso', '24hr', 1 );
my $basket3info = {
basketno => $sample_basket3,
closedate => $daysago10,
};
my $basket4info = {
basketno => $sample_basket4,
closedate => $today,
};
ModBasket($basket1info);
ModBasket($basket2info);
ModBasket($basket3info);
ModBasket($basket4info);
#Add 1 subscription
my $id_subscription3 = C4::Serials::NewSubscription(
undef, "", $id_supplier3, undef,
$id_budget, $biblionumber, '01-01-2013', undef,
undef, undef, undef, undef,
undef, undef, undef, undef,
undef, undef, undef, undef,
undef, undef, undef, undef,
undef, undef, undef, undef,
undef, undef, undef, 1,
"notes", undef, undef, undef,
undef, undef, undef, 0,
"intnotes", 0, undef, undef,
0, undef, '31-12-2013',
);
#Add 4 orders
my ( $ordernumber1, $ordernumber2, $ordernumber3, $ordernumber4 );
my ( $basketno1, $basketno2, $basketno3, $basketno4 );
( $basketno1, $ordernumber1 ) = C4::Acquisition::NewOrder(
{
basketno => $sample_basket1,
quantity => 24,
biblionumber => $biblionumber,
budget_id => $id_budget,
entrydate => '01-01-2013',
currency => 'EUR',
notes => "This is a note1",
gstrate => 0.0500,
orderstatus => 1,
subscriptionid => $id_subscription1,
quantityreceived => 2,
rrp => 10,
ecost => 10,
datereceived => '01-06-2013'
}
);
( $basketno2, $ordernumber2 ) = C4::Acquisition::NewOrder(
{
basketno => $sample_basket2,
quantity => 20,
biblionumber => $biblionumber,
budget_id => $id_budget,
entrydate => '01-01-2013',
currency => 'EUR',
notes => "This is a note2",
gstrate => 0.0500,
orderstatus => 1,
subscriptionid => $id_subscription2,
rrp => 10,
ecost => 10,
}
);
( $basketno3, $ordernumber3 ) = C4::Acquisition::NewOrder(
{
basketno => $sample_basket3,
quantity => 20,
biblionumber => $biblionumber,
budget_id => $id_budget,
entrydate => '02-02-2013',
currency => 'EUR',
notes => "This is a note3",
gstrate => 0.0500,
orderstatus => 2,
subscriptionid => $id_subscription3,
rrp => 11,
ecost => 11,
}
);
( $basketno4, $ordernumber4 ) = C4::Acquisition::NewOrder(
{
basketno => $sample_basket4,
quantity => 20,
biblionumber => $biblionumber,
budget_id => $id_budget,
entrydate => '02-02-2013',
currency => 'EUR',
notes => "This is a note3",
gstrate => 0.0500,
orderstatus => 2,
subscriptionid => $id_subscription3,
rrp => 11,
ecost => 11,
quantityreceived => 20
}
);
#Test cases:
# Sample datas :
# Supplier1: delivery -> undef Basket1 : closedate -> today
# Supplier2: delivery -> 2 Basket2 : closedate -> $daysago5
# Supplier3: delivery -> 3 Basket3 : closedate -> $daysago10
#Case 1 : Without parameters:
# quantityreceived < quantity AND rrp <> 0 AND ecost <> 0 AND quantity - COALESCE(quantityreceived,0) <> 0 AND closedate IS NOT NULL -LATE-
# datereceived !null AND rrp <> 0 AND ecost <> 0 AND quantity - COALESCE(quantityreceived,0) <> 0 AND closedate IS NOT NULL -LATE-
# datereceived !null AND rrp <> 0 AND ecost <> 0 AND quantity - COALESCE(quantityreceived,0) <> 0 AND closedate IS NOT NULL -LATE-
# quantityreceived = quantity -NOT LATE-
my %suppliers = C4::Bookseller::GetBooksellersWithLateOrders();
ok( exists( $suppliers{$id_supplier1} ), "Supplier1 has late orders" );
ok( exists( $suppliers{$id_supplier2} ), "Supplier2 has late orders" );
ok( exists( $suppliers{$id_supplier3} ), "Supplier3 has late orders" );
isnt( exists( $suppliers{$id_supplier4} ), 1, "Supplier4 hasnt late orders" )
; # Quantity = quantityreceived
#Case 2: With $delay = 4
# today + 0 > now-$delay -NOT LATE-
# (today-5) + 2 <= now() - $delay -NOT LATE-
# (today-10) + 3 <= now() - $delay -LATE-
# quantityreceived = quantity -NOT LATE-
%suppliers = C4::Bookseller::GetBooksellersWithLateOrders( 4, undef, undef );
isnt( exists( $suppliers{$id_supplier1} ),
1, "Supplier1 has late orders but today > now() - 4 days" );
isnt( exists( $suppliers{$id_supplier2} ),
1, "Supplier2 has late orders and $daysago5 <= now() - (4 days+2)" );
ok( exists( $suppliers{$id_supplier3} ),
"Supplier3 has late orders and $daysago10 <= now() - (4 days+3)" );
isnt( exists( $suppliers{$id_supplier4} ), 1, "Supplier4 hasnt late orders" );
#Case 3: With $delay = -1
is( C4::Bookseller::GetBooksellersWithLateOrders( -1, undef, undef ),
undef, "-1 is a wrong value for a delay" );
#Case 4: With $delay = 0
# today == now-0 -LATE- (if no deliverytime or deliverytime == 0)
# today-5 <= now() - $delay+2 -LATE-
# today-10 <= now() - $delay+3 -LATE-
# quantityreceived = quantity -NOT LATE-
%suppliers = C4::Bookseller::GetBooksellersWithLateOrders( 0, undef, undef );
ok( exists( $suppliers{$id_supplier1} ),
"Supplier1 has late orders but $today == now() - 0 days" )
;
ok( exists( $suppliers{$id_supplier2} ),
"Supplier2 has late orders and $daysago5 <= now() - 2" );
ok( exists( $suppliers{$id_supplier3} ),
"Supplier3 has late orders and $daysago10 <= now() - 3" );
isnt( exists( $suppliers{$id_supplier4} ), 1, "Supplier4 hasnt late orders" );
#Case 5 : With $estimateddeliverydatefrom = today-4
# today >= today-4 -NOT LATE-
# (today-5)+ 2 days >= today-4 -LATE-
# (today-10) + 3 days < today-4 -NOT LATE-
# quantityreceived = quantity -NOT LATE-
my $dt_today3 = dt_from_string;
my $dur4 = DateTime::Duration->new( days => -4 );
$dt_today3->add_duration($dur4);
my $daysago4 = output_pref( $dt_today3, 'iso', '24hr', 1 );
%suppliers =
C4::Bookseller::GetBooksellersWithLateOrders( undef, $daysago4, undef );
ok( exists( $suppliers{$id_supplier1} ),
"Supplier1 has late orders and $today >= $daysago4 -deliverytime undef" );
ok( exists( $suppliers{$id_supplier2} ),
"Supplier2 has late orders and $daysago5 + 2 days >= $daysago4 " );
isnt( exists( $suppliers{$id_supplier3} ),
1, "Supplier3 has late orders and $daysago10 + 5 days < $daysago4 " );
isnt( exists( $suppliers{$id_supplier4} ), 1, "Supplier4 hasnt late orders" );
#Case 6: With $estimateddeliverydatefrom =today-10 and $estimateddeliverydateto = today - 5
# $daysago10<$daysago5<today -NOT LATE-
# $daysago10<$daysago5<$daysago5 +2 -NOT lATE-
# $daysago10<$daysago10 +3 <$daysago5 -LATE-
# quantityreceived = quantity -NOT LATE-
%suppliers = C4::Bookseller::GetBooksellersWithLateOrders( undef, $daysago10,
$daysago5 );
isnt( exists( $suppliers{$id_supplier1} ),
1, "Supplier1 has late orders but $daysago10 < $daysago5 < $today" );
isnt(
exists( $suppliers{$id_supplier2} ),
1,
"Supplier2 has late orders but $daysago10 < $daysago5 < $daysago5+2"
);
ok(
exists( $suppliers{$id_supplier3} ),
"Supplier3 has late orders and $daysago10 <= $daysago10 +3 <= $daysago5"
);
isnt( exists( $suppliers{$id_supplier4} ), 1, "Supplier4 hasnt late orders" );
#Case 7: With $estimateddeliverydateto = today-5
# $today >= $daysago5 -NOT LATE-
# $daysago5 + 2 days > $daysago5 -NOT LATE-
# $daysago10 + 3 <+ $daysago5 -LATE-
# quantityreceived = quantity -NOT LATE-
%suppliers =
C4::Bookseller::GetBooksellersWithLateOrders( undef, undef, $daysago5 );
isnt( exists( $suppliers{$id_supplier1} ),
1,
"Supplier1 has late orders but $today >= $daysago5 - deliverytime undef" );
isnt( exists( $suppliers{$id_supplier2} ),
1, "Supplier2 has late orders but $daysago5 + 2 days > $daysago5 " );
ok( exists( $suppliers{$id_supplier3} ),
"Supplier3 has late orders and $daysago10 + 3 <= $daysago5" );
isnt( exists( $suppliers{$id_supplier4} ), 1, "Supplier4 hasnt late orders" );
#Test with $estimateddeliverydatefrom and $estimateddeliverydateto and $delay
#Case 8 :With $estimateddeliverydatefrom = 2013-07-05 and $estimateddeliverydateto = 2013-07-08 and $delay =5
# $daysago4<today<=$today and $today<now()-3 -NOT LATE-
# $daysago4 < $daysago5 + 2days <= today and $daysago5 <= now()-3+2 days -LATE-
# $daysago4 > $daysago10 + 3days < today and $daysago10 <= now()-3+3 days -NOT LATE-
# quantityreceived = quantity -NOT LATE-
%suppliers =
C4::Bookseller::GetBooksellersWithLateOrders( 3, $daysago4, $today );
isnt(
exists( $suppliers{$id_supplier1} ),
1,
"Supplier1 has late orders but $daysago4<today<=$today and $today<now()-3"
);
ok(
exists( $suppliers{$id_supplier2} ),
"Supplier2 has late orders and $daysago4 < $daysago5 + 2days <= today and $daysago5 <= now()-3+2 days"
);
isnt(
exists( $suppliers{$id_supplier3} ),
"Supplier3 has late orders but $daysago4 > $daysago10 + 3days < today and $daysago10 <= now()-3+3 days"
);
isnt( exists( $suppliers{$id_supplier4} ), 1, "Supplier4 hasnt late orders" );
#Case 9 :With $estimateddeliverydatefrom = $daysago5 and $delay = 3
# $today < $daysago5 and $today > $today-5 -NOT LATE-
# $daysago5 + 2 days >= $daysago5 and $daysago5 < today - 3+2 -LATE-
# $daysago10 + 3 days < $daysago5 and $daysago10 < today -3+2-NOT LATE-
# quantityreceived = quantity -NOT LATE-
%suppliers =
C4::Bookseller::GetBooksellersWithLateOrders( 3, $daysago5, undef );
isnt( exists( $suppliers{$id_supplier1} ),
1, "$today < $daysago10 and $today > $today-3" );
ok(
exists( $suppliers{$id_supplier2} ),
"Supplier2 has late orders and $daysago5 + 2 days >= $daysago5 and $daysago5 < today - 3+2"
);
isnt(
exists( $suppliers{$id_supplier3} ),
1,
"Supplier2 has late orders but $daysago10 + 3 days < $daysago5 and $daysago10 < today -3+2 "
);
isnt( exists( $suppliers{$id_supplier4} ), 1, "Supplier4 hasnt late orders" );
#Test with $estimateddeliverydateto and $delay
#Case 10:With $estimateddeliverydateto = $daysago5 and $delay = 5
# today > $daysago5 today > now() -5 -NOT LATE-
# $daysago5 + 2 days > $daysago5 and $daysago5 > now() - 2+5 days -NOT LATE-
# $daysago10 + 3 days <= $daysago5 and $daysago10 <= now() - 3+5 days -LATE-
# quantityreceived = quantity -NOT LATE-
%suppliers =
C4::Bookseller::GetBooksellersWithLateOrders( 5, undef, $daysago5 );
isnt( exists( $suppliers{$id_supplier1} ),
1, "Supplier2 has late orders but today > $daysago5 today > now() -5" );
isnt(
exists( $suppliers{$id_supplier2} ),
1,
"Supplier2 has late orders but $daysago5 + 2 days > $daysago5 and $daysago5 > now() - 2+5 days"
);
ok(
exists( $suppliers{$id_supplier3} ),
"Supplier2 has late orders and $daysago10 + 3 days <= $daysago5 and $daysago10 <= now() - 3+5 days "
);
isnt( exists( $suppliers{$id_supplier4} ), 1, "Supplier4 hasnt late orders" );
#Case 11: With $estimateddeliverydatefrom =today-10 and $estimateddeliverydateto = today - 10
# $daysago10==$daysago10==$daysago10 -NOT LATE-
# $daysago10==$daysago10<$daysago5+2-NOT lATE-
# $daysago10==$daysago10 <$daysago10+3-LATE-
# quantityreceived = quantity -NOT LATE-
#Basket1 closedate -> $daysago10
$basket1info = {
basketno => $sample_basket1,
closedate => $daysago10,
};
ModBasket($basket1info);
%suppliers = C4::Bookseller::GetBooksellersWithLateOrders( undef, $daysago10,
$daysago10 );
ok( exists( $suppliers{$id_supplier1} ),
"Supplier1 has late orders and $daysago10==$daysago10==$daysago10 " )
;
isnt( exists( $suppliers{$id_supplier2} ),
1,
"Supplier2 has late orders but $daysago10==$daysago10<$daysago5+2" );
isnt( exists( $suppliers{$id_supplier3} ),
1,
"Supplier3 has late orders but $daysago10==$daysago10 <$daysago10+3" );
isnt( exists( $suppliers{$id_supplier4} ), 1, "Supplier4 hasnt late orders" );
#Case 12: closedate == $estimateddeliverydatefrom =today-10
%suppliers =
C4::Bookseller::GetBooksellersWithLateOrders( undef, $daysago10, undef );
ok( exists( $suppliers{$id_supplier1} ),
"Supplier1 has late orders and $daysago10==$daysago10 " );
#Case 13: closedate == $estimateddeliverydateto =today-10
%suppliers =
C4::Bookseller::GetBooksellersWithLateOrders( undef, undef, $daysago10 );
ok( exists( $suppliers{$id_supplier1} ),
"Supplier1 has late orders and $daysago10==$daysago10 " )
;
#End transaction
$dbh->rollback;
#field_filter filters the useless fields or foreign keys
#NOTE: all the fields of aqbookseller arent considered
#returns a cleaned structure
sub field_filter {
my ($struct) = @_;
for my $field (
'bookselleremail', 'booksellerfax',
'booksellerurl', 'othersupplier',
'currency', 'invoiceprice',
'listprice'
)
{
if ( grep { /^$field$/ } keys %$struct ) {
delete $struct->{$field};
}
}
return $struct;
}