This commit was generated by cvs2svn to compensate for changes in r6252,
[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 @acct_rt_transaction;
12 foreach my $transaction (
13   map { /^transactionid(\d+)$/; $1; } grep /^transactionid\d+$/, $cgi->param
14 ) {
15   my $s = "multiplier${transaction}_";
16   my %multipliers = map { /^$s(\d+)$/; $1 => $cgi->param("$s$1"); }
17                       grep /^$s\d+$/, $cgi->param;
18   my $msum = 0;
19   foreach(values %multipliers) {$msum += $_};
20
21   my $seconds = $cgi->param("seconds$transaction");
22   my %seconds = 
23        map { $_ => sprintf("%.0f", $seconds * $multipliers{$_} / $msum) } 
24          (keys %multipliers);
25   my $sum = 0;
26   my $count = 0;
27   foreach (values %seconds) {
28     $sum += $_;
29     $count++;
30   }
31
32   #fudge in some time if we're close
33   if (abs($seconds-$sum) <= $count) {
34     my $adjustment = $seconds-$sum;
35     foreach (keys %seconds) {       # explicitly choose one?
36       $seconds{$_} += $adjustment;
37       last;
38     }
39   } else {
40     die "unexpectedly cannot apportion time";
41   }
42
43   foreach my $customer ( grep {$seconds{$_}} keys %seconds ) {
44     push @acct_rt_transaction, new FS::acct_rt_transaction {
45       'custnum'        => $customer,
46       'transaction_id' => $transaction,
47       'seconds'        => $seconds{$customer},
48       'support'        => $seconds{$customer} * $msum,
49     };
50   }
51
52 }
53
54 my $error = FS::acct_rt_transaction->batch_insert(@acct_rt_transaction);
55 $cgi->param('error', $error) if $error;
56
57 </%init>