You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
200 lines
6.3 KiB
200 lines
6.3 KiB
package NGCP::Panel::Utils::Reseller;
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Sipwise::Base;
|
|
use NGCP::Panel::Utils::DateTime;
|
|
|
|
sub create_email_templates{
|
|
my %params = @_;
|
|
my($c, $reseller) = @params{qw/c reseller/};
|
|
|
|
foreach ( $c->model('DB')->resultset('email_templates')->search_rs({ 'reseller_id' => undef })->all){
|
|
my $email_template = { $_->get_inflated_columns };
|
|
delete $email_template->{id};
|
|
$email_template->{reseller_id} = $reseller->id;
|
|
$c->model('DB')->resultset('email_templates')->create($email_template);
|
|
}
|
|
}
|
|
|
|
sub check_reseller_create_item {
|
|
my ($c,$reseller_id,$err_code) = @_;
|
|
#my ($c,$reseller_id,$err_code) = @params{qw/c reseller_id err_code/};
|
|
|
|
my $schema = $c->model('DB');
|
|
if (!defined $err_code || ref $err_code ne 'CODE') {
|
|
$err_code = sub { return 0; };
|
|
}
|
|
|
|
if ($c->user->roles eq "admin") {
|
|
if (defined $reseller_id) {
|
|
my $reseller = $schema->resultset('resellers')->find($reseller_id);
|
|
unless ($reseller) {
|
|
return 0 unless &{$err_code}("Invalid reseller ID.");
|
|
}
|
|
} else {
|
|
#ok
|
|
}
|
|
} elsif($c->user->roles eq "reseller") {
|
|
if (defined $reseller_id) {
|
|
my $reseller = $schema->resultset('resellers')->find($reseller_id);
|
|
unless ($reseller) {
|
|
return 0 unless &{$err_code}("Invalid reseller ID.");
|
|
} else {
|
|
if ($c->user->reseller_id != $reseller->id) {
|
|
return 0 unless &{$err_code}("Reseller ID other than the user's reseller ID is not allowed.");
|
|
}
|
|
}
|
|
} else {
|
|
return 0 unless &{$err_code}("Undefined reseller ID not allowed.");
|
|
}
|
|
} else {
|
|
return 0 unless &{$err_code}("Creating items associated with a reseller is allowed for admin and reseller users only.");
|
|
}
|
|
return 1;
|
|
|
|
}
|
|
|
|
sub check_reseller_update_item {
|
|
my ($c,$new_reseller_id,$old_reseller_id,$err_code) = @_;
|
|
#my ($c,$new_reseller_id,$old_reseller_id,$err_code) = @params{qw/c new_reseller_id old_reseller_id err_code/};
|
|
|
|
my $schema = $c->model('DB');
|
|
if (!defined $err_code || ref $err_code ne 'CODE') {
|
|
$err_code = sub { return 0; };
|
|
}
|
|
|
|
if ($c->user->roles eq "admin") {
|
|
if (defined $new_reseller_id) {
|
|
if (defined $old_reseller_id) {
|
|
if ($new_reseller_id != $old_reseller_id) {
|
|
return 0 unless &{$err_code}("Changing the reseller ID is not allowed.");
|
|
}
|
|
} else {
|
|
return 0 unless &{$err_code}("Cannot set a reseller ID if it was unset before.");
|
|
}
|
|
} else {
|
|
if (defined $old_reseller_id) {
|
|
#ok
|
|
} else {
|
|
#ok
|
|
}
|
|
}
|
|
} elsif($c->user->roles eq "reseller") {
|
|
if (defined $new_reseller_id) {
|
|
if (defined $old_reseller_id) {
|
|
if ($new_reseller_id != $old_reseller_id) {
|
|
return 0 unless &{$err_code}("Changing the reseller ID is not allowed.");
|
|
}
|
|
} else {
|
|
return 0 unless &{$err_code}("Cannot set the reseller ID if it was unset before.");
|
|
}
|
|
} else {
|
|
if (defined $old_reseller_id) {
|
|
return 0 unless &{$err_code}("Changing the reseller ID is not allowed.");
|
|
} else {
|
|
return 0 unless &{$err_code}("Updating items not associated with a reseller is not allowed.");
|
|
}
|
|
}
|
|
} else {
|
|
return 0 unless &{$err_code}("Updating items associated with a reseller is allowed for admin and reseller users only.");
|
|
}
|
|
return 1;
|
|
|
|
}
|
|
|
|
sub check_reseller_delete_item {
|
|
my ($c,$reseller_id,$err_code) = @_;
|
|
#my ($c,$reseller_id,$err_code) = @params{qw/c reseller_id err_code/};
|
|
|
|
my $schema = $c->model('DB');
|
|
if (!defined $err_code || ref $err_code ne 'CODE') {
|
|
$err_code = sub { return 0; };
|
|
}
|
|
|
|
if ($c->user->roles eq "admin") {
|
|
#ok
|
|
} elsif($c->user->roles eq "reseller") {
|
|
if (defined $reseller_id) {
|
|
if ($c->user->reseller_id != $reseller_id) {
|
|
return 0 unless &{$err_code}("Deleting items with a reseller ID other than the user's reseller ID is not allowed.");
|
|
}
|
|
} else {
|
|
return 0 unless &{$err_code}("Deleting items with undefined reseller ID not allowed.");
|
|
}
|
|
} else {
|
|
return 0 unless &{$err_code}("Deleting items associated with a reseller is allowed for admin and reseller users only.");
|
|
}
|
|
return 1;
|
|
|
|
}
|
|
sub _handle_reseller_status_change {
|
|
my ($c, $reseller) = @_;
|
|
|
|
my $contract = $reseller->contract;
|
|
$contract->update({ status => $reseller->status });
|
|
NGCP::Panel::Utils::Contract::recursively_lock_contract(
|
|
c => $c,
|
|
contract => $contract,
|
|
);
|
|
|
|
if($reseller->status eq "terminated") {
|
|
#delete ncos_levels
|
|
$reseller->ncos_levels->delete_all;
|
|
#delete voip_number_block_resellers
|
|
$reseller->voip_number_block_resellers->delete_all;
|
|
#delete voip_sound_sets
|
|
$reseller->voip_sound_sets->delete_all;
|
|
#delete voip_rewrite_rule_sets
|
|
$reseller->voip_rewrite_rule_sets->delete_all;
|
|
#delete autoprov_devices
|
|
$reseller->autoprov_devices->delete_all;
|
|
$reseller->email_templates->delete_all;
|
|
$reseller->emergency_containers->search_related_rs('emergency_mappings')->delete_all;
|
|
$reseller->emergency_containers->delete_all;
|
|
$reseller->voip_intercepts->delete_all;
|
|
$reseller->time_sets->delete_all;
|
|
}
|
|
}
|
|
|
|
sub get_subscribers_count {
|
|
my ($c, $reseller) = @_;
|
|
|
|
my $count = $reseller->search_related('contacts', {
|
|
'voip_subscribers.status' => { -not_in => ['terminated'] }
|
|
},{
|
|
join => { contracts => 'voip_subscribers' },
|
|
})->count;
|
|
|
|
return $count;
|
|
}
|
|
|
|
|
|
1;
|
|
|
|
=head1 NAME
|
|
|
|
NGCP::Panel::Utils::Reseller
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
A temporary helper to manipulate resellers data
|
|
|
|
=head1 METHODS
|
|
|
|
=head2 create_email_templates
|
|
|
|
Apply default email templates to newly created reseller
|
|
|
|
=head1 AUTHOR
|
|
|
|
Irina Peshinskaya
|
|
|
|
=head1 LICENSE
|
|
|
|
This library is free software. You can redistribute it and/or modify
|
|
it under the same terms as Perl itself.
|
|
|
|
=cut
|
|
# vim: set tabstop=4 expandtab:
|