% if ( $quotationnum && ! $cust_main ) { <& /elements/header.html, mt('Quotation #[_1]: add one-time charge', $quotationnum) &> % } else { <& /elements/header-cust_main.html, view => $quotationnum ? 'quotations' : 'packages', cust_main => $cust_main, etc => $cgi->param('error') ? '' : 'onload="addRow()"', &>
% if ( $prospect_main ) { <& /elements/small_prospect_view.html, $prospect_main &> % }
%my %footer_args = ( % formvalidation => { % QuickChargeForm => { % validate_fields => { % quantity => 'digits: true, min: 1, required: true', % }, % }, % }, %); % if ( $quotationnum ) { <& /elements/footer.html, %footer_args &> % } else { <& /elements/footer-cust_main.html, %footer_args &> % } <%init> my $curuser = $FS::CurrentUser::CurrentUser; die "access denied" unless $curuser->access_right('One-time charge'); my $conf = new FS::Conf; my $date_format = $conf->config('date_format') || '%m/%d/%Y'; my $money_char = $conf->config('money_char') || '$'; my( $cust_main, $cust_pkg, $prospect_main, $quotationnum ) = ( '', '', '', '' ); if ( $cgi->param('change_pkgnum') ) { # change an existing one-time charge die "access denied" unless $curuser->access_right('Modify one-time charge'); $cgi->param('change_pkgnum') =~ /^(\d+)$/ or die "illegal pkgnum"; $cust_pkg = FS::cust_pkg->by_key($1) or die "pkgnum $1 not found"; $cust_main = $cust_pkg->cust_main; } else { if ( $cgi->param('quotationnum') =~ /^(\d+)$/ ) { $quotationnum = $1; } if ( $cgi->param('custnum') =~ /^(\d+)$/ ) { $cust_main = FS::cust_main->by_key($1) or die "custnum $1 not found"; } if ( $cgi->param('prospectnum') =~ /^(\d+)$/ ) { $prospect_main = FS::prospect_main->by_key($1) or die "prospectnum $1 not found"; } die "custnum or prospectnum must be specified" unless $cust_main || $prospect_main; } my $cust_or_prospect = $cust_main || $prospect_main; if ( $cust_main ) { my $custnum = $cust_main->custnum; # agent-virt if (!exists($curuser->agentnums_href->{$cust_main->agentnum})) { die "custnum $custnum not found"; } } elsif ( $prospect_main ) { my $prospectnum = $prospect_main->prospectnum; # agent-virt if (!exists($curuser->agentnums_href->{$prospect_main->agentnum})) { die "prospectnum $prospectnum not found"; } } my $format = "%m/%d/%Y %T %z (%Z)"; #false laziness w/REAL_cust_pkg.cgi? my $start_date = $cust_main ? $cust_main->next_bill_date : ''; $start_date = $start_date ? time2str($format, $start_date) : ''; my $amount = ''; if ( $cgi->param('amount') =~ /^\s*\$?\s*(\d+(\.\d{1,2})?)\s*$/ ) { $amount = $1; } my $setup_cost = ''; if ( $cgi->param('setup_cost') =~ /^\s*\$?\s*(\d+(\.\d{1,2})?)\s*$/ ) { $setup_cost = $1; } my $quantity = 1; if ( $cgi->param('quantity') =~ /^\s*(\d+)\s*$/ ) { $quantity = $1; } $cgi->param('pkg') =~ /^([\w \!\@\#\$\%\&\(\)\-\+\;\:\'\"\,\.\?\/\=\[\]]*)$/ or die 'illegal description'; my $pkg = $1; my $default_terms; if ( $cust_main && $cust_main->invoice_terms ) { $default_terms = emt("Customer default ([_1])", $cust_main->invoice_terms); } else { $default_terms = emt( "Default ([_1])", ( $conf->config('invoice_default_terms', $cust_or_prospect->agentnum) || emt('Payable upon receipt') ) ); } my @description; my %param = $cgi->Vars; for (my $i = 0; exists($param{"description$i"}); $i++) { push @description, $param{"description$i"}; } my $classnum; if ( $cgi->param('classnum') =~ /^(\d+)$/ ) { $classnum = $1; } my $part_pkg; my $billed = 0; if ( $cust_pkg ) { # set defaults $part_pkg = $cust_pkg->part_pkg; $pkg ||= $part_pkg->pkg; $classnum ||= $part_pkg->classnum; if (!@description) { for (my $i = 0; $i < ($part_pkg->option('additional_count',1) || 0); $i++) { push @description, $part_pkg->option("additional_info$i",1); } } $billed = $cust_pkg->get('setup') ? 1 : 0; } %init>