diff options
Diffstat (limited to 'httemplate/misc/process/timeworked.html')
-rw-r--r-- | httemplate/misc/process/timeworked.html | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/httemplate/misc/process/timeworked.html b/httemplate/misc/process/timeworked.html new file mode 100644 index 0000000..200a751 --- /dev/null +++ b/httemplate/misc/process/timeworked.html @@ -0,0 +1,59 @@ +% if ($error) { +<% $cgi->redirect(popurl(2). "timeworked.html?". $cgi->query_string) %> +% } else { +<% $cgi->redirect(popurl(3). "search/timeworked.html?begin=$begin;end=$end") %> +% } +<%init> + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('Time queue'); + +my($begin, $end) = FS::UI::Web::parse_beginning_ending($cgi); + +my @acct_rt_transaction; +foreach my $transaction ( + map { /^transactionid(\d+)$/; $1; } grep /^transactionid\d+$/, $cgi->param +) { + my $s = "multiplier${transaction}_"; + my %multipliers = map { /^$s(\d+)$/; $1 => $cgi->param("$s$1"); } + grep /^$s\d+$/, $cgi->param; + my $msum = 0; + foreach(values %multipliers) {$msum += $_}; + + my $seconds = $cgi->param("seconds$transaction"); + my %seconds = + map { $_ => sprintf("%.0f", $seconds * $multipliers{$_} / $msum) } + (keys %multipliers); + my $sum = 0; + my $count = 0; + foreach (values %seconds) { + $sum += $_; + $count++; + } + + #fudge in some time if we're close + if (abs($seconds-$sum) <= $count) { + my $adjustment = $seconds-$sum; + foreach (keys %seconds) { # explicitly choose one? + $seconds{$_} += $adjustment; + last; + } + } else { + die "unexpectedly cannot apportion time"; + } + + foreach my $customer ( grep {$seconds{$_}} keys %seconds ) { + push @acct_rt_transaction, new FS::acct_rt_transaction { + 'custnum' => $customer, + 'transaction_id' => $transaction, + 'seconds' => $seconds{$customer}, + 'support' => int( $seconds{$customer} * $msum ), + }; + } + +} + +my $error = FS::acct_rt_transaction->batch_insert(@acct_rt_transaction); +$cgi->param('error', $error) if $error; + +</%init> |