diff options
Diffstat (limited to 'httemplate/edit')
-rwxr-xr-x | httemplate/edit/process/usage_elec_manual_input.cgi | 225 | ||||
-rwxr-xr-x | httemplate/edit/usage_elec_manual_input.cgi | 213 |
2 files changed, 438 insertions, 0 deletions
diff --git a/httemplate/edit/process/usage_elec_manual_input.cgi b/httemplate/edit/process/usage_elec_manual_input.cgi new file mode 100755 index 000000000..1a62c3937 --- /dev/null +++ b/httemplate/edit/process/usage_elec_manual_input.cgi @@ -0,0 +1,225 @@ +% +%$cgi->param('svcnum') =~ /^(\d*)$/ or die "Illegal svcnum!"; +%my $svcnum =$1; +%$svcnum = $cgi->param('svcnum'); +svcnum = <% $svcnum %><br> +% +%my $old = qsearchs('svc_external',{'svcnum'=>$svcnum}) if $svcnum; +% +% +%### this is the field name for usage_elec with the exception of +%### prev_date, curr_date, _date +%my @field_name = qw / prev_read curr_read tdsp +% meter_multiplier total_usage measured_demand +% billed_demand svcnum meter_number /; +%my ($prev_date, $curr_date, $_date); +% +%my %usage_hash = ( +% map { +% ($_, scalar($cgi->param($_))) +% } ( @field_name ) +% ); +% +% my $error = ''; +% +% # Some general rules regarding the data +% # prev_date, curr_date - +% # 8 digit in format of yyyymmdd (y-year m-month d-date) +% # prev_read, curr_read - positive interger. curr_read > prev_read +% # tdsp - an dollar amount w/wo cent +% # meter_multiplier - positive integer +% # total_usage - +% # should equal (total_usage = (prev_read-curr_read) * meter_multiplier +% # unless meter multiplier ignore value is set +% # measured_demand - positive integer +% # billed_demand - positive integer +% # meter_number - alpha numeric value +% +% # prev_date, curr_date - +% # 8 digit in format of yyyymmdd (y-year m-month d-date) +% my ($pd, $cd) = ($cgi->param('prev_date'),$cgi->param('curr_date')); +% if ( $pd =~ /^(\d{4})(\d{2})(\d{2})$/ ) { +% my ($y,$m,$d) = ($1,$2,$3); +% if ($m < 01 || $m > 12 || $d < 01 || $d > 31) { +% $error = "error: previous date '$pd' must follow the rule" +% ." of being 8 digit in format of yyyymmdd (y-year m-month d-date)"; +% $cgi->param('error', $error); +% print $cgi->redirect(popurl(2). "usage_elec_manual_input.cgi?" +% . $cgi->query_string ); +% } +% } +% else { +% $error = "error: previous date '$pd' must follow the rule" +% ." of being 8 digit in format of yyyymmdd (y-year m-month d-date)"; +% $cgi->param('error', $error); +% print $cgi->redirect(popurl(2). "usage_elec_manual_input.cgi?" +% . $cgi->query_string ); +% } +% if ( ($cd =~ /^(\d{4})(\d{2})(\d{2})$/) ) { +% my ($y,$m,$d) = ($1,$2,$3); +% if ($m < 01 || $m > 12 || $d < 01 || $d > 31) { +% $error = "error: previous date '$cd' must follow the rule" +% ." of being 8 digit in format of yyyymmdd (y-year m-month d-date)"; +% $cgi->param('error', $error); +% print $cgi->redirect(popurl(2). "usage_elec_manual_input.cgi?" +% . $cgi->query_string ); +% } +% } +% else { +% $error = "error: previous date '$cd' must follow the rule" +% ." of being 8 digit in format of yyyymmdd (y-year m-month d-date)"; +% $cgi->param('error', $error); +% print $cgi->redirect(popurl(2). "usage_elec_manual_input.cgi?" +% . $cgi->query_string ); +% } +% +% +% my $multiplier_ignore_flag = $cgi->param('ignore_meter_multiplier'); +% +% # check prev_read and curr_read +% my ($pr, $cr) = ($usage_hash{'prev_read'},$usage_hash{'curr_read'}); +% if ($pr =~ /^\d+$/ && $cr =~ /^\d+$/) { +% # prev and curr are integer +% if ( ($pr > $cr) && (!$multiplier_ignore_flag) ) { +% # prev > current .. this is not possible unless meter change +% $error = "error: previous reading '$pr' is greater than current reading" +% ." '$cr'\n"; +% $cgi->param('error', $error); +% print $cgi->redirect(popurl(2). "usage_elec_manual_input.cgi?" +% . $cgi->query_string ); +% } +% } +% else { +% $error = "error: previous reading '$pr' or current reading '$cr'" +% ." need to follow the simple rule of being a positive integer.\n"; +% $cgi->param('error', $error); +% print $cgi->redirect(popurl(2). "usage_elec_manual_input.cgi?" +% . $cgi->query_string ); +% } +% +% # tdsp - an dollar amount w/wo cent +% my $tdsp = $usage_hash{'tdsp'}; +% if ( $tdsp !~ /^(\d+|\d+\.\d{2})$/ ) { +% $error = "error: tdsp '$tdsp' must follow the rule<br>" +% ." of being a dollar amount w/wo cent value.<br>"; +% $cgi->param('error', $error); +% print $cgi->redirect(popurl(2). "usage_elec_manual_input.cgi?" +% . $cgi->query_string ); +% } +% +% # meter_multiplier - positive integer +% my $mm = $usage_hash{'meter_multiplier'}; +% #if ( ($mm < 0) || ($mm !~ /^\d+$/) ) { +% if ( ($mm < 0) || ($mm !~ /^\d+\.{0,1}\d*$/) ) { +% $error = "error: meter multiplier '$mm' must follow the rule<br>" +% ." of being a positive integer.<br>"; +% $cgi->param('error', $error); +% print $cgi->redirect(popurl(2). "usage_elec_manual_input.cgi?" +% . $cgi->query_string ); +% } +% +% # total_usage - +% # should equal (total_usage = (curr_read-prev_read) * meter_multiplier +% # unless meter multiplier ignore value is set +% my $input_tu = $usage_hash{'total_usage'}; +% my $tu = ($cr-$pr)*$mm; +% if ( ( ($tu != $input_tu) && (! $multiplier_ignore_flag)) ) { +% # total usage didn't equal formula and there were no ignore set +% $error = "error: total usage '$input_tu' '$tu' must follow the formula<br>" +% ." total_usage = (current_reading - previous_reading) * meter_multiplier<br>" +% ." unless the meter multiplier ignore flag '$multiplier_ignore_flag' is set.<br>"; +% $cgi->param('error', $error); +% print $cgi->redirect(popurl(2). "usage_elec_manual_input.cgi?" +% . $cgi->query_string ); +% } +% +% # measured_demand - positive integer +% my $md = $usage_hash{'measured_demand'}; +% if ( ($md < 0) || ($md !~ /^\d+$/) ) { +% $error = "error: measured demand '$md' must follow the rule<br>" +% ." of being a positive integer.<br>"; +% $cgi->param('error', $error); +% print $cgi->redirect(popurl(2). "usage_elec_manual_input.cgi?" +% . $cgi->query_string ); +% } +% +% # billed_demand - positive integer +% my $bd = $usage_hash{'billed_demand'}; +% if ( ($bd < 0) || ($bd !~ /^\d+$/) ) { +% $error = "error: billed demand '$bd' must follow the rule<br>" +% ." of being a positive integer.<br>"; +% $cgi->param('error', $error); +% print $cgi->redirect(popurl(2). "usage_elec_manual_input.cgi?" +% . $cgi->query_string ); +% } +% +% # meter_number - alpha numeric value +% my $mn = $usage_hash{'meter_number'}; +% if ( $mn !~ /^[a-z0-9]+$/i ) { +% $error = "error: meter number '$mn' must follow the rule<br>" +% ." of being a alpha numeric value.<br>"; +% $cgi->param('error', $error); +% print $cgi->redirect(popurl(2). "usage_elec_manual_input.cgi?" +% . $cgi->query_string ); +% } +% +% +%# convert the field date to it strtime +%$prev_date = FS::usage_elec::to_usage_elec_time($cgi->param('prev_date')); +%unless ($prev_date) { +% $error = "error: unable to convert prev_date ".$cgi->param('prev_date') +% ." to a usable time for usage_elec\n"; +% $cgi->param('error', $error); +% print $cgi->redirect(popurl(2). "usage_elec_manual_input.cgi?" +% . $cgi->query_string ); +%} +% +%$curr_date = FS::usage_elec::to_usage_elec_time($cgi->param('curr_date')); +%unless ($curr_date) { +% $error = "error: unable to convert curr_date ".$cgi->param('curr_date') +% ." to a usable time for usage_elec\n"; +% $cgi->param('error', $error); +% print $cgi->redirect(popurl(2). "usage_elec_manual_input.cgi?" +% . $cgi->query_string ); +%} +% +%$_date = time; +% +%$usage_hash{prev_date} = $prev_date; +%$usage_hash{curr_date} = $curr_date; +%$usage_hash{_date} = $_date; +% +%my $new = new FS::usage_elec( \%usage_hash ); +% +%if ( $svcnum ) { +% $error = $new->insert_usage; +%} else { +% $error = "error: can't insert data into usage_elec table without a " +% ."service number\n" +%} +% +%if ($error) { +% # handle can't insert data into usage_elec +% $cgi->param('error', $error); +% print $cgi->redirect(popurl(2). "usage_elec_manual_input.cgi?" +% . $cgi->query_string ); +%} else { +% # look like the data has been inserted into usage_elec successfully +% # now let generate the bill +% $error = FS::usage_elec::billing_call($new); +% if ($error) { +% # handle can't execute billing +% $error = "error: Execution of billing failed.\n" +% ."$error"; +% # delete the usage_elec that was just entered because billing failed +% $new->delete; +% $cgi->param('error', $error); +% print $cgi->redirect(popurl(2). "usage_elec_manual_input.cgi?" +% . $cgi->query_string ); +% } +% +% print $cgi->redirect(popurl(3). "view/svc_external.cgi?$svcnum"); +%} +% +% + diff --git a/httemplate/edit/usage_elec_manual_input.cgi b/httemplate/edit/usage_elec_manual_input.cgi new file mode 100755 index 000000000..7f9d9fa72 --- /dev/null +++ b/httemplate/edit/usage_elec_manual_input.cgi @@ -0,0 +1,213 @@ +%my $debug=0; # toggle debug +%my( $svcnum, $pkgnum, $svcpart, $part_svc, $svc_external ); +%my @field_descriptions = ( 'prev date', 'curr date', 'prev reading', +% 'curr reading', 'tdsp', 'meter mult', +% 'total usage', 'measured demand', 'billed demand', +% 'svcnum', 'entry date', 'meter number' ); +%my @field_name = qw / prev_date curr_date prev_read curr_read tdsp +% meter_multiplier total_usage measured_demand +% billed_demand svcnum _date meter_number /; +%my $date_exception = '(prev_date|curr_date|_date)'; +% +%if ( $cgi->param('error') ) { +% ### handle error call +% $svcnum = $cgi->param('svcnum'); +%} +%else { +% +% my($query) = $cgi->keywords; +% $query =~ /^(\d+)$/ or die "unparsable svcnum"; +% $svcnum=$1; +% +%} +% +%# this is sample data for print in case no previous record of usage_elec +%my @sample_data = ( '20070201', '20070228', '10000', '100100', '76.50', +% '5', '500', '179', '220', "$svcnum", 'NA', '030234972LM'); +% +%### this is where i start +%### +%### let gather all the info from usage_elec for the particular 'svcnum' +%### +%my $p1 = popurl(1); +% +%print qq!<FONT SIZE="+1" COLOR="#ff0000">Error: !, $cgi->param('error'), +% "</FONT>" +% if $cgi->param('error'); +% +%print qq!<FORM ACTION="${p1}process/usage_elec_manual_input.cgi" METHOD=POST>!; +% +%# print header +%print header("Manually Adding Record to usage_elec Table", ''); +% +%#display +%# +%# +<TABLE BORDER=1> +% +% # -ctran 04/10/08 +% # change getting previous 10 record to 13 so we can see at least 1 year +% # worth of transaction +% # get the previous 13 usage_elec items +% my @usage_obj = FS::usage_elec::query_usage($svcnum, 13); +% +% # print the heading +% print "<TR bgcolor=#88b2ce class='maintitle'>" +% . join("\n", map("<TH>" . $_ . "</TH>", @field_descriptions)) +% . "</TR>\n"; +% +% if (@usage_obj) { +% foreach my $usage (@usage_obj) { +% # fill @usage_ele with data order by @field_name +% my @usage_ele = (); +% foreach my $field (@field_name) { +% if ( $field =~ /$date_exception/ ) { +% # exception handling of converting time to string +% push(@usage_ele,time2str("%Y%m%d",$usage->$field)); +% } +% else { +%#debug: field= <% $field %> = <% $usage->$field %><BR> +% push(@usage_ele, $usage->$field); +% } +% } +% +% print "<TR bgcolor=#e8e8ea class='mainbody'>" +% . join("\n", map("<TD>" . $_ . "</TD>", @usage_ele)) +% . "</TR>\n"; +% } +% } +% +% ### +% ### gathering pre-filled information +% ### +% +% my ($h_prev_date, $h_prev_read, $h_tdsp, $h_meter_multiplier, +% $h_measured_demand, $h_billed_demand, $h_svcnum, $h_meter_number); +% +% if (@usage_obj) { +% # fill in all the history data +% my $lindex = $#usage_obj; +% $h_prev_date = time2str("%Y%m%d",$usage_obj[$lindex]->curr_date); +% $h_prev_read = $usage_obj[$lindex]->curr_read; +% $h_tdsp = $usage_obj[$lindex]->tdsp; +% $h_meter_multiplier = $usage_obj[$lindex]->meter_multiplier; +% $h_measured_demand = $usage_obj[$lindex]->measured_demand; +% $h_billed_demand = $usage_obj[$lindex]->billed_demand; +% $h_svcnum = $usage_obj[$lindex]->svcnum; +% $h_meter_number = $usage_obj[$lindex]->meter_number; +% } +% +% # this hash store info to configure the table with text box for input +% # size - [int] how big textbox +% # value - [alpha numeric] default value of the text box +% # extra - [alpha numeric] other option for text box. I.E. READONLY +% # mean the text box is a readonly +% my %field_info = ( +% prev_date => { +% 'size' => '8', +% 'value' => $h_prev_date, +% }, +% curr_date => { 'size' => '8' }, +% prev_read => { +% 'size' => '8', +% 'value' => $h_prev_read, +% }, +% curr_read => { 'size' => '8' }, +% tdsp => { +% 'size' => '8', +% 'value' => $h_tdsp, +% }, +% meter_multiplier => { +% 'size' => '4', +% 'value' => $h_meter_multiplier, +% }, +% total_usage => { 'size' => '6' }, +% measured_demand => { +% 'size' => '4', +% 'value' => $h_measured_demand, +% }, +% billed_demand => { +% 'size' => '4', +% 'value' => $h_billed_demand, +% }, +% svcnum => { +% 'size' => '6', +% 'value' => $svcnum, +% 'extra' => 'READONLY' +% }, +% _date => { +% 'size' => '8', +% 'value' => 'N/A', +% 'extra' => 'READONLY' +% }, +% meter_number => { +% 'size' => '14', +% 'value' => $h_meter_number, +% }, +% ); +% +% +% # input box for entry +% print qq !<TR bgcolor=#e8e8ea class='mainbody'>!; +% my $input_style = 'STYLE="color:#000000; background-color: #FFFFCC;"'; +% foreach my $field (@field_name) { +% my $txt = ''; +% $txt .= ' SIZE=' . $field_info{$field}->{'size'} +% if (exists($field_info{$field}->{'size'})); +% $txt .= ' VALUE="' . $field_info{$field}->{'value'} . '"' +% if (exists($field_info{$field}->{'value'})); +% $txt .= ' ' . $field_info{$field}->{'extra'} +% if (exists($field_info{$field}->{'extra'})); +% if ($field eq 'meter_multiplier') { +% print qq ! +% <TD> +% <TABLE> +% <TD> +% <INPUT TYPE="text" $input_style NAME="$field" $txt> +% </TD> +% <TD> +% <INPUT TYPE="checkbox" NAME="ignore_meter_multiplier">Ignore<P> +% </TD> +% </TABLE> +% </TD> +% !; +% } +% else { +% print qq ! +% <TD> +% <INPUT TYPE="text" $input_style NAME="$field" $txt> +% </TD> +% !; +% } +% } +% print "</TR>\n"; +% + +</TABLE><BR> +%print "<BR>measured demand = ",$h_measured_demand,"\n<BR>" if ($debug); +% +<INPUT TYPE="submit" VALUE="Submit"> +<INPUT TYPE="Reset" VALUE="Clear"> +<INPUT TYPE=BUTTON OnClick="$cgi->redirect(popurl(2)."view/svc_external.cgi?$svcnum")" + VALUE="Cancel"> +% +% print qq ! +% <br><br> +% prev_date, curr_date - +% 8 digit in format of yyyymmdd (y-year m-month d-date)<br> +% prev_read, curr_read - positive interger. Also, curr_read > prev_read +% Unless meter multiplier ignore value is set. In +% this case, this condition will be ignore.<br> +% tdsp - an dollar amount w/wo cent<br> +% meter_multiplier - positive integer<br> +% total_usage - +% should equal (total_usage = (prev_read-curr_read) * meter_multiplier) +% unless meter multiplier ignore value is set<br> +% measured_demand - positive integer<br> +% billed_demand - positive integer<br> +% !; +% + </FORM> + </BODY> +</HTML> + |