diff options
author | mark <mark> | 2010-07-01 01:53:50 +0000 |
---|---|---|
committer | mark <mark> | 2010-07-01 01:53:50 +0000 |
commit | de3bf373e97f6875e09fc17d99068a2716bf3b2d (patch) | |
tree | bf5d4908cb57519a99cb8db0266f40d671f9e170 /httemplate/edit | |
parent | 6643a544400f5bed64b75720fdaccb41f01d1e79 (diff) |
voip_cdr call rating by day and time, RT#4763
Diffstat (limited to 'httemplate/edit')
-rw-r--r-- | httemplate/edit/process/rate_time.cgi | 94 | ||||
-rw-r--r-- | httemplate/edit/rate_detail.html | 9 | ||||
-rw-r--r-- | httemplate/edit/rate_time.cgi | 44 |
3 files changed, 147 insertions, 0 deletions
diff --git a/httemplate/edit/process/rate_time.cgi b/httemplate/edit/process/rate_time.cgi new file mode 100644 index 000000000..48ed2739e --- /dev/null +++ b/httemplate/edit/process/rate_time.cgi @@ -0,0 +1,94 @@ +% if ( $error ) { +% $cgi->param('error', $error); +<% $cgi->redirect(popurl(2). "rate_time.cgi?". $cgi->query_string ) %> +% } else { +<% $cgi->redirect(popurl(3). "browse/rate_time.html" ) %> +% } +%# dumper_html(\%vars, \%old_ints, {$rate_time->intervals}) %> +<%init> +my $error = ''; +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); +my $ratetimenum = $cgi->param('ratetimenum'); +my $ratetimename = $cgi->param('ratetimename'); +my $delete = $cgi->param('delete'); + +my %vars = $cgi->Vars; +#warn Dumper(\%vars)."\n"; + +my $rate_time; + +my %old_ints; +if( $ratetimenum ) { + # editing + $rate_time = FS::rate_time->by_key($ratetimenum); + + # make a list of existing intervals that will be deleted + foreach ($rate_time->intervals) { + $old_ints{$_->intervalnum} = $_; + } + + if ( $delete ) { + $error = $rate_time->delete; + # intervals will be deleted later + } + elsif( $ratetimename ne $rate_time->ratetimename ) { + # the only case where the rate_time itself must be replaced + $rate_time->ratetimename($ratetimename); + $error = $rate_time->replace; + } +} +else { #!$ratetimenum, adding new + $rate_time = FS::rate_time->new({ ratetimename => $ratetimename }); + $error = $rate_time->insert; + $ratetimenum = $rate_time->ratetimenum; +} + +if(!$delete and !$error) { + foreach my $i (map { /stime(\d+)/ } keys(%vars)) { + my $stime = str2wtime($vars{"stime$i"}); + my $etime = str2wtime($vars{"etime$i"}); + next if !defined($stime) or !defined($etime); + #warn "$i: $stime-$etime"; + # try to avoid needlessly wiping and replacing intervals every + # time this is edited. + if( %old_ints ) { + my $this_int = qsearchs('rate_time_interval', + { ratetimenum => $ratetimenum, + stime => $stime, + etime => $etime, } ); + if($this_int) { + delete $old_ints{$this_int->intervalnum}; + #warn "not deleting $stime-$etime\n"; + next; #$i + } + } + my $new_int = FS::rate_time_interval->new({ ratetimenum => $ratetimenum, + stime => $stime, + etime => $etime, } ); + $error = $new_int->insert; + #warn "inserting $stime-$etime\n"; + last if $error; + } +} +if(!$error) { + foreach (values(%old_ints)) { + $error = $_->delete; + #warn "deleting ".$_->stime.' '.$_->etime."\n"; + last if $error; + } +} + +sub str2wtime { + my %days; + @days{qw(Sun Mon Tue Wed Thu Fri Sat)} = (0..6); + my $str = shift; + my ($d, $h, $m, $s, $ampm) = + ($str =~ /^(\w{3}) (\d{2}):(\d{2}):(\d{2}) (\w{2})$/); + return () if !$d; + $h += 24*$days{$d} + ($ampm eq 'PM' ? 12 : 0); + $m += 60*$h; + $s += 60*$m; + return $s; +} +</%init> diff --git a/httemplate/edit/rate_detail.html b/httemplate/edit/rate_detail.html index 869ace8d4..ec04e4cbb 100644 --- a/httemplate/edit/rate_detail.html +++ b/httemplate/edit/rate_detail.html @@ -5,6 +5,7 @@ 'labels' => { 'ratedetailnum' => 'Rate', #should hide... 'dest_regionname' => 'Region', 'dest_prefixes_short' => 'Prefix(es)', + 'rate_time_name' => 'Time period', 'min_included' => 'Included minutes/calls', 'conn_charge' => 'Connection charge', 'conn_sec' => 'For', @@ -16,8 +17,10 @@ { field=>'ratenum', type=>'hidden', }, { field=>'orig_regionnum', type=>'hidden', }, { field=>'dest_regionnum', type=>'hidden', }, + { field=>'ratetimenum', type=>'hidden', }, { field=>'dest_regionname', type=>'fixed', }, { field=>'dest_prefixes_short', type=>'fixed', }, + { field=>'rate_time_name', type=>'fixed', }, { field=>'min_included', type=>'text', size=>5 }, { field=>'conn_charge', type=>'money', size=>4 }, { field =>'conn_sec', @@ -42,6 +45,12 @@ }, ], + 'new_hashref_callback' => sub { + { ratenum => $cgi->param('ratenum'), + dest_regionnum => $cgi->param('dest_regionnum'), + ratetimenum => $cgi->param('ratetimenum'), + } + }, ) %> <%once> diff --git a/httemplate/edit/rate_time.cgi b/httemplate/edit/rate_time.cgi new file mode 100644 index 000000000..230aef82d --- /dev/null +++ b/httemplate/edit/rate_time.cgi @@ -0,0 +1,44 @@ +<% include("/elements/header.html","$action Time Period", menubar( + 'Rate plans' => "${p}browse/rate.cgi", + ) ) +%> + +<% include('/elements/error.html') %> + +<FORM METHOD="POST" ACTION="<% "${p}edit/process/rate_time.cgi" %>"> +<INPUT TYPE="hidden" NAME="ratetimenum" VALUE="<% $ratetimenum %>"> +<% ntable('#cccccc',2) %> +<TABLE> + <TR> + <TH ALIGN="right">Period name</TH> + <TD><INPUT TYPE="text" NAME="ratetimename" VALUE="<% $rate_time ? $rate_time->ratetimename : '' %>"></TD> + </TR> +</TABLE> +<% include('/elements/auto-table.html', + header => [ 'Start', 'End' ], + fields => [ 'stime', 'etime' ], + size => [ 18, 18 ], + maxl => [ 15, 15 ], + align => [ 'right', 'right' ], + data => \@data, + ) %> +<INPUT TYPE="submit" VALUE="<% $rate_time ? 'Apply changes' : 'Add period'%>"> +</FORM> +<BR> +<A HREF="<% "${p}edit/process/rate_time.cgi?ratetimenum=$ratetimenum;delete=1" %>">Delete this period</A> +<% include('/elements/footer.html') %> + +<%init> +my $ratetimenum = ($cgi->keywords)[0] || ''; +my $action = 'Add'; +my $rate_time; +my @data = (); + +if($ratetimenum) { + $action = 'Edit'; + $rate_time = qsearchs('rate_time', {ratetimenum => $ratetimenum}) + or die "ratetimenum $ratetimenum not found"; + @data = $rate_time->description; +} + +</%init> |