use base qw( FS::Record );
use strict;
+use Tie::IxHash;
#use FS::Record qw( qsearch qsearchs );
=head1 NAME
$self->SUPER::check;
}
+=item targets
+
+Returns a hash reference. Keys are possible values for the "target" field.
+Values are hash references with "label" and "multiplier" keys.
+
+=cut
+
+sub targets {
+
+ tie my %targets, 'Tie::IxHash', # once?
+ #'svc_acct.totalbytes' => { label => 'Megabytes',
+ # multiplier => 1048576,
+ # },
+ 'svc_acct.totalbytes' => { label => 'Gigabytes',
+ multiplier => 1073741824,
+ },
+ 'svc_acct.seconds' => { label => 'Hours',
+ multiplier => 3600,
+ },
+ 'svc_conferencing.participants' => { label => 'Conference Participants',
+ multiplier=> 1,
+ },
+ #this will take more work: set action, not increment..
+ # and then value comes from a select, not a text field
+ # 'svc_conferencing.confqualitynum' => { label => 'Conference Quality',
+ # },
+ ;
+
+ \%targets;
+
+}
+
=back
=head1 BUGS
: ()
),
],
+ (
+ map { my $amount = $_->amount
+ / (FS::part_pkg_usageprice->targets->{$_->target}{multiplier}||1);
+ my $label = FS::part_pkg_usageprice->targets->{$_->target}{label};
+ [
+ { data => "Plus $money_char". $_->price. ' '.
+ ( $_->action eq 'increment' ? 'per' : 'for' ).
+ " $amount $label",
+ align => 'center', #left?
+ colspan => 2,
+ },
+ ];
+ }
+ $part_pkg->part_pkg_usageprice
+ ),
( map { my $dst_pkg = $_->dst_pkg;
[
{ data => 'Supplemental: '.
var plan = what.options[what.selectedIndex].value;
- var term_table = document.getElementById('TableNumber7') // XXX NOT ROBUST
+ var term_table = document.getElementById('TableNumber8') // XXX NOT ROBUST
if ( plan == 'flat' || plan == 'prorate' || plan == 'subscription' ) {
//term_table.disabled = false;
- term_table.style.visibility = '';
+ //term_table.style.visibility = '';
+ term_table.style.display = '';
} else {
//term_table.disabled = true;
- term_table.style.visibility = 'hidden';
+ //term_table.style.visibility = 'hidden';
+ term_table.style.display = 'none';
}
var currency_regex = /^(setup|recur)_fee_[A-Z]{3}$/;
};
}
+my $targets = FS::part_pkg_usageprice->targets;
+foreach my $amount_param ( grep /^usagepricepart(\d+)_amount$/, $cgi->param ) {
+ $amount_param =~ /^usagepricepart(\d+)_amount$/ or die 'unpossible';
+ my $num = $1;
+ my $amount = $cgi->param($amount_param);
+ if ( ! $amount && ! $cgi->param("usagepricepart${num}_price") ) {
+ #don't add empty rows just because the dropdowns have a value
+ $cgi->param("usagepricepart${num}_$_", '') for qw( currency action target );
+ next;
+ }
+ my $target = $cgi->param("usagepricepart${num}_target");
+ $amount *= $targets->{$target}{multiplier} if $targets->{$target}{multiplier};
+ $cgi->param($amount_param, $amount);
+}
+
my @process_o2m = (
{
'table' => 'part_pkg_msgcat',
{
'table' => 'part_pkg_usageprice',
'fields' => [qw( price currency action target amount )],
+
}
);
ID = "<%$id%>_target"
<% $onchange %>
>
-% foreach my $target (keys %targets) {
+% foreach my $target (keys %$targets) {
<OPTION VALUE="<% $target %>"
<% ($cgi->param($name.'_target') || $part_pkg_usageprice->target) eq $target ? 'SELECTED' : '' %>
- ><% $targets{$target}->{label} %>
+ ><% $targets->{$target}->{label} %>
% }
</TD>
% ###
% # amount
% ###
+% my $amount =
+% scalar($cgi->param($name.'_amount'))
+% || ( $part_pkg_usageprice->amount
+% / ($targets->{$part_pkg_usageprice->target}{multiplier} || 1) );
+% $amount = '' unless $amount > 0;
<TD>
<INPUT TYPE = "text"
NAME = "<%$name%>_amount"
ID = "<%$id%>_amount"
SIZE = 5
- VALUE = "<% scalar($cgi->param($name.'_amount'))
- || $part_pkg_usageprice->amount
- %>"
+ VALUE = "<% $amount %>"
<% $onchange %>
>
</TD>
% }
<%init>
-tie my %targets, 'Tie::IxHash', # once?
- #'svc_acct.totalbytes' => { label => 'Megabytes',
- # mult => 1048576,
- # },
- 'svc_acct.totalbytes' => { label => 'Gigabytes',
- mult => 1073741824,
- },
- 'svc_acct.seconds' => { label => 'Hours',
- mult => 3600,
- },
- 'svc_conferencing.participants' => { label => 'Conference Participants',
- mult => 1,
- },
-#this will take more work: set action, not increment..
-# and then value comes from a select, not a text field
-# 'svc_conferencing.confqualitynum' => { label => 'Conference Quality',
-# },
-;
+my $targets = FS::part_pkg_usageprice->targets;
my( %opt ) = @_;