MT#14653 Don't delete billing_profile_id from API form for HTML::Formhandler

Change-Id: I8eebdf82caf18923f05c868f0413c23db4777814
changes/49/2449/3
Irina Peshinskaya 10 years ago
parent 21764a52c3
commit 4ff9e340c0

@ -207,28 +207,8 @@ sub POST :Allow {
} else {
delete $resource->{purge_existing};
my $form = $self->get_form($c);
my $zone;
# in case of implicit zone declaration (name/detail instead of id),
# find or create the zone
if(!defined $resource->{billing_zone_id} &&
defined $resource->{billing_zone_zone} &&
defined $resource->{billing_zone_detail}) {
$zone = $profile->billing_zones->find({
zone => $resource->{billing_zone_zone},
detail => $resource->{billing_zone_detail},
});
$zone = $profile->billing_zones->create({
zone => $resource->{billing_zone_zone},
detail => $resource->{billing_zone_detail},
}) unless $zone;
$resource->{billing_zone_id} = $zone->id;
delete $resource->{billing_zone_zone};
delete $resource->{billing_zone_detail};
} elsif(defined $resource->{billing_zone_id}) {
$zone = $profile->billing_zones->find($resource->{billing_zone_id});
}
my $zone = $self->get_billing_zone($c,$profile,$resource);
unless($zone) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'billing_zone_id'.");
last;

@ -98,41 +98,16 @@ sub update_fee {
$reseller_id = $c->user->contract->contact->reseller_id;
}
$form //= $self->get_form($c);
# TODO: for some reason, formhandler lets missing profile/zone id
my $billing_profile_id = $resource->{billing_profile_id} // undef;
# in case of implicit zone declaration (name/detail instead of id),
# find or create the zone
my $profile;
if(!defined $resource->{billing_zone_id} &&
defined $resource->{billing_profile_id} &&
defined $resource->{billing_zone_zone} &&
defined $resource->{billing_zone_detail}) {
$profile = $c->model('DB')->resultset('billing_profiles')->find($resource->{billing_profile_id});
if($profile) {
my $zone = $profile->billing_zones->find({
zone => $resource->{billing_zone_zone},
detail => $resource->{billing_zone_detail},
});
$zone = $profile->billing_zones->create({
zone => $resource->{billing_zone_zone},
detail => $resource->{billing_zone_detail},
}) unless $zone;
$resource->{billing_zone_id} = $zone->id;
delete $resource->{billing_zone_zone};
delete $resource->{billing_zone_detail};
}
}
$resource->{billing_zone_id} //= undef;
return unless $self->validate_form(
c => $c,
form => $form,
resource => $resource,
exceptions => ['billing_profile_id'],
);
$resource->{billing_profile_id} = $billing_profile_id;
my $profile;
if(!defined $resource->{billing_profile_id}) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'billing_profile_id'");
return;
@ -149,10 +124,8 @@ sub update_fee {
}
}
my $zone = $self->get_billing_zone($c,$profile,$resource);
if($old_resource->{billing_zone_id} != $resource->{billing_zone_id}) {
my $zone = $c->model('DB')->resultset('billing_zones')
->search(billing_profile_id => $resource->{billing_profile_id})
->find($resource->{billing_zone_id});
unless($zone) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'billing_zone_id'");
return;
@ -163,6 +136,40 @@ sub update_fee {
return $fee;
}
sub get_billing_zone{
my($self,$c,$profile,$resource) = @_;
if( (!defined $profile) && defined $resource->{billing_profile_id} ){
$profile = $c->model('DB')->resultset('billing_profiles')->find($resource->{billing_profile_id});
}
if(!defined $profile){
$c->log->debug("in get_billing_zone: no profile;");
return;
}
my $zone;
# in case of implicit zone declaration (name/detail instead of id),
# find or create the zone
if( (!defined $resource->{billing_zone_id}) &&
defined $resource->{billing_zone_zone} &&
defined $resource->{billing_zone_detail} ) {
$zone = $profile->billing_zones->find({
zone => $resource->{billing_zone_zone},
detail => $resource->{billing_zone_detail},
});
$zone = $profile->billing_zones->create({
zone => $resource->{billing_zone_zone},
detail => $resource->{billing_zone_detail},
}) unless $zone;
delete $resource->{billing_zone_zone};
delete $resource->{billing_zone_detail};
$resource->{billing_zone_id} = $zone->id;
}elsif(defined $resource->{billing_zone_id}) {
$zone = $profile->billing_zones->find($resource->{billing_zone_id});
}
return $zone;
}
1;
# vim: set tabstop=4 expandtab:

@ -31,7 +31,7 @@ $fake_data->set_data_from_script({
offpeak_follow_rate => 0.5,
offpeak_follow_interval => 30,
},
'query' => ['billing_zone_id'],
'query' => ['billing_zone_id','destination','direction','billing_profile_id'],
},
});
my $test_machine = Test::Collection->new(

@ -29,7 +29,7 @@ $fake_data->set_data_from_script({
zone => "apitestzone",
detail => "api_test zone",
},
'query' => ['zone'],
'query' => ['zone','billing_profile_id'],
},
});

@ -386,7 +386,6 @@ sub search_item{
if($self->searched->{$collection_name}){
return @{$self->searched->{$collection_name}};
}
$self->test_machine->name($collection_name);
my $query_string = join('&', map {
my @deep_keys = ('ARRAY' eq ref $_) ? @$_:($_);
my $field_name = ( @deep_keys > 1 ) ? shift @deep_keys : $deep_keys[0];
@ -398,7 +397,11 @@ sub search_item{
$field_name.'='.$search_value;
} @{$item->{query}}
);
my $name_prev = $self->test_machine->{name};
$name_prev //= $collection_name;
$self->test_machine->name($collection_name);
my($res, $content, $req) = $self->test_machine->check_item_get($self->test_machine->get_uri_get($query_string));
$self->test_machine->name($name_prev);
#time for memoize?
$self->searched->{$collection_name} = [$res, $content, $req];
return ($res, $content, $req);

Loading…
Cancel
Save