+=head1 SUBROUTINES
+
+=over 4
+
+=item process
+
+Experimental job-queue processor for web interface adds/edits
+
+=cut
+
+sub process {
+ my $job = shift;
+
+ #my %param = @_;
+
+ my $param = shift;
+ my %param = split(/[;=]/, $param);
+
+ my $old = qsearchs('rate', { 'ratenum' => $param{'ratenum'} } )
+ if $param{'ratenum'};
+
+ my @rate_detail = map {
+
+ my $regionnum = $_->regionnum;
+ if ( $param{"sec_granularity$regionnum"} ) {
+
+ new FS::rate_detail {
+ 'dest_regionnum' => $regionnum,
+ map { $_ => $param{"$_$regionnum"} }
+ qw( min_included min_charge sec_granularity )
+ };
+
+ } else {
+
+ new FS::rate_detail {
+ 'dest_regionnum' => $regionnum,
+ 'min_included' => 0,
+ 'min_charge' => 0,
+ 'sec_granularity' => '60'
+ };
+
+ }
+
+ } qsearch('rate_region', {} );
+
+ my $rate = new FS::rate {
+ map { $_ => $param{$_} }
+ fields('rate')
+ };
+
+ my $error = '';
+ if ( $param{'ratenum'} ) {
+ warn "$rate replacing $old ($param{'ratenum'})\n" if $DEBUG;
+ $error = $rate->replace( $old,
+ 'rate_detail' => \@rate_detail,
+ 'job' => $job,
+ );
+ } else {
+ warn "inserting $rate\n" if $DEBUG;
+ $error = $rate->insert( 'rate_detail' => \@rate_detail,
+ 'job' => $job,
+ );
+ #$ratenum = $rate->getfield('ratenum');
+ }
+
+ die $error if $error;
+
+}
+
+# begin JSRPC code...
+
+package FS::rate::JSRPC;
+use vars qw(@ISA $DEBUG);
+use JavaScript::RPC::Server::CGI;
+use FS::UID;
+@ISA = qw( JavaScript::RPC::Server::CGI );
+$DEBUG = 1;
+
+sub process_rate {
+ my $self = shift;
+
+ my %param = @_;
+ warn "FS::rate::JSRPC::process_rate\n".
+ join('', map " $_ => $param{$_}\n", keys %param )
+ if $DEBUG;
+
+ #progressbar prototype code... should be generalized
+
+ #first get the CGI params shipped off to a job ASAP so an id can be returned
+ #to the caller
+
+ my $job = new FS::queue { 'job' => 'FS::rate::process' };
+
+ #too slow to insert all the cgi params as individual args..,?
+ #my $error = $queue->insert('_JOB', $cgi->Vars);
+
+ #my $bigstring = join(';', map { "$_=". scalar($cgi->param($_)) } $cgi->param );
+ my $bigstring = join(';', map { "$_=". $param{$_} } keys %param );
+ my $error = $job->insert('_JOB', $bigstring);
+
+ if ( $error ) {
+ $error;
+ } else {
+ $job->jobnum;
+ }
+
+}
+
+sub get_new_query {
+ FS::UID::cgi();
+}
+
+# end JSRPC code...
+