missed file in self service support usage improvements
[freeside.git] / httemplate / misc / process / timeworked.html
1 % if ($error) {
2 <% $cgi->redirect(popurl(2). "timeworked.html?". $cgi->query_string) %>
3 % } else {
4 <% $cgi->redirect(popurl(3). "search/timeworked.html") %>
5 % }
6 <%init>
7
8 die "access denied"
9   unless $FS::CurrentUser::CurrentUser->access_right('Time queue');
10
11 my %multipliers = map { /^custnum(\d+)$/; ($cgi->param("custnum$1") => $cgi->param("multiplier$1")); }
12                       grep /^custnum\d+$/, $cgi->param;
13 my $msum = 0;
14 foreach(values %multipliers) {$msum += $_};
15
16 my @acct_rt_transaction;
17 foreach my $transaction (
18   map { /^transactionid(\d+)$/; $1; } grep /^transactionid\d+$/, $cgi->param
19 ) {
20   my $seconds = $cgi->param("seconds$transaction");
21   my %seconds = 
22        map { $_ => sprintf("%.0f", $seconds * $multipliers{$_} / $msum) } 
23          (keys %multipliers);
24   my $sum = 0;
25   my $count = 0;
26   foreach (values %seconds) {
27     $sum += $_;
28     $count++;
29   }
30
31   #fudge in some time if we're close
32   if (abs($seconds-$sum) <= $count) {
33     my $adjustment = $seconds-$sum;
34     foreach (keys %seconds) {       # explicitly choose one?
35       $seconds{$_} += $adjustment;
36       last;
37     }
38   }
39
40   foreach my $customer ( grep {$seconds{$_}} keys %seconds ) {
41     push @acct_rt_transaction, new FS::acct_rt_transaction {
42       'custnum'        => $customer,
43       'transaction_id' => $transaction,
44       'seconds'        => $seconds{$customer},
45       'support'        => $seconds{$customer} * $msum,
46     };
47   }
48
49 }
50
51 my $error = FS::acct_rt_transaction->batch_insert(@acct_rt_transaction);
52 $cgi->param('error', $error) if $error;
53
54 </%init>