summaryrefslogtreecommitdiff
path: root/httemplate/misc/process/timeworked.html
diff options
context:
space:
mode:
Diffstat (limited to 'httemplate/misc/process/timeworked.html')
-rw-r--r--httemplate/misc/process/timeworked.html59
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>