MT#8309 API billingfees logic

is_true is not necessary if not mangled by JSON::Types::bool
agranig/pbx-dev-map
Gerhard Jungwirth 12 years ago
parent b7eb095540
commit 2b4e5d0f61

@ -154,7 +154,6 @@ sub POST :Allow {
if($c->request->header('Content-Type') eq 'text/csv') {
$resource = $c->req->query_params;
$resource->{purge_existing} = JSON::Types::bool($resource->{purge_existing});
} else {
last unless $self->require_wellformed_json($c, 'application/json', $data);
$resource = JSON::from_json($data);
@ -180,63 +179,12 @@ sub POST :Allow {
last;
}
unless($data) {
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});
}
unless($zone) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'billing_zone_id'.");
last;
}
last unless $self->validate_form(
c => $c,
resource => $resource,
form => $form,
);
my $fee;
try {
$fee = $profile->billing_fees->create($resource);
} catch($e) {
$c->log->error("failed to create billing fee: $e"); # TODO: user, message, trace, ...
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Failed to create billing fee.");
last;
}
$guard->commit;
$c->response->status(HTTP_CREATED);
$c->response->header(Location => sprintf('%s%d', $self->dispatch_path, $fee->id));
$c->response->body(q());
last;
} else {
if ($data) {
# csv bulk upload
my $csv = Text::CSV_XS->new({allow_whitespace => 1, binary => 1, keep_meta_info => 1});
my @cols = @{ $c->config->{fees_csv}->{element_order} };
if ($self->is_true($resource->{purge_existing})) {
if ($resource->{purge_existing}) {
$profile->billing_fees->delete;
}
my @fails = ();
@ -294,7 +242,57 @@ sub POST :Allow {
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Internal Server Error");
last;
};
} 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});
}
unless($zone) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'billing_zone_id'.");
last;
}
last unless $self->validate_form(
c => $c,
resource => $resource,
form => $form,
);
my $fee;
try {
$fee = $profile->billing_fees->create($resource);
} catch($e) {
$c->log->error("failed to create billing fee: $e"); # TODO: user, message, trace, ...
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Failed to create billing fee.");
last;
}
$guard->commit;
$c->response->status(HTTP_CREATED);
$c->response->header(Location => sprintf('%s%d', $self->dispatch_path, $fee->id));
$c->response->body(q());
last;
}
}

Loading…
Cancel
Save