use Number::Format qw(format_price);
use CGI;
use List::Util qw/min/;
-use C4::Dates qw/format_date format_date_in_iso/;
+use Koha::DateUtils;
+use Koha::Database;
use C4::Koha;
use C4::Context;
use C4::Auth;
use C4::Acquisition;
use C4::Budgets;
use C4::Debug;
-use C4::SQLHelper;
my $dbh = C4::Context->dbh;
my $searchfield = $input->param('searchfield');
my $budget_period_id = $input->param('budget_period_id');
my $op = $input->param('op')||"else";
-
-my $budget_period_hashref= $input->Vars;
#my $sort1_authcat = $input->param('sort1_authcat');
#my $sort2_authcat = $input->param('sort2_authcat');
+# get only the columns of aqbudgetperiods in budget_period_hashref
+my @columns = Koha::Database->new()->schema->source('Aqbudgetperiod')->columns;
+my $budget_period_hashref = { map { join(' ',@columns) =~ /$_/ ? ( $_ => $input->param($_) ) : () } keys($input->Vars) } ;
+$budget_period_hashref->{budget_period_startdate} = dt_from_string( $input->param('budget_period_startdate') );
+$budget_period_hashref->{budget_period_enddate} = dt_from_string( $input->param('budget_period_enddate') );
+
my $activepagesize = 20;
my $inactivepagesize = 20;
$searchfield =~ s/\,//g;
}
elsif ( $op eq 'add_validate' ) {
-## add or modify a budget period (confirmation)
+## add or modify a budget period (confirimation)
- ## update budget period data
+ ## update budget period data
if ( $budget_period_id ne '' ) {
$$budget_period_hashref{$_}||=0 for qw(budget_period_active budget_period_locked);
my $status=ModBudgetPeriod($budget_period_hashref);
# handle the actual duplication
elsif ( $op eq 'duplicate_budget' ){
die "please specify a budget period id\n" if( !defined $budget_period_id || $budget_period_id eq '' );
- my $startdate = $input->param('budget_period_startdate');
- my $enddate = $input->param('budget_period_enddate');
my $data = GetBudgetPeriod( $budget_period_id);
-
- $data->{'budget_period_startdate'} = $startdate;
- $data->{'budget_period_enddate'} = $enddate;
+ $data->{'budget_period_startdate'} = $budget_period_hashref->{budget_period_startdate};
+ $data->{'budget_period_enddate'} = $budget_period_hashref->{budget_period_enddate};
delete $data->{'budget_period_id'};
- my $new_budget_period_id = C4::SQLHelper::InsertInTable('aqbudgetperiods', $data);
+ my $new_budget_period_id = AddBudgetPeriod($data);
my $tree = GetBudgetHierarchy( $budget_period_id );
$orphan = 1;
}
+ # get only the columns of aqbudgets
+ my @columns = Koha::Database->new()->schema->source('Aqbudget')->columns;
+ my $new_entry = { map { join(' ',@columns) =~ /$_/ ? ( $_ => $$entry{$_} ) : () } keys($entry) };
# write it to db
- my $new_id = C4::SQLHelper::InsertInTable('aqbudgets', $entry);
+ my $new_id = AddBudget($new_entry);
$old_new{$old_id} = $new_id;
push @{$parent_children{$parent_id}}, $new_id if $orphan;
if( defined $parent_children{$old_id} ){
# tell my children my new id
for my $child ( @{$parent_children{$old_id}} ){
- C4::SQLHelper::UpdateInTable('aqcudgets', [ 'budget_id' => $child, 'budget_parent_id' => $new_id ]);
+ ModBudget( { 'budget_id' => $child, 'budget_parent_id' => $new_id } );
}
delete $parent_children{$old_id};
}
my $inactivepage = $input->param('ipage') || 1;
# Get active budget periods
my $results = GetBudgetPeriods(
- {budget_period_active => 1},
- [{budget_period_description => 0}]
+ { budget_period_active => 1 },
+ { -asc => 'budget_period_description' },
);
my $first = ( $activepage - 1 ) * $activepagesize;
my $last = min( $first + $activepagesize - 1, scalar @{$results} - 1, );
# Get inactive budget periods
$results = GetBudgetPeriods(
- {budget_period_active => 0},
- [{budget_period_enddate => 1}]
+ { budget_period_active => 0 },
+ { -desc => 'budget_period_enddate' },
);
$first = ( $inactivepage - 1 ) * $inactivepagesize;
use Modern::Perl;
-use Test::More tests => 25;
+use Test::More tests => 63;
-BEGIN {use_ok('C4::Budgets') }
+BEGIN {
+ use_ok('C4::Budgets')
+}
use C4::Context;
use C4::Biblio;
use C4::Bookseller;
#
# Budget Periods :
#
-my $bpid;
-my $budgetperiod;
-my $active_period;
-my $mod_status;
-my $del_status;
-ok($bpid=AddBudgetPeriod(
- { budget_period_startdate => '2008-01-01'
- , budget_period_enddate => '2008-12-31'
- , budget_description => "MAPERI"}),
- "AddBudgetPeriod with iso dates OK");
-
-ok($budgetperiod=GetBudgetPeriod($bpid),
- "GetBudgetPeriod($bpid) returned ".Dump($budgetperiod));
-ok(!GetBudgetPeriod(0) ,"GetBudgetPeriod(0) returned undef : noactive BudgetPeriod");
-$$budgetperiod{budget_period_active}=1;
-ok($mod_status=ModBudgetPeriod($budgetperiod),"ModBudgetPeriod OK");
-ok($active_period=GetBudgetPeriod(0),"GetBudgetPeriod(0) returned".Dump($active_period));
-ok(scalar(GetBudgetPeriods())>0,"GetBudgetPeriods OK");#Should at least return the Budget inserted
-ok($del_status=DelBudgetPeriod($bpid),"DelBudgetPeriod returned $del_status");
+
+is( AddBudgetPeriod(), undef, 'AddBugetPeriod without argument returns undef' );
+is( AddBudgetPeriod( { } ), undef, 'AddBugetPeriod with an empty argument returns undef' );
+my $bpid = AddBudgetPeriod({
+ budget_period_startdate => '2008-01-01',
+});
+is( $bpid, undef, 'AddBugetPeriod without end date returns undef' );
+$bpid = AddBudgetPeriod({
+ budget_period_enddate => '2008-12-31',
+});
+is( $bpid, undef, 'AddBugetPeriod without start date returns undef' );
+is( GetBudgetPeriod(0), undef ,'GetBudgetPeriod(0) returned undef : noactive BudgetPeriod' );
+my $budgetperiods = GetBudgetPeriods();
+is( @$budgetperiods, 0, 'GetBudgetPeriods returns the correct number of budget periods' );
+
+my $my_budgetperiod = {
+ budget_period_startdate => '2008-01-01',
+ budget_period_enddate => '2008-12-31',
+ budget_period_description => 'MAPERI',
+ budget_period_active => 0,
+};
+$bpid = AddBudgetPeriod($my_budgetperiod);
+isnt( $bpid, undef, 'AddBugetPeriod does not returns undef' );
+my $budgetperiod = GetBudgetPeriod($bpid);
+is( $budgetperiod->{budget_period_startdate}, $my_budgetperiod->{budget_period_startdate}, 'AddBudgetPeriod stores the start date correctly' );
+is( $budgetperiod->{budget_period_enddate}, $my_budgetperiod->{budget_period_enddate}, 'AddBudgetPeriod stores the end date correctly' );
+is( $budgetperiod->{budget_period_description}, $my_budgetperiod->{budget_period_description}, 'AddBudgetPeriod stores the description correctly' );
+is( $budgetperiod->{budget_period_active}, $my_budgetperiod->{budget_period_active}, 'AddBudgetPeriod stores active correctly' );
+is( GetBudgetPeriod(0), undef ,'GetBudgetPeriod(0) returned undef : noactive BudgetPeriod' );
+
+
+$my_budgetperiod = {
+ budget_period_startdate => '2009-01-01',
+ budget_period_enddate => '2009-12-31',
+ budget_period_description => 'MODIF_MAPERI',
+ budget_period_active => 1,
+};
+my $mod_status = ModBudgetPeriod($my_budgetperiod);
+is( $mod_status, undef, 'ModBudgetPeriod without id returns undef' );
+
+$my_budgetperiod->{budget_period_id} = $bpid;
+$mod_status = ModBudgetPeriod($my_budgetperiod);
+is( $mod_status, 1, 'ModBudgetPeriod returnis true' );
+$budgetperiod = GetBudgetPeriod($bpid);
+is( $budgetperiod->{budget_period_startdate}, $my_budgetperiod->{budget_period_startdate}, 'ModBudgetPeriod updates the start date correctly' );
+is( $budgetperiod->{budget_period_enddate}, $my_budgetperiod->{budget_period_enddate}, 'ModBudgetPeriod updates the end date correctly' );
+is( $budgetperiod->{budget_period_description}, $my_budgetperiod->{budget_period_description}, 'ModBudgetPeriod updates the description correctly' );
+is( $budgetperiod->{budget_period_active}, $my_budgetperiod->{budget_period_active}, 'ModBudgetPeriod upates active correctly' );
+isnt( GetBudgetPeriod(0), undef, 'GetBugetPeriods functions correctly' );
+
+
+$budgetperiods = GetBudgetPeriods();
+is( @$budgetperiods, 1, 'GetBudgetPeriods returns the correct number of budget periods' );
+is( $budgetperiods->[0]->{budget_period_id}, $my_budgetperiod->{budget_period_id}, 'GetBudgetPeriods returns the id correctly' );
+is( $budgetperiods->[0]->{budget_period_startdate}, $my_budgetperiod->{budget_period_startdate}, 'GetBudgetPeriods returns the start date correctly' );
+is( $budgetperiods->[0]->{budget_period_enddate}, $my_budgetperiod->{budget_period_enddate}, 'GetBudgetPeriods returns the end date correctly' );
+is( $budgetperiods->[0]->{budget_period_description}, $my_budgetperiod->{budget_period_description}, 'GetBudgetPeriods returns the description correctly' );
+is( $budgetperiods->[0]->{budget_period_active}, $my_budgetperiod->{budget_period_active}, 'GetBudgetPeriods returns active correctly' );
+
+is( DelBudgetPeriod($bpid), 1, 'DelBudgetPeriod returns true' );
+$budgetperiods = GetBudgetPeriods();
+is( @$budgetperiods, 0, 'GetBudgetPeriods returns the correct number of budget periods' );
+
#
# Budget :
#
-# Add A budget Period
-if (C4::Context->preference('dateformat') eq "metric"){
-ok($bpid=AddBudgetPeriod(
- { budget_period_startdate =>'01-01-2008'
- , budget_period_enddate =>'31-12-2008'
- , budget_description =>"MAPERI"}),
- "AddBudgetPeriod returned $bpid");
-} elsif (C4::Context->preference('dateformat') eq "us"){
-ok($bpid=AddBudgetPeriod(
- { budget_period_startdate =>'01-01-2008'
- , budget_period_enddate =>'12-31-2008'
- , budget_description =>"MAPERI"}),
- "AddBudgetPeriod returned $bpid");
-}
-else{
-ok($bpid=AddBudgetPeriod(
- {budget_period_startdate=>'2008-01-01'
- ,budget_period_enddate =>'2008-12-31'
- ,budget_description =>"MAPERI"
- }),
- "AddBudgetPeriod returned $bpid");
+is( AddBudget(), undef, 'AddBuget without argument returns undef' );
+my $budgets = GetBudgets();
+is( @$budgets, 0, 'GetBudgets returns the correct number of budgets' );
+
+$bpid = AddBudgetPeriod($my_budgetperiod);
+my $my_budget = {
+ budget_code => 'ABCD',
+ budget_amount => '123.132000',
+ budget_name => 'Periodiques',
+ budget_notes => 'This is a note',
+ budget_period_id => $bpid,
+};
+my $budget_id = AddBudget($my_budget);
+isnt( $budget_id, undef, 'AddBudget does not returns undef' );
+my $budget = GetBudget($budget_id);
+is( $budget->{budget_code}, $my_budget->{budget_code}, 'AddBudget stores the budget code correctly' );
+is( $budget->{budget_amount}, $my_budget->{budget_amount}, 'AddBudget stores the budget amount correctly' );
+is( $budget->{budget_name}, $my_budget->{budget_name}, 'AddBudget stores the budget name correctly' );
+is( $budget->{budget_notes}, $my_budget->{budget_notes}, 'AddBudget stores the budget notes correctly' );
+is( $budget->{budget_period_id}, $my_budget->{budget_period_id}, 'AddBudget stores the budget period id correctly' );
+
+
+$my_budget = {
+ budget_code => 'EFG',
+ budget_amount => '321.231000',
+ budget_name => 'Modified name',
+ budget_notes => 'This is a modified note',
+ budget_period_id => $bpid,
+};
+$mod_status = ModBudget($my_budget);
+is( $mod_status, undef, 'ModBudget without id returns undef' );
+
+$my_budget->{budget_id} = $budget_id;
+$mod_status = ModBudget($my_budget);
+is( $mod_status, 1, 'ModBudget returns true' );
+$budget = GetBudget($budget_id);
+is( $budget->{budget_code}, $my_budget->{budget_code}, 'ModBudget updates the budget code correctly' );
+is( $budget->{budget_amount}, $my_budget->{budget_amount}, 'ModBudget updates the budget amount correctly' );
+is( $budget->{budget_name}, $my_budget->{budget_name}, 'ModBudget updates the budget name correctly' );
+is( $budget->{budget_notes}, $my_budget->{budget_notes}, 'ModBudget updates the budget notes correctly' );
+is( $budget->{budget_period_id}, $my_budget->{budget_period_id}, 'ModBudget updates the budget period id correctly' );
+
+
+$budgets = GetBudgets();
+is( @$budgets, 1, 'GetBudgets returns the correct number of budgets' );
+is( $budgets->[0]->{budget_id}, $my_budget->{budget_id}, 'GetBudgets returns the budget id correctly' );
+is( $budgets->[0]->{budget_code}, $my_budget->{budget_code}, 'GetBudgets returns the budget code correctly' );
+is( $budgets->[0]->{budget_amount}, $my_budget->{budget_amount}, 'GetBudgets returns the budget amount correctly' );
+is( $budgets->[0]->{budget_name}, $my_budget->{budget_name}, 'GetBudgets returns the budget name correctly' );
+is( $budgets->[0]->{budget_notes}, $my_budget->{budget_notes}, 'GetBudgets returns the budget notes correctly' );
+is( $budgets->[0]->{budget_period_id}, $my_budget->{budget_period_id}, 'GetBudgets returns the budget period id correctly' );
+
+$budgets = GetBudgets( {budget_period_id => $bpid} );
+is( @$budgets, 1, 'GetBudgets With Filter OK' );
+$budgets = GetBudgets( {budget_period_id => $bpid}, {-asc => "budget_name"} );
+is( @$budgets, 1, 'GetBudgets With Order OK' );
+$budgets = GetBudgets( {budget_period_id => GetBudgetPeriod($bpid)->{budget_period_id}}, {-asc => "budget_name"} );
+is( @$budgets, 1, 'GetBudgets With Order Getting Active budgetPeriod OK');
-}
-my $budget_id;
-ok($budget_id=AddBudget(
- { budget_code => "ABCD"
- , budget_amount => "123.132"
- , budget_name => "Périodiques"
- , budget_notes => "This is a note"
- , budget_description=> "Serials"
- , budget_active => 1
- , budget_period_id => $bpid
- }
- ),
- "AddBudget returned $budget_id");
-#budget_code | varchar(30) | YES | | NULL | |
-#| budget_amount | decimal(28,6) | NO | | 0.000000 | |
-#| budget_id | int(11) | NO | PRI | NULL | |
-#| budget_branchcode | varchar(10) | YES | | NULL | |
-#| budget_parent_id | int(11) | YES | | NULL | |
-#| budget_name | varchar(80) | YES | | NULL | |
-#| budget_encumb | decimal(28,6) | YES | | 0.000000 | |
-#| budget_expend | decimal(28,6) | YES | | 0.000000 | |
-#| budget_notes | mediumtext | YES | | NULL | |
-#| timestamp | timestamp | NO | | CURRENT_TIMESTAMP | |
-#| budget_period_id | int(11) | YES | MUL | NULL | |
-#| sort1_authcat | varchar(80) | YES | | NULL | |
-#| sort2_authcat | varchar(80) | YES | | NULL | |
-#| budget_owner_id | int(11) | YES | | NULL | |
-#| budget_permission | int(1) | YES | | 0 | |
-
-my $budget;
-ok($budget=GetBudget($budget_id) ,"GetBudget OK");
-$budget_id = $budget->{budget_id};
-$$budget{budget_permission}=1;
-ok($mod_status=ModBudget($budget),"ModBudget OK");
-ok(GetBudgets()>0,
- "GetBudgets OK");
-ok(GetBudgets({budget_period_id=>$bpid})>0,
- "GetBudgets With Filter OK");
-ok(GetBudgets({budget_period_id=>$bpid},[{"budget_name"=>0}])>0,
- "GetBudgets With Order OK");
-ok(GetBudgets({budget_period_id=>GetBudgetPeriod($bpid)->{budget_period_id}},[{"budget_name"=>0}])>0,
- "GetBudgets With Order
- Getting Active budgetPeriod OK");
my $budget_name = GetBudgetName( $budget_id );
-is($budget_name, $budget->{budget_name}, "Test the GetBudgetName routine");
+is($budget_name, $my_budget->{budget_name}, "Test the GetBudgetName routine");
-my $budget_code = $budget->{budget_code};
+my $budget_code = $my_budget->{budget_code};
my $budget_by_code = GetBudgetByCode( $budget_code );
is($budget_by_code->{budget_id}, $budget_id, "GetBudgetByCode, check id");
-is($budget_by_code->{budget_notes}, 'This is a note', "GetBudgetByCode, check notes");
-
-my $second_budget_id;
-ok($second_budget_id=AddBudget(
- { budget_code => "ZZZZ",
- budget_amount => "500.00",
- budget_name => "Art",
- budget_notes => "This is a note",
- budget_description=> "Art",
- budget_active => 1,
- budget_period_id => $bpid,
- }
- ),
- "AddBudget returned $second_budget_id");
-
-my $budgets = GetBudgets({ budget_period_id => $bpid});
-ok($budgets->[0]->{budget_name} lt $budgets->[1]->{budget_name}, 'default sort order for GetBudgets is by name');
-
-ok($del_status=DelBudget($budget_id),
- "DelBudget returned $del_status");
+is($budget_by_code->{budget_notes}, $my_budget->{budget_notes}, "GetBudgetByCode, check notes");
+
+my $second_budget_id = AddBudget({
+ budget_code => "ZZZZ",
+ budget_amount => "500.00",
+ budget_name => "Art",
+ budget_notes => "This is a note",
+ budget_period_id => $bpid,
+});
+isnt( $second_budget_id, undef, 'AddBudget does not returns undef' );
+
+$budgets = GetBudgets( {budget_period_id => $bpid} );
+ok( $budgets->[0]->{budget_name} lt $budgets->[1]->{budget_name}, 'default sort order for GetBudgets is by name' );
+
+is( DelBudget($budget_id), 1, 'DelBudget returns true' );
+$budgets = GetBudgets();
+is( @$budgets, 1, 'GetBudgets returns the correct number of budget periods' );
+
# GetBudgetHierarchySpent and GetBudgetHierarchyOrdered
my $budget_period_total = 10_000;
my $budget_period_id = AddBudgetPeriod(
{
- budget_period_startdate => '2013-01-01',
- budget_period_enddate => '2014-12-31',
- budget_description => 'Budget Period',
- budget_period_active => 1,
- budget_period_total => $budget_period_total,
+ budget_period_startdate => '2013-01-01',
+ budget_period_enddate => '2014-12-31',
+ budget_period_description => 'Budget Period',
+ budget_period_active => 1,
+ budget_period_total => $budget_period_total,
}
);
my $budget_id1 = AddBudget(
{
budget_code => 'budget_1',
budget_name => 'budget_1',
- budget_active => 1,
budget_period_id => $budget_period_id,
budget_parent_id => undef,
budget_amount => $budget_1_total,
{
budget_code => 'budget_2',
budget_name => 'budget_2',
- budget_active => 1,
budget_period_id => $budget_period_id,
budget_parent_id => undef,
budget_amount => $budget_2_total,
{
budget_code => 'budget_11',
budget_name => 'budget_11',
- budget_active => 1,
budget_period_id => $budget_period_id,
budget_parent_id => $budget_id1,
budget_amount => $budget_11_total,
{
budget_code => 'budget_12',
budget_name => 'budget_12',
- budget_active => 1,
budget_period_id => $budget_period_id,
budget_parent_id => $budget_id1,
budget_amount => $budget_12_total,
{
budget_code => 'budget_111',
budget_name => 'budget_111',
- budget_active => 1,
budget_period_id => $budget_period_id,
budget_parent_id => $budget_id11,
- owner_id => 1,
+ budget_owner_id => 1,
budget_amount => $budget_111_total,
}
);
{
budget_code => 'budget_21',
budget_name => 'budget_21',
- budget_active => 1,
budget_period_id => $budget_period_id,
budget_parent_id => $budget_id2,
}