summaryrefslogtreecommitdiff
path: root/httemplate/edit
diff options
context:
space:
mode:
authormark <mark>2010-07-01 01:53:50 +0000
committermark <mark>2010-07-01 01:53:50 +0000
commitde3bf373e97f6875e09fc17d99068a2716bf3b2d (patch)
treebf5d4908cb57519a99cb8db0266f40d671f9e170 /httemplate/edit
parent6643a544400f5bed64b75720fdaccb41f01d1e79 (diff)
voip_cdr call rating by day and time, RT#4763
Diffstat (limited to 'httemplate/edit')
-rw-r--r--httemplate/edit/process/rate_time.cgi94
-rw-r--r--httemplate/edit/rate_detail.html9
-rw-r--r--httemplate/edit/rate_time.cgi44
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>