use Text::Template;
use HTML::Entities;
use Date::Format;
+use Date::Parse 'str2time';
use Number::Format 1.50;
use FS::SelfService qw(
access_info login_info login customer_info edit_info invoice
unprovision_svc change_pkg suspend_pkg domainselector
list_svcs list_svc_usage list_cdr_usage list_support_usage
myaccount_passwd list_invoices create_ticket get_ticket did_report
- mason_comp
+ adjust_ticket_priority
+ mason_comp port_graph
);
$template_dir = '.';
myaccount
tktcreate
tktview
+ ticket_priority
didreport
invoices
view_invoice
view_usage_details
view_cdr_details
view_support_details
+ view_port_graph
+ real_port_graph
change_password
process_change_password
customer_suspend_pkg
sub tktview {
get_ticket( 'session_id' => $session_id,
- 'ticket_id' => $cgi->param('ticket_id'),
- 'reply' => $cgi->param('reply'),
+ 'ticket_id' => ($cgi->param('ticket_id') || ''),
+ 'subject' => ($cgi->param('subject') || ''),
+ 'reply' => ($cgi->param('reply') || ''),
);
}
+sub ticket_priority {
+ my %values;
+ foreach ( $cgi->param ) {
+ if ( /^ticket(\d+)$/ ) {
+ # a 'ticket1001' param implies the existence of a 'priority1001' param
+ # but if that's empty, we need to send it as empty rather than forget
+ # it.
+ $values{$1} = $cgi->param("priority$1") || '';
+ }
+ }
+ $action = 'myaccount';
+ # this returns an updated customer_info for myaccount
+ adjust_ticket_priority( 'session_id' => $session_id,
+ 'values' => \%values );
+}
+
sub customer_order_pkg {
my $init_data = signup_info( 'customer_session_id' => $session_id );
return $init_data if ( $init_data->{'error'} );
my $result = part_svc_info(
'session_id' => $session_id,
- map { $_ => $cgi->param($_) } qw( pkgnum svcpart ),
+ map { $_ => $cgi->param($_) } qw( pkgnum svcpart svcnum ),
);
die $result->{'error'} if exists $result->{'error'} && $result->{'error'};
$action .= "_$1";
$result->{'numavail'} = $cgi->param('numavail');
+ $result->{'lnp'} = $cgi->param('lnp');
$result;
}
sub process_svc_phone {
my @bulkdid = $cgi->param('bulkdid');
my $phonenum = $cgi->param('phonenum');
-
- my $result = provision_phone (
- 'session_id' => $session_id,
- 'bulkdid' => [ @bulkdid ],
- 'countrycode' => '1',
- map { $_ => $cgi->param($_) } qw( pkgnum svcpart phonenum )
- );
+ my $lnp = $cgi->param('lnp');
+
+ my $result;
+ if($lnp) {
+ $result = provision_phone (
+ 'session_id' => $session_id,
+ 'countrycode' => '1',
+ map { $_ => $cgi->param($_) } qw( pkgnum svcpart phonenum
+ lnp_desired_due_date lnp_other_provider
+ lnp_other_provider_account )
+ );
+ } else {
+ $result = provision_phone (
+ 'session_id' => $session_id,
+ 'bulkdid' => [ @bulkdid ],
+ 'countrycode' => '1',
+ map { $_ => $cgi->param($_) } qw( pkgnum svcpart phonenum svcnum email forwarddst )
+ );
+ }
if ( exists $result->{'error'} && $result->{'error'} ) {
$action = 'provision_svc_phone';
return {
$cgi->Vars,
%{ part_svc_info( 'session_id' => $session_id,
- map { $_ => $cgi->param($_) } qw( pkgnum svcpart )
+ map { $_ => $cgi->param($_) } qw( pkgnum svcpart svcnum )
)
},
'error' => $result->{'error'},
sub view_usage {
list_svcs(
'session_id' => $session_id,
- 'svcdb' => [ 'svc_acct', 'svc_phone' ],
+ 'svcdb' => [ 'svc_acct', 'svc_phone', 'svc_port', ],
'ncancelled' => 1,
);
}
+sub real_port_graph {
+ my $svcnum = $cgi->param('svcnum');
+ my $res = port_graph(
+ 'session_id' => $session_id,
+ 'svcnum' => $svcnum,
+ 'beginning' => str2time($cgi->param('start')." 00:00:00"),
+ 'ending' => str2time($cgi->param('end')." 23:59:59"),
+ );
+ my @usage = @{$res->{'usage'}};
+ my $png = $usage[0]->{'png'};
+ { 'content' => $png, 'format' => 'png' };
+}
+
+sub view_port_graph {
+ my $svcnum = $cgi->param('svcnum');
+ { 'svcnum' => $svcnum,
+ 'start' => $cgi->param($svcnum.'_start'),
+ 'end' => $cgi->param($svcnum.'_end'),
+ }
+}
+
sub view_usage_details {
- list_svc_usage(
- 'session_id' => $session_id,
- 'svcnum' => $cgi->param('svcnum'),
- 'beginning' => $cgi->param('beginning') || '',
- 'ending' => $cgi->param('ending') || '',
- );
+ list_svc_usage(
+ 'session_id' => $session_id,
+ 'svcnum' => $cgi->param('svcnum'),
+ 'beginning' => $cgi->param('beginning') || '',
+ 'ending' => $cgi->param('ending') || '',
+ );
}
sub view_cdr_details {
: {};
$fill_in->{$_} = $access_info->{$_} foreach keys %$access_info;
- my $source = "$template_dir/$name.html";
- #warn "creating template for $source\n";
- my $template = new Text::Template( TYPE => 'FILE',
- SOURCE => $source,
- DELIMITERS => [ '<%=', '%>' ],
- UNTAINT => 1,
- )
- or die $Text::Template::ERROR;
-
+
if($result && ref($result) && $result->{'format'} && $result->{'content'}
&& $result->{'format'} eq 'csv') {
print $cgi->header('-expires' => 'now',
),
$result->{'content'};
}
+ elsif($result && ref($result) && $result->{'format'} && $result->{'content'}
+ && $result->{'format'} eq 'png') {
+ print $cgi->header('-expires' => 'now',
+ '-Content-Type' => 'image/png',
+ ),
+ $result->{'content'};
+ }
else {
+ my $source = "$template_dir/$name.html";
+ my $template = new Text::Template( TYPE => 'FILE',
+ SOURCE => $source,
+ DELIMITERS => [ '<%=', '%>' ],
+ UNTAINT => 1,
+ )
+ or die $Text::Template::ERROR;
+
my $data = $template->fill_in(
PACKAGE => 'FS::SelfService::_selfservicecgi',
HASH => $fill_in,