MT#4667 validate contact on contract create

On one hand, dont allow (peering,reseller)-contracts to
be created with a wrong contact (which has a reseller id).
On the other hand, dont preselect wrong contacts in the first
place (from created_objects)
agranig/rest
Gerhard Jungwirth 12 years ago committed by Andreas Granig
parent 096b5ebfc9
commit 938798943c

@ -249,6 +249,9 @@ sub peering_create :Chained('peering_list') :PathPart('create') :Args(0) {
my $posted = ($c->request->method eq 'POST');
my $params = {};
$params = $params->merge($c->session->{created_objects});
unless ($self->is_valid_noreseller_contact($c, $params->{contact}{id})) {
delete $params->{contact};
}
my $form = NGCP::Panel::Form::Contract::PeeringReseller->new;
$form->process(
posted => $posted,
@ -284,6 +287,12 @@ sub peering_create :Chained('peering_list') :PathPart('create') :Args(0) {
profile => $billing_profile,
contract => $contract,
);
if (defined $contract->contact->reseller_id) {
my $contact_id = $contract->contact->id;
die( ["Cannot use this contact (#$contact_id) for peering contracts.", "showdetails"] );
}
$c->session->{created_objects}->{contract} = { id => $contract->id };
delete $c->session->{created_objects}->{contact};
delete $c->session->{created_objects}->{billing_profile};
@ -360,6 +369,9 @@ sub reseller_create :Chained('reseller_list') :PathPart('create') :Args(0) {
my $posted = ($c->request->method eq 'POST');
my $params = {};
$params = $params->merge($c->session->{created_objects});
unless ($self->is_valid_noreseller_contact($c, $params->{contact}{id})) {
delete $params->{contact};
}
my $form = NGCP::Panel::Form::Contract::PeeringReseller->new;
$form->process(
posted => $posted,
@ -395,6 +407,12 @@ sub reseller_create :Chained('reseller_list') :PathPart('create') :Args(0) {
profile => $billing_profile,
contract => $contract,
);
if (defined $contract->contact->reseller_id) {
my $contact_id = $contract->contact->id;
die( ["Cannot use this contact (#$contact_id) for reseller contracts.", "showdetails"] );
}
$c->session->{created_objects}->{contract} = { id => $contract->id };
delete $c->session->{created_objects}->{contact};
delete $c->session->{created_objects}->{billing_profile};
@ -415,6 +433,19 @@ sub reseller_create :Chained('reseller_list') :PathPart('create') :Args(0) {
$c->stash(form => $form);
}
sub is_valid_noreseller_contact {
my ($self, $c, $contact_id) = @_;
my $contact = $c->model('DB')->resultset('contacts')->search_rs({
'id' => $contact_id,
'reseller_id' => undef,
})->first;
if( $contact ) {
return 1;
} else {
return 0;
}
}
__PACKAGE__->meta->make_immutable;
1;

Loading…
Cancel
Save