diff options
Diffstat (limited to 'httemplate')
80 files changed, 722 insertions, 2599 deletions
diff --git a/httemplate/autohandler b/httemplate/autohandler deleted file mode 100644 index 2bd3adffd..000000000 --- a/httemplate/autohandler +++ /dev/null @@ -1,21 +0,0 @@ -% $m->call_next; -<%init> - dbh->{'private_profile'} = {} if UNIVERSAL::can(dbh, 'sprintProfile'); -</%init> -<%filter> - -my $profile = ''; -if ( UNIVERSAL::can(dbh, 'sprintProfile') ) { - - if ( lc($r->content_type) eq 'text/html' ) { - - $profile = '<PRE>'. ("\n"x4096). encode_entities(dbh->sprintProfile()). - #"\n\n". &sprintAutoProfile(). '</PRE>'; - "\n\n". '</PRE>'; - } - - dbh->{'private_profile'} = {}; -} - -s/(<\/BODY>[\s\n]*<\/HTML>[\s\n]*)$/$profile$1/i; -</%filter> diff --git a/httemplate/browse/addr_block.cgi b/httemplate/browse/addr_block.cgi deleted file mode 100644 index 06ac556cf..000000000 --- a/httemplate/browse/addr_block.cgi +++ /dev/null @@ -1,76 +0,0 @@ -<%= header('Address Blocks', menubar('Main Menu' => $p)) %> -<% - -use NetAddr::IP; - -my @addr_block = qsearch('addr_block', {}); -my @router = qsearch('router', {}); -my $block; -my $p2 = popurl(2); -my $path = $p2 . "edit/process/addr_block"; - -%> - -<% if ($cgi->param('error')) { %> - <FONT SIZE="+1" COLOR="#ff0000">Error: <%=$cgi->param('error')%></FONT> - <BR><BR> -<% } %> - -<%=table()%> - -<% foreach $block (sort {$a->NetAddr cmp $b->NetAddr} @addr_block) { %> - <TR> - <TD><%=$block->NetAddr%></TD> - <% if (my $router = $block->router) { %> - <% if (scalar($block->svc_broadband) == 0) { %> - <TD> - <%=$router->routername%> - </TD> - <TD> - <FORM ACTION="<%=$path%>/deallocate.cgi" METHOD="POST"> - <INPUT TYPE="hidden" NAME="blocknum" VALUE="<%=$block->blocknum%>"> - <INPUT TYPE="submit" NAME="submit" VALUE="Deallocate"> - </FORM> - </TD> - <% } else { %> - <TD COLSPAN="2"> - <%=$router->routername%> - </TD> - <% } %> - <% } else { %> - <TD> - <FORM ACTION="<%=$path%>/allocate.cgi" METHOD="POST"> - <INPUT TYPE="hidden" NAME="blocknum" VALUE="<%=$block->blocknum%>"> - <SELECT NAME="routernum" SIZE="1"> - <% foreach (@router) { %> - <OPTION VALUE="<%=$_->routernum %>"><%=$_->routername%></OPTION> - <% } %> - </SELECT> - <INPUT TYPE="submit" NAME="submit" VALUE="Allocate"> - </FORM> - </TD> - <TD> - <FORM ACTION="<%=$path%>/split.cgi" METHOD="POST"> - <INPUT TYPE="hidden" NAME="blocknum" VALUE="<%=$block->blocknum%>"> - <INPUT TYPE="submit" NAME="submit" VALUE="Split"> - </FORM> - </TD> - </TR> -<% } - } %> - <TR><TD COLSPAN="3"><BR></TD></TR> - <TR> - <FORM ACTION="<%=$path%>/add.cgi" METHOD="POST"> - <TD>Gateway/Netmask</TD> - <TD> - <INPUT TYPE="text" NAME="ip_gateway" SIZE="15">/<INPUT TYPE="text" NAME="ip_netmask" SIZE="2"> - </TD> - <TD> - <INPUT TYPE="submit" NAME="submit" VALUE="Add"> - </TD> - </FORM> - </TR> -</TABLE> -</BODY> -</HTML> - diff --git a/httemplate/browse/generic.cgi b/httemplate/browse/generic.cgi deleted file mode 100644 index 9ac0f2391..000000000 --- a/httemplate/browse/generic.cgi +++ /dev/null @@ -1,46 +0,0 @@ -<% - -use FS::Record qw(qsearch dbdef); -use DBIx::DBSchema; -use DBIx::DBSchema::Table; - -my $error; -my $p2 = popurl(2); -my ($table) = $cgi->keywords; -my $dbdef = dbdef or die "Cannot fetch dbdef!"; -my $dbdef_table = $dbdef->table($table) or die "Cannot fetch schema for $table"; - -my $pkey = $dbdef_table->primary_key or die "Cannot fetch pkey for $table"; -print header("Browse $table", menubar('Main Menu' => $p)); - -my @rec = qsearch($table, {}); -my @col = $dbdef_table->columns; - -if ($cgi->param('error')) { %> - <FONT SIZE="+1" COLOR="#ff0000">Error: <%=$cgi->param('error')%></FONT> - <BR><BR> -<% } -%> -<A HREF="<%=$p2%>edit/<%=$table%>.cgi"><I>Add a new <%=$table%></I></A><BR><BR> - -<%=table()%> -<TH> -<% foreach (grep { $_ ne $pkey } @col) { - %><TD><%=$_%></TD> - <% } %> -</TH> -<% foreach $rec (sort {$a->getfield($pkey) cmp $b->getfield($pkey) } @rec) { - %> - <TR> - <TD> - <A HREF="<%=$p2%>edit/<%=$table%>.cgi?<%=$rec->getfield($pkey)%>"> - <%=$rec->getfield($pkey)%></A> </TD> <% - foreach $col (grep { $_ ne $pkey } @col) { %> - <TD><%=$rec->getfield($col)%></TD> <% } %> - </A> - </TR> -<% } %> -</TABLE> -</BODY> -</HTML> - diff --git a/httemplate/browse/part_svc.cgi b/httemplate/browse/part_svc.cgi index ef0de13cc..fd9ef3cf3 100755 --- a/httemplate/browse/part_svc.cgi +++ b/httemplate/browse/part_svc.cgi @@ -70,13 +70,12 @@ function part_export_areyousure(href) { <% foreach my $part_svc ( @part_svc ) { my $hashref = $part_svc->hashref; my $svcdb = $hashref->{svcdb}; - my $svc_x = "FS::$svcdb"->new( { svcpart => $part_svc->svcpart } ); - my @dfields = $svc_x->fields; + my @dfields = fields($svcdb); push @dfields, 'usergroup' if $svcdb eq 'svc_acct'; #kludge my @fields = - grep { $svc_x->pvf($_) - or $_ ne 'svcnum' && $part_svc->part_svc_column($_)->columnflag } - @dfields ; + grep { $_ ne 'svcnum' && $part_svc->part_svc_column($_)->columnflag } + @dfields; + my $rowspan = scalar(@fields) || 1; my $url = "${p}edit/part_svc.cgi?$hashref->{svcpart}"; %> @@ -119,7 +118,6 @@ map { qsearchs('part_export', { exportnum => $_->exportnum } ) } qsearch('export <% if ( $flag eq "D" ) { print "Default"; } elsif ( $flag eq "F" ) { print "Fixed"; } - elsif ( not $flag ) { } else { print "(Unknown!)"; } %> </TD><TD><%= $part_svc->part_svc_column($field)->columnvalue%></TD> diff --git a/httemplate/browse/part_virtual_field.cgi b/httemplate/browse/part_virtual_field.cgi deleted file mode 100644 index a0009dabd..000000000 --- a/httemplate/browse/part_virtual_field.cgi +++ /dev/null @@ -1,39 +0,0 @@ -<%= header('Virtual field definitions', menubar('Main Menu' => $p)) %> -<% - -my %pvfs; -my $block; -my $p2 = popurl(2); -my $dbtable; - -foreach (qsearch('part_virtual_field', {})) { - push @{ $pvfs{$_->dbtable} }, $_; -} -%> - -<% if ($cgi->param('error')) { %> - <FONT SIZE="+1" COLOR="#ff0000">Error: <%=$cgi->param('error')%></FONT> - <BR><BR> -<% } %> - -<A HREF="<%=$p2%>edit/part_virtual_field.cgi"><I>Add a new field</I></A><BR><BR> - -<% foreach $dbtable (sort { $a cmp $b } keys (%pvfs)) { %> -<H3><%=$dbtable%></H3> - -<%=table()%> -<TH><TD>Field name</TD><TD>Description</TD></TH> -<% foreach my $pvf (sort {$a->name cmp $b->name} @{ $pvfs{$dbtable} }) { %> - <TR> - <TD></TD> - <TD> - <A HREF="<%=$p2%>edit/part_virtual_field.cgi?<%=$pvf->vfieldpart%>"> - <%=$pvf->name%></A></TD> - <TD><%=$pvf->label%></TD> - </TR> -<% } %> -</TABLE> -<% } %> -</BODY> -</HTML> - diff --git a/httemplate/browse/router.cgi b/httemplate/browse/router.cgi deleted file mode 100644 index 149db4903..000000000 --- a/httemplate/browse/router.cgi +++ /dev/null @@ -1,57 +0,0 @@ -<%= header('Routers', menubar('Main Menu' => $p)) %> -<% - -my @router = qsearch('router', {}); -my $p2 = popurl(2); - -%> - -<% if ($cgi->param('error')) { %> - <FONT SIZE="+1" COLOR="#ff0000">Error: <%=$cgi->param('error')%></FONT> - <BR><BR> -<% } %> - -<% -my $hidecustomerrouters = 0; -my $hideurl = ''; -if ($cgi->param('hidecustomerrouters') eq '1') { - $hidecustomerrouters = 1; - $cgi->param('hidecustomerrouters', 0); - $hideurl = '<A HREF="' . $cgi->self_url() . '">Show customer routers</A>'; -} else { - $hidecustomerrouters = 0; - $cgi->param('hidecustomerrouters', 1); - $hideurl = '<A HREF="' . $cgi->self_url() . '">Hide customer routers</A>'; -} -%> - -<A HREF="<%=$p2%>edit/router.cgi">Add a new router</A> | <%=$hideurl%> - -<%=table()%> - <TR> - <TD><B>Router name</B></TD> - <TD><B>Address block(s)</B></TD> - </TR> -<% foreach my $router (sort {$a->routernum <=> $b->routernum} @router) { - next if $hidecustomerrouters && $router->svcnum; - my @addr_block = $router->addr_block; - if (scalar(@addr_block) == 0) { - push @addr_block, ' '; - } -%> - <TR> - <TD ROWSPAN="<%=scalar(@addr_block)+1%>"> - <A HREF="<%=$p2%>edit/router.cgi?<%=$router->routernum%>"><%=$router->routername%></A> - </TD> - </TR> - <% foreach my $block ( @addr_block ) { %> - <TR> - <TD><%=UNIVERSAL::isa($block, 'FS::addr_block') ? $block->NetAddr : ' '%></TD> - </TR> - <% } %> - </TR> -<% } %> -</TABLE> -</BODY> -</HTML> - diff --git a/httemplate/docs/ach.html b/httemplate/docs/ach.html deleted file mode 100644 index b79df78fe..000000000 --- a/httemplate/docs/ach.html +++ /dev/null @@ -1,12 +0,0 @@ -<HTML> - <HEAD> - <TITLE> - Electronic check (ACH) information - </TITLE> - </HEAD> - <BODY BGCOLOR="#e8e8e8"> - <IMG BORDER=0 SRC="../images/ach.png"> - <BR> - <CENTER><A HREF="javascript:close()">(close window)</A></CENTER> - </BODY> -</HTML> diff --git a/httemplate/docs/index.html b/httemplate/docs/index.html index 648cb985b..1ed02850a 100644 --- a/httemplate/docs/index.html +++ b/httemplate/docs/index.html @@ -6,11 +6,13 @@ <img src="overview.png"> <ul> <li><a href="install.html">New Installation</a> + <li><a href="upgrade4.html">Upgrading from 1.2.x to 1.2.2</a> + <li><a href="upgrade5.html">Upgrading from 1.2.2 to 1.2.3</a> + <li><a href="upgrade6.html">Upgrading from 1.2.3 to 1.3.0</a> <li><a href="upgrade7.html">Upgrading from 1.3.0 to 1.3.1</a> <li><a href="upgrade8.html">Upgrading from 1.3.1 to 1.4.0</a> <li><a href="upgrade9.html">Upgrading from 1.4.0 to 1.4.1</a> <li><a href="upgrade-1.4.2.html">Upgrading from 1.4.1 to 1.4.2</a> - <li><a href="upgrade10.html">Upgrading from 1.4.1 (or 1.4.2?) to 1.5.0</a> <!-- <li><a href="config.html">Configuration files</a> !--> diff --git a/httemplate/docs/install.html b/httemplate/docs/install.html index 41aacc51b..7fcc4a1a2 100644 --- a/httemplate/docs/install.html +++ b/httemplate/docs/install.html @@ -30,7 +30,7 @@ Before installing, you need: <li><a href="http://search.cpan.org/search?dist=HTML-Parser">HTML-Parser</a> <li><a href="http://search.cpan.org/search?dist=libnet">libnet</a> <li><a href="http://search.cpan.org/search?dist=Locale-Codes">Locale-Codes</a> - <li><a href="http://search.cpan.org/search?dist=Net-Whois-Raw">Net-Whois-Raw</a> + <li><a href="http://search.cpan.org/search?dist=Net-Whois">Net-Whois</a> <li><a href="http://search.cpan.org/search?dist=libwww-perl">libwww-perl</a> <li><a href="http://search.cpan.org/search?dist=Business-CreditCard">Business-CreditCard</a> <!-- <li><a href="http://search.cpan.org/search?dist=Data-ShowTable">Data-ShowTable</a> --> @@ -54,8 +54,6 @@ Before installing, you need: <li><a href="http://search.cpan.org/search?dist=HTML-Widgets-SelectLayers">HTML-Widgets-SelectLayers</a> <li><a href="http://search.cpan.org/search?dist=Storable">Storable</a> <!-- MyAccounts, maybe only for dev <li><a href="http://search.cpan.org/search?dist=Cache-Cache">Cache::Cache</a> --> - <li><a href="http://search.cpan.org/search?dist=NetAddr-IP">NetAddr-IP</a> - <li><a href="http://search.cpan.org/search?dist=Chart">Chart</a> <li><a href="http://search.cpan.org/search?dist=Crypt-PasswdMD5">Crypt::PasswdMD5</a> <li><a href="http://search.cpan.org/search?dist=ApacheDBI">Apache::DBI</a> <i>(optional but recommended for better webinterface performance)</i> </ul> @@ -131,10 +129,9 @@ cp htetc/global.asa /usr/local/etc/freeside/asp-global/global.asa <li>Configure Apache for the Global directory and to execute .cgi files using Apache::ASP. For example: <font size="-1"><pre> PerlModule Apache::ASP -# your freeside document root <Directory /usr/local/apache/htdocs/freeside-asp> -<Files ~ (\.cgi|\.html)> -SetHandler perl-script +<Files ~ (\.cgi)> +AddHandler perl-script .cgi PerlHandler Apache::ASP </Files> <Perl> @@ -143,15 +140,13 @@ $MLDBM::RemoveTaint = 1; PerlSetVar Global /usr/local/etc/freeside/asp-global/ PerlSetVar Debug 2 PerlSetVar RequestBinaryRead Off -# your freeside document root -PerlSetVar IncludesDir /usr/local/apache/htdocs/freeside-asp </Directory> </pre></font> </ul></td> <td><ul> <li>Run <tt>make masondocs</tt> <li>Copy <tt>masondocs/</tt> to your web server's document space. (For example: <tt>/usr/local/apache/htdocs/freeside-mason</tt>) - <li>Copy <tt>htetc/handler.pl</tt> to <tt>/usr/local/etc/freeside</tt> + <li>Copy <tt>htetc/handler.pl</tt> to <tt>/usr/local/etc/freeside</tt> (use htetc/handler.pl-1.0x for Mason versions before 1.10). <li>Edit <tt>handler.pl</tt> and: <ul> <li> set an appropriate <tt>comp_root</tt>, such as <tt>/usr/local/apache/htdocs/freeside-mason</tt> @@ -162,8 +157,8 @@ PerlSetVar IncludesDir /usr/local/apache/htdocs/freeside-asp <font size="-1"><pre> PerlModule HTML::Mason <Directory /usr/local/apache/htdocs/freeside-mason> -<Files ~ (\.cgi|.html)> -SetHandler perl-script +<Files ~ (\.cgi)> +AddHandler perl-script .cgi PerlHandler HTML::Mason </Files> <Perl> diff --git a/httemplate/docs/legacy.html b/httemplate/docs/legacy.html index 94efe53af..fb45ebb6f 100755 --- a/httemplate/docs/legacy.html +++ b/httemplate/docs/legacy.html @@ -17,12 +17,11 @@ <li>POP mail accounts have entries in passwd only, and have a particular shell. <li>Everything else in passwd is a shell account. </ul> -<!-- <li><a name="svc_acct_sm">bin/svc_acct_sm.import</a> - Import qmail ( `virtualdomains' and `rcpthosts' ), or sendmail ( `virtusertable' and `sendmail.cw' ) files. Before running bin/svc_acct_sm.import, you need <a href="../browse/part_svc.cgi">services</a> as follows: + <li><a name="svc_acct_sm">bin/svc_acct_sm.import</a> - Import qmail ( `virtualdomains' and `rcpthosts' ), or sendmail ( `virtusertable' and `sendmail.cw' ) files. Before running bin/svc_acct_sm.import, you need <a href="../browse/part_svc.cgi">services</a> as follows: <ul> <li>Domain (table svc_acct) <li>Mail alias (table svc_acct_sm) </ul> ---> <li><a name="cust_main">Importing customer data</a> <ul> <li>Manually diff --git a/httemplate/docs/schema.dia b/httemplate/docs/schema.dia Binary files differindex 746561550..092d2f88b 100644 --- a/httemplate/docs/schema.dia +++ b/httemplate/docs/schema.dia diff --git a/httemplate/docs/schema.html b/httemplate/docs/schema.html index b38031777..cec122f44 100644 --- a/httemplate/docs/schema.html +++ b/httemplate/docs/schema.html @@ -12,9 +12,6 @@ <li>typenum - <a href="#agent_type">agent type</a> <li>prog - (unimplemented) <li>freq - (unimplemented) - <li>disabled - Disabled flag, empty or 'Y' - <li>username - Username for the Agent interface - <li>_password - Password for the Agent interface </ul> <li><a name="agent_type" href="man/FS/agent_type.html">agent_type</a> - Agent types define groups of packages that you can then assign to particular agents. <ul> @@ -42,7 +39,7 @@ <li><a name="part_bill_event" href="man/FS/part_bill_event.html">part_bill_event</a> - Invoice event definitions <ul> <li>eventpart - primary key - <li>payby - CARD, DCRD, CHEK, DCHK, LECB, BILL, or COMP + <li>payby - CARD, CHEK, LECB, BILL, or COMP <li>event - event name <li>eventcode - event action <li>seconds - how long after the invoice date (<a href="#cust_bill">cust_bill</a>._date) events of this type are triggered @@ -60,14 +57,6 @@ <li>recur - recurring fee <li>sdate - starting date <li>edate - ending date - <li>itemdesc - Line item description (currently used only when pkgnum is 0) - </ul> - <li><a name="cust_bill_pkg_detail" href="man/FS/cust_bill_pkg_detail.html">cust_bill_pkg_detail</a> - Invoice line items detail - <ul> - <li>detailnum - primary key - <li>pkgnum - - <li>invnum - - <li>detail - Detail description </ul> <li><a name="cust_credit" href="man/FS/cust_credit.html">cust_credit</a> - Credits. The equivalent of a negative <a href="#cust_bill">cust_bill</a> record. <ul> @@ -119,9 +108,8 @@ <li><i>ship_daytime</i> <li><i>ship_night</i> <li><i>ship_fax</i> - <li>payby - CARD, DCHK, CHEK, DCHK, LECB, BILL, or COMP + <li>payby - CARD, CHEK, LECB, BILL, or COMP <li>payinfo - card number, P.O.#, or comp issuer - <li>paycvv - Card Verification Value, "CVV2" (also known as CVC2 or CID), the 3 or 4 digit number on the back (or front, for American Express) of the credit card <li>paydate - expiration date <li>payname - billing name (name on card) <li>tax - tax exempt, Y or null @@ -145,9 +133,6 @@ <li>tax - % rate <li>taxclass <li>exempt_amount - <li>taxname - if defined, printed on invoices instead of "Tax" - <li>setuptax - if 'Y', this tax does not apply to setup fees - <li>recurtax - if 'Y', this tax does not apply to recurring fees </ul> <li><a name="cust_tax_exempt" href="man/FS/cust_tax_exempt.html">cust_tax_exempt</a> - Tax exemption record <ul> @@ -201,7 +186,6 @@ <li>pkgpart - <a href="#part_pkg">Package definition</a> <li>setup - date <li>bill - next bill date - <li>last_bill - last bill date <li>susp - (past) suspension date <li>expire - (future) cancellation date <li>cancel - (past) cancellation date @@ -264,7 +248,7 @@ <ul> <li>svcpart - primary key <li>svc - name of this service - <li>svcdb - table used for this service: svc_acct, svc_forward, svc_domain, svc_charge or svc_wo + <li>svcdb - table used for this service: svc_acct, svc_acct_sm, svc_forward, svc_domain, svc_charge or svc_wo <li>disabled - Disabled flag, empty or `Y' <!-- <li><i>table</i>__<i>field</i> - Default or fixed value for <i>field</i> in <i>table</i> <li><i>table</i>__<i>field</i>_flag - null, D or F @@ -283,7 +267,6 @@ <li>pkgpart - <a href="#part_pkg">Package definition</a> <li>svcpart - <a href="#part_svc">Service definition</a> <li>quantity - quantity of this service that this package includes - <li>primary_svc - blank or Y: primary service </ul> <li><a name="export_svc" href="man/FS/export_svc.html">export_svc</a> <ul> @@ -364,6 +347,13 @@ <li>npa - area code <li>nxx - exchange </ul> + <li><a name="svc_acct_sm" href="man/FS/svc_acct_sm.html">svc_acct_sm</a> - <b>DEPRECIATED</b> Domain mail aliases + <ul> + <li>svcnum - <a href="#cust_svc">primary key</a> + <li>domsvc - <a href="#svc_domain">Domain</a> (by svcnum) + <li>domuid - <a href="#svc_acct">Account</a> (by uid) + <li>domuser - domuser @ <a href="#svc_domain">Domain</a> forwards to <a href="#svc_acct">Account</a> + </ul> <li><a name="svc_domain" href="man/FS/svc_domain.html">svc_domain</a> - Domains <ul> <li>svcnum - <a href="#cust_svc">primary key</a> @@ -373,9 +363,8 @@ <ul> <li>svcnum - <a href="#cust_svc">primary key</a> <li>srcsvc - <a href="#svc_acct">svcnum of the source of this forward</a> - <li>src - literal source (username or full email address) <li>dstsvc - <a href="#svc_acct">svcnum of the destination of this forward</a> - <li>dst - literal destination (username or full email address) + <li>dst - foreign destination (email address) - forward not local to freeside </ul> <li><a name="domain_record" href="man/FS/domain_record.html">domain_record</a> - Domain zone detail <ul> diff --git a/httemplate/docs/session.html b/httemplate/docs/session.html index 72e16424e..7dac5fdf7 100644 --- a/httemplate/docs/session.html +++ b/httemplate/docs/session.html @@ -38,14 +38,9 @@ freeside-logout username ( portnum | ip | nasnum nasport )</pre> <li><i>username</i> is a customer username from the svc_acct table <li><i>portnum</i>, <i>ip</i> or <i>nasport</i> and <i>nasnum</i> uniquely identify a port in the <a href="schema.html#port">port</a> database table. </ul> - <li>RADIUS - One of: + <li>RADIUS <ul> - <li>Run the <b>freeside-sqlradius-radacctd</b> daemon to import radacct - records from all configured sqlradius exports: - <tt>freeside-sqlradius-radacctd username</tt> <li>Configure your RADIUS server's login and logout callbacks to use the command-line <tt>freeside-login</tt> and <tt>freeside-logout</tt> utilites. - <li> <i>(incomplete)</i>Use the <b>fs_radlog/fs_radlogd</b> tool to - import records from a text radacct file. </ul> </ul> <h2>Callbacks</h2> diff --git a/httemplate/docs/upgrade-1.4.2.html b/httemplate/docs/upgrade-1.4.2.html index eb40df8b3..b8c5fcf7e 100644 --- a/httemplate/docs/upgrade-1.4.2.html +++ b/httemplate/docs/upgrade-1.4.2.html @@ -14,7 +14,6 @@ <li>Install <a href="http://search.cpan.org/search?dist=Cache-Cache">Cache::Cache</a>. <li>Install <a href="http://search.cpan.org/search?dist=Net-SSH">Net::SSH</a> 0.08. <li>Install <a href="http://search.cpan.org/search?dist=Crypt-PasswdMD5">Crypt::PasswdMD5</a> - <li>Install <a href="http://search.cpan.org/search?dist=Net-Whois-Raw">Net::Whois::Raw</a> <li>CGI.pm minimum version 2.47 is required. You will probably need to install a current CGI.pm from CPAN if you are using Perl 5.005 or earlier. <li>If using Apache::ASP, add <code>PerlSetVar RequestBinaryRead Off</code> to your Apache configuration and make sure you are using Apache::ASP minimum version 2.55. <li>Run <code>make aspdocs</code> or <code>make masondocs</code>. diff --git a/httemplate/docs/upgrade10.html b/httemplate/docs/upgrade10.html deleted file mode 100644 index 205866e73..000000000 --- a/httemplate/docs/upgrade10.html +++ /dev/null @@ -1,222 +0,0 @@ -<pre> -this is incomplete - -install DBD::Pg 1.32 (or, if you're using a Perl version before 5.6, you could try installing DBD::Pg 1.22 with <a href="http://420.am/~ivan/DBD-Pg-1.22-fixvercmp.patch">this patch</a> and commenting out the "use DBD::Pg 1.32" at the top of DBIx/DBSchema/DBD/Pg.pm) -install DBIx::DBSchema 0.23 -install Net::SSH 0.08 -- If using Apache::ASP, add PerlSetVar RequestBinaryRead Off and PerlSetVar IncludesDir /your/freeside/document/root/ to your Apache configuration and make sure you are using Apache::ASP minimum version 2.55. - -install NetAddr::IP, Chart::Base, IPC::ShareLite and Locale::SubCountry - -CREATE TABLE cust_bill_pkg_detail ( - detailnum serial, - pkgnum int NOT NULL, - invnum int NOT NULL, - detail varchar(80), - PRIMARY KEY (detailnum) -); -CREATE INDEX cust_bill_pkg_detail1 ON cust_bill_pkg_detail ( pkgnum, invnum ); - -CREATE TABLE part_virtual_field ( - vfieldpart int NOT NULL, - dbtable varchar(32) NOT NULL, - name varchar(32) NOT NULL, - check_block text, - list_source text, - length integer, - label varchar(80), - PRIMARY KEY (vfieldpart) -); - -CREATE TABLE virtual_field ( - recnum integer NOT NULL, - vfieldpart integer NOT NULL, - value varchar(128) NOT NULL, - PRIMARY KEY (vfieldpart, recnum) -); - -CREATE TABLE router ( - routernum serial, - routername varchar(80), - svcnum int, - PRIMARY KEY (routernum) -); - -CREATE TABLE part_svc_router ( - svcpart int NOT NULL, - routernum int NOT NULL -); - -CREATE TABLE addr_block ( - blocknum serial, - routernum int NOT NULL, - ip_gateway varchar(15) NOT NULL, - ip_netmask int NOT NULL, - PRIMARY KEY (blocknum) -); -CREATE UNIQUE INDEX addr_block1 ON addr_block ( blocknum, routernum ); - -CREATE TABLE svc_broadband ( - svcnum int NOT NULL, - blocknum int NOT NULL, - speed_up int NOT NULL, - speed_down int NOT NULL, - ip_addr varchar(15), - PRIMARY KEY (svcnum) -); - -CREATE TABLE acct_snarf ( - snarfnum serial, - svcnum int NOT NULL, - machine varchar(255) NULL, - protocol varchar(80) NULL, - username varchar(80) NULL, - _password varchar(80) NULL, - PRIMARY KEY (snarfnum) -); -CREATE INDEX acct_snarf1 ON acct_snarf ( svcnum ); - -CREATE TABLE svc_external ( - svcnum int NOT NULL, - id int NOT NULL, - title varchar(80), - PRIMARY KEY (svcnum) -); - -CREATE TABLE part_pkg_temp ( - pkgpart serial NOT NULL, - pkg varchar(80) NOT NULL, - "comment" varchar(80) NOT NULL, - setup text NULL, - freq varchar(80) NOT NULL, - recur text NULL, - setuptax char(1) NULL, - recurtax char(1) NULL, - plan varchar(80) NULL, - plandata text NULL, - disabled char(1) NULL, - taxclass varchar(80) NULL, - PRIMARY KEY (pkgpart) -); -INSERT INTO part_pkg_temp SELECT * from part_pkg; -DROP TABLE part_pkg; -ALTER TABLE part_pkg_temp RENAME TO part_pkg; -CREATE INDEX part_pkg1 ON part_pkg(disabled); - -On modern Pg: -ALTER TABLE part_pkg DROP CONSTRAINT part_pkg_temp_pkey; -ALTER TABLE part_pkg ADD PRIMARY KEY (pkgpart); -select setval('public.part_pkg_temp_pkgpart_seq', ( select max(pkgpart) from part_pkg) ); - -Or on Pg versions that don't support DROP CONSTRAINT and ADD PRIMARY KEY (tested on 7.1 so far): -DROP INDEX part_pkg_temp_pkey; -CREATE UNIQUE INDEX part_pkg_pkey ON part_pkg (pkgpart); -select setval('part_pkg_temp_pkgpart_seq', ( select max(pkgpart) from part_pkg) ); - -CREATE TABLE h_part_pkg_temp ( - historynum serial NOT NULL, - history_date int, - history_user varchar(80) NOT NULL, - history_action varchar(80) NOT NULL, - pkgpart int NOT NULL, - pkg varchar(80) NOT NULL, - "comment" varchar(80) NOT NULL, - setup text NULL, - freq varchar(80) NOT NULL, - recur text NULL, - setuptax char(1) NULL, - recurtax char(1) NULL, - plan varchar(80) NULL, - plandata text NULL, - disabled char(1) NULL, - taxclass varchar(80) NULL, - PRIMARY KEY (historynum) -); -INSERT INTO h_part_pkg_temp SELECT * from h_part_pkg; -DROP TABLE h_part_pkg; -ALTER TABLE h_part_pkg_temp RENAME TO h_part_pkg; -CREATE INDEX h_part_pkg1 ON h_part_pkg(disabled); - -On modern Pg: -ALTER TABLE h_part_pkg DROP CONSTRAINT h_part_pkg_temp_pkey; -ALTER TABLE h_part_pkg ADD PRIMARY KEY (historynum); -select setval('public.h_part_pkg_temp_historynum_seq', ( select max(historynum) from h_part_pkg) ); - -Or on Pg versions that don't support DROP CONSTRAINT and ADD PRIMARY KEY (tested on 7.1 so far): -DROP INDEX h_part_pkg_temp_pkey; -CREATE UNIQUE INDEX h_part_pkg_pkey ON h_part_pkg (historynum); -select setval('h_part_pkg_temp_historynum_seq', ( select max(historynum) from h_part_pkg) ); - - -DROP INDEX cust_bill_pkg1; - -ALTER TABLE cust_bill_pkg ADD itemdesc varchar(80) NULL; -ALTER TABLE h_cust_bill_pkg ADD itemdesc varchar(80) NULL; -ALTER TABLE cust_main_county ADD taxname varchar(80) NULL; -ALTER TABLE h_cust_main_county ADD taxname varchar(80) NULL; -ALTER TABLE cust_main_county ADD setuptax char(1) NULL; -ALTER TABLE h_cust_main_county ADD setuptax char(1) NULL; -ALTER TABLE cust_main_county ADD recurtax char(1) NULL; -ALTER TABLE h_cust_main_county ADD recurtax char(1) NULL; -ALTER TABLE cust_pkg ADD last_bill int NULL; -ALTER TABLE h_cust_pkg ADD last_bill int NULL; -ALTER TABLE agent ADD disabled char(1) NULL; -ALTER TABLE h_agent ADD disabled char(1) NULL; -ALTER TABLE agent ADD username varchar(80) NULL; -ALTER TABLE h_agent ADD username varchar(80) NULL; -ALTER TABLE agent ADD _password varchar(80) NULL; -ALTER TABLE h_agent ADD _password varchar(80) NULL; -ALTER TABLE cust_main ADD paycvv varchar(4) NULL; -ALTER TABLE h_cust_main ADD paycvv varchar(4) NULL; -ALTER TABLE part_referral ADD disabled char(1) NULL; -ALTER TABLE h_part_referral ADD disabled char(1) NULL; -CREATE INDEX part_referral1 ON part_referral ( disabled ); -ALTER TABLE pkg_svc ADD primary_svc char(1) NULL; -ALTER TABLE h_pkg_svc ADD primary_svc char(1) NULL; -ALTER TABLE svc_forward ADD src varchar(255) NULL; -ALTER TABLE h_svc_forward ADD src varchar(255) NULL; - -On recent Pg versions: - -ALTER TABLE svc_forward ALTER COLUMN srcsvc DROP NOT NULL; -ALTER TABLE h_svc_forward ALTER COLUMN srcsvc DROP NOT NULL; -ALTER TABLE svc_forward ALTER COLUMN dstsvc DROP NOT NULL; -ALTER TABLE h_svc_forward ALTER COLUMN dstsvc DROP NOT NULL; - -Or on Pg versions that don't support DROP NOT NULL (tested on 7.1 and 7.2 so far): -UPDATE pg_attribute SET attnotnull = FALSE WHERE ( attname = 'srcsvc' OR attname = 'dstsvc' ) AND ( attrelid = ( SELECT oid FROM pg_class WHERE relname = 'svc_forward' ) OR attrelid = ( SELECT oid FROM pg_class WHERE relname = 'h_svc_forward' ) ); - -If you created your database with a version before 1.4.2, dump database, edit: -- cust_main and h_cust_main: increase otaker from 8 to 32 -- cust_main and h_cust_main: change ss from char(11) to varchar(11) ( "character(11)" to "character varying(11)" ) -- cust_credit and h_cust_credit: increase otaker from 8 to 32 -- cust_pkg and h_cust_pkg: increase otaker from 8 to 32 -- cust_refund and h_cust_refund: increase otaker from 8 to 32 -- domain_record and h_domain_record: increase reczone from 80 to 255 -- domain_record and h_domain_record: change rectype from char to varchar ( "character(5)" to "character varying(5)" ) -- domain_record and h_domain_record: increase recdata from 80 to 255 -then reload - -optionally: - - CREATE INDEX cust_main6 ON cust_main ( daytime ); - CREATE INDEX cust_main7 ON cust_main ( night ); - CREATE INDEX cust_main8 ON cust_main ( fax ); - CREATE INDEX cust_main9 ON cust_main ( ship_daytime ); - CREATE INDEX cust_main10 ON cust_main ( ship_night ); - CREATE INDEX cust_main11 ON cust_main ( ship_fax ); - CREATE INDEX agent2 ON agent ( disabled ); - CREATE INDEX part_bill_event2 ON part_bill_event ( disabled ); - CREATE INDEX cust_pay4 ON cust_pay (_date); - - serial columns - -mandatory again: - -dbdef-create username -create-history-tables username cust_bill_pkg_detail router part_svc_router addr_block svc_broadband acct_snarf svc_external -dbdef-create username - -apache - fix <Files> sections to include .html also - -</pre> diff --git a/httemplate/docs/upgrade4.html b/httemplate/docs/upgrade4.html new file mode 100644 index 000000000..1d70f8b73 --- /dev/null +++ b/httemplate/docs/upgrade4.html @@ -0,0 +1,27 @@ +<head> + <title>Upgrading to 1.2.2</title> +</head> +<body> +<h1>Upgrading to 1.2.2 from 1.2.x</h1> +<ul> + <li>If migrating from 1.0.0, see these <a href="upgrade.html">instructions</a> first. + <li>If migrating from less than 1.1.4, see these <a href="upgrade2.html">instructions</a> first. + <li>If migrating from less than 1.2.0, see these <a href="upgrade3.html">instructions</a> first. + <li>Back up your data and current Freeside installation. + <li>Install the Perl modules <a href="http://www.perl.com/CPAN/modules/by-module/Locale/">Locale-Codes</a> and <a href="http://www.perl.com/CPAN/modules/by-module/Net/">Net-Whois</a>. + <li>Apply the following changes to your database: +<pre> +ALTER TABLE cust_pay_batch CHANGE exp exp VARCHAR(11); +</pre> + <li>Copy or symlink htdocs to the new copy. + <li>Remove the symlink or directory <i>(your_site_perl_directory)</i>/FS. + <li>Change to the FS directory in the new tarball, and build and install the + Perl modules: + <pre> +$ cd FS/ +$ perl Makefile.PL +$ make +$ su +# make install</pre> + <li>Run bin/dbdef-create. This file uses MySQL-specific syntax. If you are running a different database engine you will need to modify it slightly. +</body> diff --git a/httemplate/docs/upgrade5.html b/httemplate/docs/upgrade5.html new file mode 100644 index 000000000..3f3431653 --- /dev/null +++ b/httemplate/docs/upgrade5.html @@ -0,0 +1,34 @@ +<head> + <title>Upgrading to 1.3.0</title> +</head> +<body> +<h1>Upgrading to 1.2.3 from 1.2.2</h1> +<ul> + <li>If migrating from 1.0.0, see these <a href="upgrade.html">instructions</a> first. + <li>If migrating from less than 1.1.4, see these <a href="upgrade2.html">instructions</a> first. + <li>If migrating from less than 1.2.0, see these <a href="upgrade3.html">instructions</a> first. + <li>If migrating from less than 1.2.2, see these <a href="upgrade4.html">instructions</a> first. + <li>Back up your data and current Freeside installation. + <li>Apply the following changes to your database: +<pre> +ALTER TABLE svc_acct_pop ADD loc CHAR(4); +CREATE TABLE prepay_credit ( + prepaynum int NOT NULL, + identifier varchar(80) NOT NULL, + amount decimal(10,2) NOT NULL, + PRIMARY KEY (prepaynum), + INDEX (identifier) +); +</pre> + <li>Copy or symlink htdocs to the new copy. + <li>Remove the symlink or directory <i>(your_site_perl_directory)</i>/FS. + <li>Change to the FS directory in the new tarball, and build and install the + Perl modules: + <pre> +$ cd FS/ +$ perl Makefile.PL +$ make +$ su +# make install</pre> + <li>Run bin/dbdef-create. This file uses MySQL-specific syntax. If you are running a different database engine you will need to modify it slightly. +</body> diff --git a/httemplate/docs/upgrade6.html b/httemplate/docs/upgrade6.html new file mode 100644 index 000000000..dc82975f3 --- /dev/null +++ b/httemplate/docs/upgrade6.html @@ -0,0 +1,66 @@ +<head> + <title>Upgrading to 1.3.0</title> +</head> +<body> +<h1>Upgrading to 1.3.0 from 1.2.3</h1> +<ul> + <li>If migrating from 1.0.0, see these <a href="upgrade.html">instructions</a> first. + <li>If migrating from less than 1.1.4, see these <a href="upgrade2.html">instructions</a> first. + <li>If migrating from less than 1.2.0, see these <a href="upgrade3.html">instructions</a> first. + <li>If migrating from less than 1.2.2, see these <a href="upgrade4.html">instructions</a> first. + <li>If migrating from less than 1.2.3, see these <a href="upgrade5.html">instructions</a> first. + <li>Back up your data and current Freeside installation. + <li>As 1.3.0 requires transactions, <b>MySQL's default <a href="http://www.mysql.com/doc/M/y/MyISAM.html">MyISAM</a> and <a href="http://www.mysql.com/doc/I/S/ISAM.html">ISAM</a> table types are no longer supported</b>. Converting to <a href="http://www.postgresql.org/">PostgreSQL</a> is recommended. If you really want to use MySQL, convert your tables to one of the <a href="http://www.mysql.com/doc/T/a/Table_types.html">transaction-safe table types</a> such as <a href="http://www.mysql.com/doc/B/D/BDB.html">BDB</a>. + <li>Copy the <i>invoice_template</i> file from the <i>conf/</i> directory in the distribution to your <a href="config.html">configuration directory</a>. + <li>Install the <a href="http://search.cpan.org/search?dist=Text-Template">Text-Template</a>, <a href="http://search.cpan.org/search?dist=DBIx-DBSchema">DBIx-DBSchema</a>, <a href="http://search.cpan.org/search?dist=Net-SSH">Net-SSH</a>, <a href="http://search.cpan.org/search?dist=String-ShellQuote">String-ShellQuote</a> and <a href="http://search.cpan.org/search?dist=Net-SCP">Net-SCP</a> Perl modules. + <li>Apply the following changes to your database: +<pre> +CREATE TABLE domain_record ( + recnum int NOT NULL, + svcnum int NOT NULL, + reczone varchar(80) NOT NULL, + recaf char(2) NOT NULL, + rectype char(5) NOT NULL, + recdata varchar(80) NOT NULL, + PRIMARY KEY (recnum) +); +CREATE TABLE svc_www ( + svcnum int NOT NULL, + recnum int NOT NULL, + usersvc int NOT NULL, + PRIMARY KEY (svcnum) +); +ALTER TABLE part_svc ADD svc_www__recnum varchar(80) NULL; +ALTER TABLE part_svc ADD svc_www__recnum_flag char(1) NULL; +ALTER TABLE part_svc ADD svc_www__usersvc varchar(80) NULL; +ALTER TABLE part_svc ADD svc_www__uesrsvc_flag char(1) NULL; +ALTER TABLE svc_acct CHANGE _password _password varchar(50) NULL; +ALTER TABLE svc_acct ADD seconds integer NULL; +ALTER TABLE part_svc ADD svc_acct__seconds integer NULL; +ALTER TABLE part_svc ADD svc_acct__seconds_flag char(1) NULL; +ALTER TABLE prepay_credit ADD seconds integer NULL; + +</pre> + <li>If your database supports dropping columns: +<pre> +ALTER TABLE cust_bill DROP owed; +ALTER TABLE cust_credit DROP credited; +</pre> + Or, if your database does not support dropping columns, you can do this: +<pre> +ALTER TABLE cust_bill CHANGE owed depriciated decimal(10,2); +ALTER TABLE cust_credit CHANGE credited depriciated2 decimal(10,2); +</pre> + + <li>Copy or symlink htdocs to the new copy. + <li>Remove the symlink or directory <i>(your_site_perl_directory)</i>/FS. + <li>Change to the FS directory in the new tarball, and build and install the + Perl modules: + <pre> +$ cd FS/ +$ perl Makefile.PL +$ make +$ su +# make install</pre> + <li>Run bin/dbdef-create. +</body> diff --git a/httemplate/edit/REAL_cust_pkg.cgi b/httemplate/edit/REAL_cust_pkg.cgi index d9b7579f6..ef5a6a1e9 100755 --- a/httemplate/edit/REAL_cust_pkg.cgi +++ b/httemplate/edit/REAL_cust_pkg.cgi @@ -1,6 +1,6 @@ <!-- mason kludge --> <% -# <!-- $Id: REAL_cust_pkg.cgi,v 1.7 2003-11-19 12:21:09 ivan Exp $ --> +# <!-- $Id: REAL_cust_pkg.cgi,v 1.4.4.3 2003-11-19 12:21:10 ivan Exp $ --> my $error =''; my $pkgnum = ''; diff --git a/httemplate/edit/cust_main.cgi b/httemplate/edit/cust_main.cgi index f9c80d82d..fc825af75 100755 --- a/httemplate/edit/cust_main.cgi +++ b/httemplate/edit/cust_main.cgi @@ -372,7 +372,7 @@ if ( $payby_default eq 'HIDE' ) { print qq!<INPUT TYPE="hidden" NAME="invoicing_list" VALUE="!. join(', ', $cust_main->invoicing_list). '">'; - foreach my $payby (qw( CARD DCRD CHEK DCHK LECB BILL COMP )) { + foreach my $payby (qw( CARD CHEK LECB BILL COMP )) { foreach my $field (qw( payinfo payname )) { print qq!<INPUT TYPE="hidden" NAME="${payby}_$field" VALUE="!. $cust_main->getfield($field). '">'; @@ -411,7 +411,7 @@ if ( $payby_default eq 'HIDE' ) { print qq!<TR><TD>Email invoice <INPUT TYPE="text" NAME="invoicing_list" VALUE="$invoicing_list"></TD></TR>!; print "<TR><TD>Billing type</TD></TR>", - "</TABLE>", '<SCRIPT> + "</TABLE>", '<script language="JavaScript"><!-- var mywindow = -1; function myopen(filename,windowname,properties) { myclose(); @@ -422,17 +422,8 @@ if ( $payby_default eq 'HIDE' ) { mywindow.close(); mywindow = -1; } - var achwindow = -1; - function achopen(filename,windowname,properties) { - achclose(); - achwindow = window.open(filename,windowname,properties); - } - function achclose() { - if ( achwindow != -1 ) - achwindow.close(); - achwindow = -1; - } - </SCRIPT>', + + //--></script>', &table("#cccccc"), "<TR>"; my($payinfo, $payname)=( @@ -441,10 +432,8 @@ if ( $payby_default eq 'HIDE' ) { ); my %payby = ( - 'CARD' => qq!Credit card (automatic)<BR>${r}<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="" MAXLENGTH=19><BR>${r}Exp !. expselect("CARD"). qq!<BR>${r}Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="">!, - 'DCRD' => qq!Credit card (on-demand)<BR>${r}<INPUT TYPE="text" NAME="DCRD_payinfo" VALUE="" MAXLENGTH=19><BR>${r}Exp !. expselect("DCRD"). qq!<BR>${r}Name on card<BR><INPUT TYPE="text" NAME="DCRD_payname" VALUE="">!, - 'CHEK' => qq!Electronic check (automatic)<BR>${r}Account number <INPUT TYPE="text" NAME="CHEK_payinfo1" VALUE=""><BR>${r}ABA/Routing number <INPUT TYPE="text" NAME="CHEK_payinfo2" VALUE="" SIZE=10 MAXLENGTH=9> (<A HREF="javascript:achopen('../docs/ach.html','ach','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=384,height=256')">help</A>)<INPUT TYPE="hidden" NAME="CHEK_month" VALUE="12"><INPUT TYPE="hidden" NAME="CHEK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="CHEK_payname" VALUE="">!, - 'DCHK' => qq!Electronic check (on-demand)<BR>${r}Account number <INPUT TYPE="text" NAME="DCHK_payinfo1" VALUE=""><BR>${r}ABA/Routing number <INPUT TYPE="text" NAME="DCHK_payinfo2" VALUE="" SIZE=10 MAXLENGTH=9> (<A HREF="javascript:achopen('../docs/ach.html','ach','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=384,height=256')">help</A>)<INPUT TYPE="hidden" NAME="DCHK_month" VALUE="12"><INPUT TYPE="hidden" NAME="DCHK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="DCHK_payname" VALUE="">!, + 'CARD' => qq!Credit card<BR>${r}<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="" MAXLENGTH=19><BR>${r}Exp !. expselect("CARD"). qq!<BR>${r}Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="">!, + 'CHEK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="CHEK_payinfo1" VALUE=""><BR>${r}ABA/Routing number <INPUT TYPE="text" NAME="CHEK_payinfo2" VALUE="" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="CHEK_month" VALUE="12"><INPUT TYPE="hidden" NAME="CHEK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="CHEK_payname" VALUE="">!, 'LECB' => qq!Phone bill billing<BR>${r}Phone number <INPUT TYPE="text" BANE="LECB_payinfo" VALUE="" MAXLENGTH=15 SIZE=16><INPUT TYPE="hidden" NAME="LECB_month" VALUE="12"><INPUT TYPE="hidden" NAME="LECB_year" VALUE="2037"><INPUT TYPE="hidden" NAME="LECB_payname" VALUE="">!, 'BILL' => qq!Billing<BR>P.O. <INPUT TYPE="text" NAME="BILL_payinfo" VALUE=""><BR><INPUT TYPE="hidden" NAME="BILL_month" VALUE="12"><INPUT TYPE="hidden" NAME="BILL_year" VALUE="2037">Attention<BR><INPUT TYPE="text" NAME="BILL_payname" VALUE="">!, 'COMP' => qq!Complimentary<BR>${r}Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE=""><BR>${r}Exp !. expselect("COMP"), @@ -459,10 +448,8 @@ if ( $payby_default eq 'HIDE' ) { my( $account, $aba ) = split('@', $payinfo); my %paybychecked = ( - 'CARD' => qq!Credit card (automatic)<BR>${r}<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR>${r}Exp !. expselect("CARD", $cust_main->paydate). qq!<BR>${r}Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="$payname">!, - 'DCRD' => qq!Credit card (on-demand)<BR>${r}<INPUT TYPE="text" NAME="DCRD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR>${r}Exp !. expselect("DCRD", $cust_main->paydate). qq!<BR>${r}Name on card<BR><INPUT TYPE="text" NAME="DCRD_payname" VALUE="$payname">!, - 'CHEK' => qq!Electronic check (automatic)<BR>${r}Account number <INPUT TYPE="text" NAME="CHEK_payinfo1" VALUE="$account"><BR>${r}ABA/Routing number <INPUT TYPE="text" NAME="CHEK_payinfo2" VALUE="$aba" SIZE=10 MAXLENGTH=9> (<A HREF="javascript:achopen('../docs/ach.html','ach','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=384,height=256')">help</A>)<INPUT TYPE="hidden" NAME="CHEK_month" VALUE="12"><INPUT TYPE="hidden" NAME="CHEK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="CHEK_payname" VALUE="$payname">!, - 'DCHK' => qq!Electronic check (on-demand)<BR>${r}Account number <INPUT TYPE="text" NAME="DCHK_payinfo1" VALUE="$account"><BR>${r}ABA/Routing number <INPUT TYPE="text" NAME="DCHK_payinfo2" VALUE="$aba" SIZE=10 MAXLENGTH=9> (<A HREF="javascript:achopen('../docs/ach.html','ach','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=384,height=256')">help</A>)<INPUT TYPE="hidden" NAME="DCHK_month" VALUE="12"><INPUT TYPE="hidden" NAME="DCHK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="DCHK_payname" VALUE="$payname">!, + 'CARD' => qq!Credit card<BR>${r}<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR>${r}Exp !. expselect("CARD", $cust_main->paydate). qq!<BR>${r}Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="$payname">!, + 'CHEK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="CHEK_payinfo1" VALUE="$account"><BR>${r}ABA/Routing number <INPUT TYPE="text" NAME="CHEK_payinfo2" VALUE="$aba" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="CHEK_month" VALUE="12"><INPUT TYPE="hidden" NAME="CHEK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="CHEK_payname" VALUE="$payname">!, 'LECB' => qq!Phone bill billing<BR>${r}Phone number <INPUT TYPE="text" BANE="LECB_payinfo" VALUE="$payinfo" MAXLENGTH=15 SIZE=16><INPUT TYPE="hidden" NAME="LECB_month" VALUE="12"><INPUT TYPE="hidden" NAME="LECB_year" VALUE="2037"><INPUT TYPE="hidden" NAME="LECB_payname" VALUE="">!, 'BILL' => qq!Billing<BR>P.O. <INPUT TYPE="text" NAME="BILL_payinfo" VALUE="$payinfo"><BR><INPUT TYPE="hidden" NAME="BILL_month" VALUE="12"><INPUT TYPE="hidden" NAME="BILL_year" VALUE="2037">Attention<BR><INPUT TYPE="text" NAME="BILL_payname" VALUE="$payname">!, 'COMP' => qq!Complimentary<BR>${r}Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE="$payinfo"><BR>${r}Exp !. expselect("COMP", $cust_main->paydate), @@ -478,7 +465,7 @@ if ( $payby_default eq 'HIDE' ) { $cust_main->payby($payby_default) unless $cust_main->payby; - for (qw(CARD DCRD CHEK DCHK LECB BILL COMP)) { + for (qw(CARD CHEK LECB BILL COMP)) { print qq!<TD VALIGN=TOP><INPUT TYPE="radio" NAME="payby" VALUE="$_"!; if ($cust_main->payby eq "$_") { print qq! CHECKED> $paybychecked{$_}</TD>!; diff --git a/httemplate/edit/part_bill_event.cgi b/httemplate/edit/part_bill_event.cgi index 48ed7916b..34c8e7202 100755 --- a/httemplate/edit/part_bill_event.cgi +++ b/httemplate/edit/part_bill_event.cgi @@ -41,7 +41,7 @@ print ntable("#cccccc",2), <<END; <TR><TD ALIGN="right">Payby</TD><TD><SELECT NAME="payby"> END -for (qw(CARD DCRD CHEK DCHK LECB BILL COMP)) { +for (qw(CARD CHEK LECB BILL COMP)) { print qq!<OPTION VALUE="$_"!; if ($part_bill_event->payby eq $_) { print " SELECTED>$_</OPTION>"; @@ -114,6 +114,12 @@ tie my %events, 'Tie::IxHash', 'weight' => 30, }, + 'realtime-card-cybercash' => { + 'name' => '(<b>deprecated</b>) Run card with <a href="http://www.cybercash.com/cashregister">CyberCash CashRegister</a> realtime gateway', + 'code' => '$cust_bill->realtime_card_cybercash();', + 'weight' => 30, + }, + 'realtime-lec' => { 'name' => 'Run phone bill ("LEC") billing with a <a href="http://search.cpan.org/search?mode=module&query=Business%3A%3AOnlinePayment">Business::OnlinePayment</a> realtime gateway', 'code' => '$cust_bill->realtime_lec();', diff --git a/httemplate/edit/part_pkg.cgi b/httemplate/edit/part_pkg.cgi index 8416b3546..9271222ad 100755 --- a/httemplate/edit/part_pkg.cgi +++ b/httemplate/edit/part_pkg.cgi @@ -445,7 +445,7 @@ tie my %plans, 'Tie::IxHash', }, 'fieldorder' => [qw( setup_fee recur_flat recur_included_hours recur_hourly_charge recur_included_input recur_input_charge recur_included_output recur_output_charge recur_included_total recur_total_charge )], 'setup' => 'what.setup_fee.value', - 'recur' => '\'my $last_bill = $cust_pkg->last_bill; my $hours = $cust_pkg->seconds_since_sqlradacct($last_bill, $sdate ) / 3600 - \' + what.recur_included_hours.value + \'; $hours = 0 if $hours < 0; my $input = $cust_pkg->attribute_since_sqlradacct($last_bill, $sdate, \"AcctInputOctets\" ) / 1048576; my $output = $cust_pkg->attribute_since_sqlradacct($last_bill, $sdate, \"AcctOutputOctets\" ) / 1048576; my $total = $input + $output - \' + what.recur_included_total.value + \'; $total = 0 if $total < 0; my $input = $input - \' + what.recur_included_input.value + \'; $input = 0 if $input < 0; my $output = $output - \' + what.recur_included_output.value + \'; $output = 0 if $output < 0; my $totalcharge = sprintf(\"%.2f\", \' + what.recur_total_charge.value + \' * $total); my $hourscharge = sprintf(\"%.2f\", \' + what.recur_hourly_charge.value + \' * $hours); push @details, \"Last month\\\'s excess data \". sprintf(\"%.1f\", $total). \" megs: \\\$$totalcharge\", \"Last month\\\'s excess time \". sprintf(\"%.1f\", $hours). \" hours: \\\$$hourscharge\"; \' + what.recur_flat.value + \' + $hourscharge + \' + what.recur_input_charge.value + \' * $input + \' + what.recur_output_charge.value + \' * $output + $totalcharge ;\'', + 'recur' => '\'my $last_bill = $cust_pkg->last_bill; my $hours = $cust_pkg->seconds_since_sqlradacct($last_bill, $sdate ) / 3600 - \' + what.recur_included_hours.value + \'; $hours = 0 if $hours < 0; my $input = $cust_pkg->attribute_since_sqlradacct($last_bill, $sdate, \"AcctInputOctets\" ) / 1048576; my $output = $cust_pkg->attribute_since_sqlradacct($last_bill, $sdate, \"AcctOutputOctets\" ) / 1048576; my $total = $input + $output - \' + what.recur_included_total.value + \'; $total = 0 if $total < 0; my $input = $input - \' + what.recur_included_input.value + \'; $input = 0 if $input < 0; my $output = $output - \' + what.recur_included_output.value + \'; $output = 0 if $output < 0; \' + what.recur_flat.value + \' + \' + what.recur_hourly_charge.value + \' * $hours + \' + what.recur_input_charge.value + \' * $input + \' + what.recur_output_charge.value + \' * $output + \' + what.recur_total_charge.value + \' * $total ;\'', }, 'sql_generic' => { @@ -483,36 +483,6 @@ tie my %plans, 'Tie::IxHash', #'recur' => '\'my $dbh = DBI->connect("\' + what.datasrc.value + \'", "\' + what.db_username.value + \'", "\' what.db_password.value + \'" ) or die $DBI::errstr; my $sth = $dbh->prepare("\' + what.query.value + \'") or die $dbh->errstr; my $units = 0; foreach my $cust_svc ( grep { $_->part_svc->svcdb eq "svc_domain" } $cust_pkg->cust_svc ) { my $domain = $cust_svc->svc_x->domain; $sth->execute($domain) or die $sth->errstr; $units += $sth->fetchrow_arrayref->[0]; } $units -= \' + what.recur_included.value + \'; $units = 0 if $units < 0; \' + what.recur_flat.value + \' + $units * \' + what.recur_unit_charge + \';\'', }, - - - 'sql_external' => { - 'name' => 'Base charge plus additional fees for external services from a configurable SQL query', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_flat' => { 'name' => 'Base monthly charge for this package', - 'default' => 0, - }, - 'datasrc' => { 'name' => 'DBI data source', - 'default' => '', - }, - 'db_username' => { 'name' => 'Database username', - 'default' => '', - }, - 'db_password' => { 'name' => 'Database password', - 'default' => '', - }, - 'query' => { 'name' => 'SQL query', - 'default' => '', - }, - }, - 'fieldorder' => [qw( setup_fee recur_flat datasrc db_username db_password query )], - 'setup' => 'what.setup_fee.value', - 'recur' => q!'my $dbh = DBI->connect("' + what.datasrc.value + '", "' + what.db_username.value + '", "' + what.db_password.value + '" ) or die $DBI::errstr; my $sth = $dbh->prepare("' + what.query.value + '") or die $dbh->errstr; my $price = ' + what.recur_flat.value + '; foreach my $cust_svc ( grep { $_->part_svc->svcdb eq "svc_external" } $cust_pkg->cust_svc ){ my $id = $cust_svc->svc_x->id; $sth->execute($id) or die $sth->errstr; $price += $sth->fetchrow_arrayref->[0]; } $price;'!, - - }, - ; my %plandata = map { /^(\w+)=(.*)$/; ( $1 => $2 ); } diff --git a/httemplate/edit/part_svc.cgi b/httemplate/edit/part_svc.cgi index 6868ffd65..683bf9ec5 100755 --- a/httemplate/edit/part_svc.cgi +++ b/httemplate/edit/part_svc.cgi @@ -50,10 +50,9 @@ Disable new orders <INPUT TYPE="checkbox" NAME="disabled" VALUE="Y"<%= $hashref- Services are items you offer to your customers. <UL><LI>svc_acct - Shell accounts, POP mailboxes, SLIP/PPP and ISDN accounts <LI>svc_domain - Domains + <LI>svc_acct_sm - <B>deprecated</B> (use svc_forward for new installations) Virtual domain mail aliasing. <LI>svc_forward - mail forwarding <LI>svc_www - Virtual domain website - <LI>svc_broadband - Broadband/High-speed Internet service - <LI>svc_external - Externally-tracked service <!-- <LI>svc_charge - One-time charges (Partially unimplemented) <LI>svc_wo - Work orders (Partially unimplemented) --> @@ -66,9 +65,6 @@ blank <B>slipip</B> as well as a fixed shell something like <B>/bin/true</B> or <BR><BR> <% - -my %vfields; - #these might belong somewhere else for other user interfaces #pry need to eventually create stuff that's shared amount UIs my %defs = ( @@ -108,57 +104,34 @@ my %defs = ( 'svc_domain' => { 'domain' => 'Domain', }, + 'svc_acct_sm' => { + 'domuser' => 'domuser@virtualdomain.com', + 'domuid' => 'UID where domuser@virtualdomain.com mail is forwarded', + 'domsvc' => 'svcnum from svc_domain for virtualdomain.com', + }, 'svc_forward' => { 'srcsvc' => 'service from which mail is to be forwarded', 'dstsvc' => 'service to which mail is to be forwarded', 'dst' => 'someone@another.domain.com to use when dstsvc is 0', }, -# 'svc_charge' => { -# 'amount' => 'amount', -# }, -# 'svc_wo' => { -# 'worker' => 'Worker', -# '_date' => 'Date', -# }, + 'svc_charge' => { + 'amount' => 'amount', + }, + 'svc_wo' => { + 'worker' => 'Worker', + '_date' => 'Date', + }, 'svc_www' => { #'recnum' => '', #'usersvc' => '', }, - 'svc_broadband' => { - 'speed_down' => 'Maximum download speed for this service in Kbps. 0 denotes unlimited.', - 'speed_up' => 'Maximum upload speed for this service in Kbps. 0 denotes unlimited.', - 'ip_addr' => 'IP address. Leave blank for automatic assignment.', - 'blocknum' => 'Address block.', - }, - 'svc_external' => { - #'id' => '', - #'title' => '', - }, ); - foreach my $svcdb (grep dbdef->table($_), keys %defs ) { - my $self = "FS::$svcdb"->new; - $vfields{$svcdb} = {}; - foreach my $field ($self->virtual_fields) { # svc_Common::virtual_fields with a null svcpart returns all of them - my $pvf = $self->pvf($field); - my @list = $pvf->list; - if (scalar @list) { - $defs{$svcdb}->{$field} = { desc => $pvf->label, - type => 'select', - select_list => \@list }; - } else { - $defs{$svcdb}->{$field} = $pvf->label; - } #endif - $vfields{$svcdb}->{$field} = $pvf; - warn "\$vfields{$svcdb}->{$field} = $pvf"; - } #next $field - } #next $svcdb - my @dbs = $hashref->{svcdb} ? ( $hashref->{svcdb} ) - : qw( svc_acct svc_domain svc_forward svc_www svc_broadband svc_external ); + : qw( svc_acct svc_domain svc_acct_sm svc_forward svc_www ); - tie my %svcdb, 'Tie::IxHash', map { $_=>$_ } grep dbdef->table($_), @dbs; + tie my %svcdb, 'Tie::IxHash', map { $_=>$_ } @dbs; my $widget = new HTML::Widgets::SelectLayers( #'selected_layer' => $p_svcdb, 'selected_layer' => $hashref->{svcdb} || 'svc_acct', @@ -224,27 +197,19 @@ my %defs = ( qq!<INPUT TYPE="radio" NAME="${layer}__${field}_flag" VALUE="D"!. ' CHECKED'x($flag eq 'D'). ">Default ". qq!<INPUT TYPE="radio" NAME="${layer}__${field}_flag" VALUE="F"!. - ' CHECKED'x($flag eq 'F'). ">Fixed "; - $html .= '<BR>'; + ' CHECKED'x($flag eq 'F'). ">Fixed ". + '<BR>'; } if ( ref($def) ) { if ( $def->{type} eq 'select' ) { $html .= qq!<SELECT NAME="${layer}__${field}">!; $html .= '<OPTION> </OPTION>' unless $value; - if ( $def->{select_table} ) { - foreach my $record ( qsearch( $def->{select_table}, {} ) ) { - my $rvalue = $record->getfield($def->{select_key}); - $html .= qq!<OPTION VALUE="$rvalue"!. - ( $rvalue==$value ? ' SELECTED>' : '>' ). - $record->getfield($def->{select_label}). '</OPTION>'; - } #next $record - } else { # select_list - foreach my $item ( @{$def->{select_list}} ) { - $html .= qq!<OPTION VALUE="$item"!. - ( $item eq $value ? ' SELECTED>' : '>' ). - $item. '</OPTION>'; - } #next $item - } #endif + foreach my $record ( qsearch( $def->{select_table}, {} ) ) { + my $rvalue = $record->getfield($def->{select_key}); + $html .= qq!<OPTION VALUE="$rvalue"!. + ( $rvalue==$value ? ' SELECTED>' : '>' ). + $record->getfield($def->{select_label}). '</OPTION>'; + } $html .= '</SELECT>'; } elsif ( $def->{type} eq 'radius_usergroup_selector' ) { $html .= FS::svc_acct::radius_usergroup_selector( @@ -259,11 +224,6 @@ my %defs = ( $html .= qq!<INPUT TYPE="text" NAME="${layer}__${field}" VALUE="$value">!; } - - if($vfields{$layer}->{$field}) { - $html .= qq!<BR><INPUT TYPE="radio" NAME="${layer}__${field}_flag" VALUE="X"!. - ' CHECKED'x($flag eq 'X'). ">Excluded "; - } $html .= "</TD></TR>\n"; } $part_svc->svcpart('') if $clone; #undone diff --git a/httemplate/edit/part_virtual_field.cgi b/httemplate/edit/part_virtual_field.cgi deleted file mode 100644 index fb10321e8..000000000 --- a/httemplate/edit/part_virtual_field.cgi +++ /dev/null @@ -1,92 +0,0 @@ -<!-- mason kludge --> -<% -my ($vfieldpart, $part_virtual_field); - -if ( $cgi->param('error') ) { - $part_virtual_field = new FS::part_virtual_field ( { - map { $_, scalar($cgi->param($_)) } fields('part_virtual_field')}); - $vfieldpart = $part_virtual_field->vfieldpart; -} else { - my($query) = $cgi->keywords; - if ( $query =~ /^(\d+)$/ ) { #editing - $vfieldpart=$1; - $part_virtual_field=qsearchs('part_virtual_field', - {'vfieldpart' => $vfieldpart}) - or die "Unknown vfieldpart!"; - - } else { #adding - $part_virtual_field = new FS::part_virtual_field({}); - } -} -my $action = $part_virtual_field->vfieldpart ? 'Edit' : 'Add'; - -my $p1 = popurl(1); -print header("$action Virtual Field Definition", ''); - -print qq!<FONT SIZE="+1" COLOR="#ff0000">Error: !, $cgi->param('error'), - "</FONT>" - if $cgi->param('error'); -%> -<FORM ACTION="<%=$p1%>process/generic.cgi" METHOD="POST"> - -<INPUT TYPE="hidden" NAME="table" VALUE="part_virtual_field"> -<INPUT TYPE="hidden" NAME="redirect_ok" - VALUE="<%=popurl(2)%>browse/part_virtual_field.cgi"> -<INPUT TYPE="hidden" NAME="vfieldpart" VALUE="<%= - $vfieldpart%>"> -Field #<B><%=$vfieldpart or "(NEW)"%></B><BR><BR> - -<%=ntable("#cccccc",2)%> - <TR> - <TD ALIGN="right">Name</TD> - <TD><INPUT TYPE="text" NAME="name" MAXLENGTH=15 VALUE="<%= - $part_virtual_field->name%>"></TD> - </TR> - <TR> - <TD ALIGN="right">Table</TD> - <TD><% if ($action eq 'Add') { %> - <SELECT SIZE=1 NAME="dbtable"><% - my $dbdef = dbdef; # ick - foreach my $dbtable (sort { $a cmp $b } $dbdef->tables) { - if ($dbtable !~ /^h_/ - and $dbdef->table($dbtable)->primary_key) { %> - <OPTION VALUE="<%=$dbtable%>"><%=$dbtable%></OPTION><% - } - } - %></SELECT><% - } else { # Edit - %><%=$part_virtual_field->dbtable%> - <INPUT TYPE="hidden" NAME="dbtable" VALUE="<%=$part_virtual_field->dbtable%>"> - <% } %> - </TD> - <TR> - <TD ALIGN="right">Label</TD> - <TD><INPUT TYPE="text" NAME="label" MAXLENGTH="20" VALUE="<%= - $part_virtual_field->label%>"></TD> - </TR> - <TR> - <TD ALIGN="right">Length</TD> - <TD><INPUT TYPE="text" NAME="length" MAXLENGTH=4 VALUE="<%= - $part_virtual_field->length%>"></TD> - </TR> - <TR> - <TD ALIGN="right">Check</TD> - <TD><TEXTAREA COLS="20" ROWS="4" NAME="check_block"><%= - $part_virtual_field->check_block%></TEXTAREA></TD> - </TR> - <TR> - <TD ALIGN="right">List source</TD> - <TD><TEXTAREA COLS="20" ROWS="4" NAME="list_source"><%= - $part_virtual_field->list_source%></TEXTAREA></TD> - </TR> -</TABLE><BR><INPUT TYPE="submit" VALUE="Submit"> - -</FORM> - -<BR><BR> -<FONT SIZE=-2>If you don't understand what <I>check_block</I> and -<I>list_source</I> mean, <B>LEAVE THEM BLANK</B>. We mean it.</FONT> - - -</BODY> -</HTML> diff --git a/httemplate/edit/process/addr_block/add.cgi b/httemplate/edit/process/addr_block/add.cgi deleted file mode 100755 index 34d799ccd..000000000 --- a/httemplate/edit/process/addr_block/add.cgi +++ /dev/null @@ -1,20 +0,0 @@ -<% - -my $error = ''; -my $ip_gateway = $cgi->param('ip_gateway'); -my $ip_netmask = $cgi->param('ip_netmask'); - -my $new = new FS::addr_block { - ip_gateway => $ip_gateway, - ip_netmask => $ip_netmask, - routernum => 0 }; - -$error = $new->insert; - -if ( $error ) { - $cgi->param('error', $error); - print $cgi->redirect(popurl(4). "browse/addr_block.cgi?". $cgi->query_string ); -} else { - print $cgi->redirect(popurl(4). "browse/addr_block.cgi"); -} -%> diff --git a/httemplate/edit/process/addr_block/allocate.cgi b/httemplate/edit/process/addr_block/allocate.cgi deleted file mode 100755 index 85b0d7a7a..000000000 --- a/httemplate/edit/process/addr_block/allocate.cgi +++ /dev/null @@ -1,25 +0,0 @@ -<% -my $error = ''; -my $blocknum = $cgi->param('blocknum'); -my $routernum = $cgi->param('routernum'); - -my $addr_block = qsearchs('addr_block', { blocknum => $blocknum }); -my $router = qsearchs('router', { routernum => $routernum }); - -if($addr_block) { - if ($router) { - $error = $addr_block->allocate($router); - } else { - $error = "Cannot find router with routernum $routernum"; - } -} else { - $error = "Cannot find block with blocknum $blocknum"; -} - -if ( $error ) { - $cgi->param('error', $error); - print $cgi->redirect(popurl(4). "browse/addr_block.cgi?" . $cgi->query_string); -} else { - print $cgi->redirect(popurl(4). "browse/addr_block.cgi"); -} -%> diff --git a/httemplate/edit/process/addr_block/deallocate.cgi b/httemplate/edit/process/addr_block/deallocate.cgi deleted file mode 100755 index cfb7ed04d..000000000 --- a/httemplate/edit/process/addr_block/deallocate.cgi +++ /dev/null @@ -1,24 +0,0 @@ -<% -my $error = ''; -my $blocknum = $cgi->param('blocknum'); - -my $addr_block = qsearchs('addr_block', { blocknum => $blocknum }); - -if($addr_block) { - my $router = $addr_block->router; - if ($router) { - $error = $addr_block->deallocate($router); - } else { - $error = "Block is not allocated to a router"; - } -} else { - $error = "Cannot find block with blocknum $blocknum"; -} - -if ( $error ) { - $cgi->param('error', $error); - print $cgi->redirect(popurl(4). "browse/addr_block.cgi?" . $cgi->query_string); -} else { - print $cgi->redirect(popurl(4). "browse/addr_block.cgi"); -} -%> diff --git a/httemplate/edit/process/addr_block/split.cgi b/httemplate/edit/process/addr_block/split.cgi deleted file mode 100755 index bb6d4ba3e..000000000 --- a/httemplate/edit/process/addr_block/split.cgi +++ /dev/null @@ -1,19 +0,0 @@ -<% -my $error = ''; -my $blocknum = $cgi->param('blocknum'); -my $addr_block = qsearchs('addr_block', { blocknum => $blocknum }); - -if ( $addr_block) { - $error = $addr_block->split_block; -} else { - $error = "Unknown blocknum: $blocknum"; -} - - -if ( $error ) { - $cgi->param('error', $error); - print $cgi->redirect(popurl(4). "browse/addr_block.cgi?". $cgi->query_string ); -} else { - print $cgi->redirect(popurl(4). "browse/addr_block.cgi"); -} -%> diff --git a/httemplate/edit/process/cust_main.cgi b/httemplate/edit/process/cust_main.cgi index 25c346e46..718f0e501 100755 --- a/httemplate/edit/process/cust_main.cgi +++ b/httemplate/edit/process/cust_main.cgi @@ -10,9 +10,9 @@ $cgi->param('refnum', (split(/:/, ($cgi->param('refnum'))[0] ))[0] ); my $payby = $cgi->param('payby'); if ( $payby ) { - if ( $payby eq 'CHEK' || $payby eq 'DCHK' ) { + if ( $payby eq 'CHEK' ) { $cgi->param('payinfo', - $cgi->param($payby. '_payinfo1'). '@'. $cgi->param($payby. '_payinfo2') ); + $cgi->param('CHEK_payinfo1'). '@'. $cgi->param('CHEK_payinfo2') ); } else { $cgi->param('payinfo', $cgi->param( $payby. '_payinfo' ) ); } diff --git a/httemplate/edit/process/generic.cgi b/httemplate/edit/process/generic.cgi deleted file mode 100644 index 9c54feb1d..000000000 --- a/httemplate/edit/process/generic.cgi +++ /dev/null @@ -1,70 +0,0 @@ -<% - -# Welcome to generic.cgi. -# -# This script provides a generic edit/process/ backend for simple table -# editing. All it knows how to do is take the values entered into -# the script and insert them into the table specified by $cgi->param('table'). -# If there's an existing record with the same primary key, it will be -# replaced. (Deletion will be added in the future.) -# -# Special cgi params for this script: -# table: the name of the table to be edited. The script will die horribly -# if it can't find the table. -# redirect_ok: URL to be displayed after a successful edit. The value of -# the record's primary key will be passed as a keyword. -# Defaults to (freeside root)/view/$table.cgi. -# redirect_error: URL to be displayed if there's an error. The original -# query string, plus the error message, will be passed. -# Defaults to $cgi->referer() (i.e. go back where you -# came from). - - -use FS::Record qw(qsearchs dbdef); -use DBIx::DBSchema; -use DBIx::DBSchema::Table; - - -my $error; -my $p2 = popurl(2); -my $p3 = popurl(3); -my $table = $cgi->param('table'); -my $dbdef = dbdef or die "Cannot fetch dbdef!"; - -my $dbdef_table = $dbdef->table($table) or die "Cannot fetch schema for $table"; - -my $pkey = $dbdef_table->primary_key or die "Cannot fetch pkey for $table"; -my $pkey_val = $cgi->param($pkey); - - -#warn "new FS::Record ( $table, (hashref) )"; -my $new = FS::Record::new ( "FS::$table", { - map { $_, scalar($cgi->param($_)) } fields($table) -} ); - -#warn 'created $new of class '.ref($new); - -if($pkey_val and (my $old = qsearchs($table, { $pkey, $pkey_val} ))) { - # edit - $error = $new->replace($old); -} else { - #add - $error = $new->insert; - $pkey_val = $new->getfield($pkey); - # New records usually don't have their primary keys set until after - # they've been checked/inserted, so grab the new $pkey_val so we can - # redirect to it. -} - -my $redirect_ok = (($cgi->param('redirect_ok')) ? - $cgi->param('redirect_ok') : $p3."browse/generic.cgi?$table"); -my $redirect_error = (($cgi->param('redirect_error')) ? - $cgi->param('redirect_error') : $cgi->referer()); - -if($error) { - $cgi->param('error', $error); - print $cgi->redirect($redirect_error . '?' . $cgi->query_string); -} else { - print $cgi->redirect($redirect_ok); -} -%> diff --git a/httemplate/edit/process/part_svc.cgi b/httemplate/edit/process/part_svc.cgi index 9633fabdf..859670b17 100755 --- a/httemplate/edit/process/part_svc.cgi +++ b/httemplate/edit/process/part_svc.cgi @@ -17,7 +17,7 @@ my $new = new FS::part_svc ( { push @fields, 'usergroup' if $svcdb eq 'svc_acct'; #kludge map { ( $svcdb.'__'.$_, $svcdb.'__'.$_.'_flag' ) } @fields; } grep defined( $FS::Record::dbdef->table($_) ), - qw( svc_acct svc_domain svc_forward svc_www svc_broadband ) + qw( svc_acct svc_domain svc_acct_sm svc_forward svc_www ) ) } ); diff --git a/httemplate/edit/process/router.cgi b/httemplate/edit/process/router.cgi deleted file mode 100644 index a2fa46dd9..000000000 --- a/httemplate/edit/process/router.cgi +++ /dev/null @@ -1,67 +0,0 @@ -<% - -local $FS::UID::AutoCommit=0; - -sub check { - my $error = shift; - if($error) { - $cgi->param('error', $error); - print $cgi->redirect(popurl(3) . "edit/router.cgi?". $cgi->query_string); - dbh->rollback; - exit; - } -} - -my $error = ''; -my $routernum = $cgi->param('routernum'); -my $routername = $cgi->param('routername'); -my $old = qsearchs('router', { routernum => $routernum }); -my @old_psr; - -my $new = new FS::router { - map { - ($_, scalar($cgi->param($_))); - } fields('router') -}; - -if($old) { - $error = $new->replace($old); -} else { - $error = $new->insert; - $routernum = $new->routernum; -} - -check($error); - -if ($old) { - @old_psr = $old->part_svc_router; - foreach my $psr (@old_psr) { - if($cgi->param('svcpart_'.$psr->svcpart) eq 'ON') { - # do nothing - } else { - $error = $psr->delete; - } - } - check($error); -} - -foreach($cgi->param) { - if($cgi->param($_) eq 'ON' and /^svcpart_(\d+)$/) { - my $svcpart = $1; - if(grep {$_->svcpart == $svcpart} @old_psr) { - # do nothing - } else { - my $new_psr = new FS::part_svc_router { svcpart => $svcpart, - routernum => $routernum }; - $error = $new_psr->insert; - } - check($error); - } -} - - -# Yay, everything worked! -dbh->commit or die dbh->errstr; -print $cgi->redirect(popurl(3). "browse/router.cgi"); - -%> diff --git a/httemplate/edit/process/svc_acct_sm.cgi b/httemplate/edit/process/svc_acct_sm.cgi new file mode 100755 index 000000000..41d03fb92 --- /dev/null +++ b/httemplate/edit/process/svc_acct_sm.cgi @@ -0,0 +1,34 @@ +<% + +$cgi->param('svcnum') =~ /^(\d*)$/ or die "Illegal svcnum!"; +my $svcnum =$1; + +my $old = qsearchs('svc_acct_sm',{'svcnum'=>$svcnum}) if $svcnum; + +#unmunge domsvc and domuid +#$cgi->param('domsvc',(split(/:/, $cgi->param('domsvc') ))[0] ); +#$cgi->param('domuid',(split(/:/, $cgi->param('domuid') ))[0] ); + +my $new = new FS::svc_acct_sm ( { + map { + ($_, scalar($cgi->param($_))); + #} qw(svcnum pkgnum svcpart domuser domuid domsvc) + } ( fields('svc_acct_sm'), qw( pkgnum svcpart ) ) +} ); + +my $error = ''; +if ( $svcnum ) { + $error = $new->replace($old); +} else { + $error = $new->insert; + $svcnum = $new->getfield('svcnum'); +} + +if ($error) { + $cgi->param('error', $error); + print $cgi->redirect(popurl(2). "svc_acct_sm.cgi?". $cgi->query_string ); +} else { + print $cgi->redirect(popurl(3). "view/svc_acct_sm.cgi?$svcnum"); +} + +%> diff --git a/httemplate/edit/process/svc_broadband.cgi b/httemplate/edit/process/svc_broadband.cgi deleted file mode 100644 index 4912a3a9f..000000000 --- a/httemplate/edit/process/svc_broadband.cgi +++ /dev/null @@ -1,45 +0,0 @@ -<% - -# If it's stupid but it works, it's not stupid. -# -- U.S. Army - -local $FS::UID::AutoCommit = 0; -my $dbh = FS::UID::dbh; - -$cgi->param('svcnum') =~ /^(\d*)$/ or die "Illegal svcnum!"; -my $svcnum = $1; - -my $old; -if ( $svcnum ) { - $old = qsearchs('svc_broadband', { 'svcnum' => $svcnum } ) - or die "fatal: can't find broadband service (svcnum $svcnum)!"; -} else { - $old = ''; -} - -my $new = new FS::svc_broadband ( { - map { - ($_, scalar($cgi->param($_))); - } ( fields('svc_broadband'), qw( pkgnum svcpart ) ) -} ); - -my $error; -if ( $svcnum ) { - $error = $new->replace($old); -} else { - $error = $new->insert; - $svcnum = $new->svcnum; -} - - -if ( $error ) { - $cgi->param('error', $error); - $cgi->param('ip_addr', $new->ip_addr); - $dbh->rollback; - print $cgi->redirect(popurl(2). "svc_broadband.cgi?". $cgi->query_string ); -} else { - $dbh->commit or die $dbh->errstr; - print $cgi->redirect(popurl(3). "view/svc_broadband.cgi?" . $svcnum ); -} - -%> diff --git a/httemplate/edit/process/svc_external.cgi b/httemplate/edit/process/svc_external.cgi deleted file mode 100755 index 728cd2189..000000000 --- a/httemplate/edit/process/svc_external.cgi +++ /dev/null @@ -1,29 +0,0 @@ -<% - -$cgi->param('svcnum') =~ /^(\d*)$/ or die "Illegal svcnum!"; -my $svcnum =$1; - -my $old = qsearchs('svc_external',{'svcnum'=>$svcnum}) if $svcnum; - -my $new = new FS::svc_external ( { - map { - ($_, scalar($cgi->param($_))); - } ( fields('svc_external'), qw( pkgnum svcpart ) ) -} ); - -my $error = ''; -if ( $svcnum ) { - $error = $new->replace($old); -} else { - $error = $new->insert; - $svcnum = $new->getfield('svcnum'); -} - -if ($error) { - $cgi->param('error', $error); - print $cgi->redirect(popurl(2). "svc_external.cgi?". $cgi->query_string ); -} else { - print $cgi->redirect(popurl(3). "view/svc_external.cgi?$svcnum"); -} - -%> diff --git a/httemplate/edit/router.cgi b/httemplate/edit/router.cgi deleted file mode 100755 index a573c6504..000000000 --- a/httemplate/edit/router.cgi +++ /dev/null @@ -1,77 +0,0 @@ -<HTML><BODY> - -<% - -my $router; -if ( $cgi->keywords ) { - my($query) = $cgi->keywords; - $query =~ /^(\d+)$/; - $router = qsearchs('router', { routernum => $1 }) - or print $cgi->redirect(popurl(2)."browse/router.cgi") ; -} else { - $router = new FS::router ( { - map { $_, scalar($cgi->param($_)) } fields('router') - } ); -} - -my $routernum = $router->routernum; -my $action = $routernum ? 'Edit' : 'Add'; - -print header("$action Router", menubar( - 'Main Menu' => "$p", - 'View all routers' => "${p}browse/router.cgi", -)); - -my $p3 = popurl(3); - -if($cgi->param('error')) { -%> <FONT SIZE="+1" COLOR="#ff0000">Error: <%=$cgi->param('error')%></FONT> -<% } %> - -<FORM ACTION="<%=popurl(1)%>process/router.cgi" METHOD=POST> - <INPUT TYPE="hidden" NAME="table" VALUE="router"> - <INPUT TYPE="hidden" NAME="redirect_ok" VALUE="<%=$p3%>/browse/router.cgi"> - <INPUT TYPE="hidden" NAME="redirect_error" VALUE="<%=$p3%>/edit/router.cgi"> - <INPUT TYPE="hidden" NAME="routernum" VALUE="<%=$routernum%>"> - <INPUT TYPE="hidden" NAME="svcnum" VALUE="<%=$router->svcnum%>"> - Router #<%=$routernum or "(NEW)"%> - -<BR><BR>Name <INPUT TYPE="text" NAME="routername" SIZE=32 VALUE="<%=$router->routername%>"> - -<BR><BR> -Custom fields: -<BR> -<%=table() %> - -<% -foreach my $field ($router->virtual_fields) { - print $router->pvf($field)->widget('HTML', 'edit', - $router->getfield($field)); -} -%> -</TABLE> - - -<% -unless ($router->svcnum) { -%> -<BR><BR>Select the service types available on this router<BR> -<% - - foreach my $part_svc ( qsearch('part_svc', { svcdb => 'svc_broadband', - disabled => '' }) ) { - %> - <BR> - <INPUT TYPE="checkbox" NAME="svcpart_<%=$part_svc->svcpart%>"<%= - qsearchs('part_svc_router', { svcpart => $part_svc->svcpart, - routernum => $routernum } ) ? ' CHECKED' : ''%> VALUE="ON"> - <A HREF="<%=${p}%>edit/part_svc.cgi?<%=$part_svc->svcpart%>"> - <%=$part_svc->svcpart%>: <%=$part_svc->svc%></A> - <% } %> - -<% } %> - - <BR><BR><INPUT TYPE="submit" VALUE="Apply changes"> - </FORM> -</BODY></HTML> - diff --git a/httemplate/edit/svc_acct.cgi b/httemplate/edit/svc_acct.cgi index f1b8b800b..4420bb609 100755 --- a/httemplate/edit/svc_acct.cgi +++ b/httemplate/edit/svc_acct.cgi @@ -35,6 +35,8 @@ if ( $cgi->param('error') ) { } else { #adding + $svc_acct = new FS::svc_acct({}); + foreach $_ (split(/-/,$query)) { $pkgnum=$1 if /^pkgnum(\d+)$/; $svcpart=$1 if /^svcpart(\d+)$/; @@ -42,8 +44,6 @@ if ( $cgi->param('error') ) { $part_svc = qsearchs( 'part_svc', { 'svcpart' => $svcpart } ); die "No part_svc entry for svcpart $svcpart!" unless $part_svc; - $svc_acct = new FS::svc_acct({svcpart => $svcpart}); - $svcnum=''; #set gecos @@ -281,14 +281,6 @@ if ( $part_svc->part_svc_column('usergroup')->columnflag eq "F" ) { } print '</TD></TR>'; -foreach my $field ($svc_acct->virtual_fields) { - if ( $part_svc->part_svc_column($field)->columnflag ne 'F' ) { - # If the flag is X, it won't even show up in $svc_acct->virtual_fields. - print $svc_acct->pvf($field)->widget('HTML', 'edit', - $svc_acct->getfield($field)); - } -} - #submit print qq!</TABLE><BR><INPUT TYPE="submit" VALUE="Submit">!; diff --git a/httemplate/edit/svc_acct_sm.cgi b/httemplate/edit/svc_acct_sm.cgi new file mode 100755 index 000000000..0fd5f7622 --- /dev/null +++ b/httemplate/edit/svc_acct_sm.cgi @@ -0,0 +1,178 @@ +<!-- mason kludge --> +<% + +my $conf = new FS::Conf; +my $mydomain = $conf->config('domain'); + +my($svcnum, $pkgnum, $svcpart, $part_svc, $svc_acct_sm ); +if ( $cgi->param('error') ) { + $svc_acct_sm = new FS::svc_acct_sm ( { + map { $_, scalar($cgi->param($_)) } fields('svc_acct_sm') + } ); + $svcnum = $svc_acct_sm->svcnum; + $pkgnum = $cgi->param('pkgnum'); + $svcpart = $cgi->param('svcpart'); + #$part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart}); + #die "No part_svc entry!" unless $part_svc; +} else { + my($query) = $cgi->keywords; + if ( $query =~ /^(\d+)$/ ) { #editing + $svcnum=$1; + $svc_acct_sm=qsearchs('svc_acct_sm',{'svcnum'=>$svcnum}) + or die "Unknown (svc_acct_sm) svcnum!"; + + my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum}) + or die "Unknown (cust_svc) svcnum!"; + + $pkgnum=$cust_svc->pkgnum; + $svcpart=$cust_svc->svcpart; + + #$part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart}); + #die "No part_svc entry!" unless $part_svc; + + } else { #adding + + $svc_acct_sm = new FS::svc_acct_sm({}); + + foreach $_ (split(/-/,$query)) { #get & untaint pkgnum & svcpart + $pkgnum=$1 if /^pkgnum(\d+)$/; + $svcpart=$1 if /^svcpart(\d+)$/; + } + my $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart}); + die "No part_svc entry!" unless $part_svc; + + $svcnum=''; + + #set fixed and default fields from part_svc + foreach my $part_svc_column ( + grep { $_->columnflag } $part_svc->all_part_svc_column + ) { + $svc_acct_sm->setfield( $part_svc_column->columnname, + $part_svc_column->columnvalue, + ); + } + + } +} +my $action = $svc_acct_sm->svcnum ? 'Edit' : 'Add'; + +my %username = (); +my %domain = (); +if ($pkgnum) { + + #find all possible uids (and usernames) + + my @u_acct_svcparts = (); + foreach my $u_part_svc ( qsearch('part_svc',{'svcdb'=>'svc_acct'}) ) { + push @u_acct_svcparts,$u_part_svc->getfield('svcpart'); + } + + my($cust_pkg)=qsearchs('cust_pkg',{'pkgnum'=>$pkgnum}); + my($custnum)=$cust_pkg->getfield('custnum'); + foreach my $i_cust_pkg ( qsearch('cust_pkg',{'custnum'=>$custnum}) ) { + my($cust_pkgnum)=$i_cust_pkg->getfield('pkgnum'); + my($acct_svcpart); + foreach $acct_svcpart (@u_acct_svcparts) { #now find the corresponding + #record(s) in cust_svc ( for this + #pkgnum ! ) + my($i_cust_svc); + foreach $i_cust_svc ( qsearch('cust_svc',{'pkgnum'=>$cust_pkgnum,'svcpart'=>$acct_svcpart}) ) { + my($svc_acct)=qsearchs('svc_acct',{'svcnum'=>$i_cust_svc->getfield('svcnum')}); + $username{$svc_acct->getfield('uid')}=$svc_acct->getfield('username'); + } + } + } + + #find all possible domains (and domsvc's) + + my @d_acct_svcparts = (); + foreach my $d_part_svc ( qsearch('part_svc',{'svcdb'=>'svc_domain'}) ) { + push @d_acct_svcparts,$d_part_svc->getfield('svcpart'); + } + + foreach $i_cust_pkg ( qsearch('cust_pkg',{'custnum'=>$custnum}) ) { + my($cust_pkgnum)=$i_cust_pkg->getfield('pkgnum'); + my($acct_svcpart); + foreach $acct_svcpart (@d_acct_svcparts) { + my($i_cust_svc); + foreach $i_cust_svc ( qsearch('cust_svc',{'pkgnum'=>$cust_pkgnum,'svcpart'=>$acct_svcpart}) ) { + my($svc_domain)=qsearch('svc_domain',{'svcnum'=>$i_cust_svc->getfield('svcnum')}); + $domain{$svc_domain->getfield('svcnum')}=$svc_domain->getfield('domain'); + } + } + } + +} elsif ( $action eq 'Edit' ) { + + my($svc_acct)=qsearchs('svc_acct',{'uid'=>$svc_acct_sm->domuid}); + $username{$svc_acct_sm->uid} = $svc_acct->username; + + my($svc_domain)=qsearchs('svc_domain',{'svcnum'=>$svc_acct_sm->domsvc}); + $domain{$svc_acct_sm->domsvc} = $svc_domain->domain; + +} else { + die "\$action eq Add, but \$pkgnum is null!\n"; +} + +my $p1 = popurl(1); +print header("Mail Alias $action", ''); + +print qq!<FONT SIZE="+1" COLOR="#ff0000">Error: !, $cgi->param('error'), + "</FONT>" + if $cgi->param('error'); + +print qq!<FORM ACTION="${p1}process/svc_acct_sm.cgi" METHOD=POST>!; + +#display + + #formatting + print "<PRE>"; + +#svcnum +print qq!<INPUT TYPE="hidden" NAME="svcnum" VALUE="$svcnum">!; +print qq!Service #<FONT SIZE=+1><B>!, $svcnum ? $svcnum : " (NEW)", "</B></FONT>"; + +#pkgnum +print qq!<INPUT TYPE="hidden" NAME="pkgnum" VALUE="$pkgnum">!; + +#svcpart +print qq!<INPUT TYPE="hidden" NAME="svcpart" VALUE="$svcpart">!; + +my($domuser,$domsvc,$domuid)=( + $svc_acct_sm->domuser, + $svc_acct_sm->domsvc, + $svc_acct_sm->domuid, +); + +#domuser +print qq!\n\nMail to <INPUT TYPE="text" NAME="domuser" VALUE="$domuser"> <I>( * for anything )</I>!; + +#domsvc +print qq! \@ <SELECT NAME="domsvc" SIZE=1>!; +foreach $_ (keys %domain) { + print "<OPTION", $_ eq $domsvc ? " SELECTED" : "", + qq! VALUE="$_">$domain{$_}!; +} +print "</SELECT>"; + +#uid +print qq!\nforwards to <SELECT NAME="domuid" SIZE=1>!; +foreach $_ (keys %username) { + print "<OPTION", ($_ eq $domuid) ? " SELECTED" : "", + qq! VALUE="$_">$username{$_}!; +} +print "</SELECT>\@$mydomain mailbox."; + + #formatting + print "</PRE>\n"; + +print qq!<CENTER><INPUT TYPE="submit" VALUE="Submit"></CENTER>!; + +print <<END; + + </FORM> + </BODY> +</HTML> +END + +%> diff --git a/httemplate/edit/svc_broadband.cgi b/httemplate/edit/svc_broadband.cgi deleted file mode 100644 index 9e064c5c8..000000000 --- a/httemplate/edit/svc_broadband.cgi +++ /dev/null @@ -1,175 +0,0 @@ -<!-- mason kludge --> -<% - -# If it's stupid but it works, it's still stupid. -# -Kristian - - -use HTML::Widgets::SelectLayers; -use Tie::IxHash; - -my( $svcnum, $pkgnum, $svcpart, $part_svc, $svc_broadband ); -if ( $cgi->param('error') ) { - $svc_broadband = new FS::svc_broadband ( { - map { $_, scalar($cgi->param($_)) } fields('svc_broadband'), qw(svcpart) - } ); - $svcnum = $svc_broadband->svcnum; - $pkgnum = $cgi->param('pkgnum'); - $svcpart = $svc_broadband->svcpart; - $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart}); - die "No part_svc entry!" unless $part_svc; -} else { - my($query) = $cgi->keywords; - if ( $query =~ /^(\d+)$/ ) { #editing - $svcnum=$1; - $svc_broadband=qsearchs('svc_broadband',{'svcnum'=>$svcnum}) - or die "Unknown (svc_broadband) svcnum!"; - - my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum}) - or die "Unknown (cust_svc) svcnum!"; - - $pkgnum=$cust_svc->pkgnum; - $svcpart=$cust_svc->svcpart; - - $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart}); - die "No part_svc entry!" unless $part_svc; - - } else { #adding - - foreach $_ (split(/-/,$query)) { #get & untaint pkgnum & svcpart - $pkgnum=$1 if /^pkgnum(\d+)$/; - $svcpart=$1 if /^svcpart(\d+)$/; - } - $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart}); - die "No part_svc entry!" unless $part_svc; - - $svc_broadband = new FS::svc_broadband({ svcpart => $svcpart }); - - $svcnum=''; - - #set fixed and default fields from part_svc - foreach my $part_svc_column ( - grep { $_->columnflag } $part_svc->all_part_svc_column - ) { - $svc_broadband->setfield( $part_svc_column->columnname, - $part_svc_column->columnvalue, - ); - } - - } -} -my $action = $svc_broadband->svcnum ? 'Edit' : 'Add'; - -if ($pkgnum) { - - #Nothing? - -} elsif ( $action eq 'Edit' ) { - - #Nothing? - -} else { - die "\$action eq Add, but \$pkgnum is null!\n"; -} - -my $p1 = popurl(1); - -my ($ip_addr, $speed_up, $speed_down, $blocknum) = - ($svc_broadband->ip_addr, - $svc_broadband->speed_up, - $svc_broadband->speed_down, - $svc_broadband->blocknum); - -%> - -<%=header("Broadband Service $action", '')%> - -<% if ($cgi->param('error')) { %> -<FONT SIZE="+1" COLOR="#ff0000">Error: <%=$cgi->param('error')%></FONT><BR> -<% } %> - -Service #<B><%=$svcnum ? $svcnum : "(NEW)"%></B><BR><BR> - -<FORM ACTION="<%=${p1}%>process/svc_broadband.cgi" METHOD=POST> - <INPUT TYPE="hidden" NAME="svcnum" VALUE="<%=$svcnum%>"> - <INPUT TYPE="hidden" NAME="pkgnum" VALUE="<%=$pkgnum%>"> - <INPUT TYPE="hidden" NAME="svcpart" VALUE="<%=$svcpart%>"> - - <%=&ntable("#cccccc",2)%> - <TR> - <TD ALIGN="right">IP Address</TD> - <TD BGCOLOR="#ffffff"> -<% if ( $part_svc->part_svc_column('ip_addr')->columnflag eq 'F' ) { %> - <INPUT TYPE="hidden" NAME="ip_addr" VALUE="<%=$ip_addr%>"><%=$ip_addr%> -<% } else { %> - <INPUT TYPE="text" NAME="ip_addr" VALUE="<%=$ip_addr%>"> -<% } %> - </TD> - </TR> - <TR> - <TD ALIGN="right">Download speed</TD> - <TD BGCOLOR="#ffffff"> -<% if ( $part_svc->part_svc_column('speed_down')->columnflag eq 'F' ) { %> - <INPUT TYPE="hidden" NAME="speed_down" VALUE="<%=$speed_down%>"><%=$speed_down%>Kbps -<% } else { %> - <INPUT TYPE="text" NAME="speed_down" SIZE=5 VALUE="<%=$speed_down%>">Kbps -<% } %> - </TD> - </TR> - <TR> - <TD ALIGN="right">Upload speed</TD> - <TD BGCOLOR="#ffffff"> -<% if ( $part_svc->part_svc_column('speed_up')->columnflag eq 'F' ) { %> - <INPUT TYPE="hidden" NAME="speed_up" VALUE="<%=$speed_up%>"><%=$speed_up%>Kbps -<% } else { %> - <INPUT TYPE="text" NAME="speed_up" SIZE=5 VALUE="<%=$speed_up%>">Kbps -<% } %> - </TD> - </TR> -<% if ($action eq 'Add') { %> - <TR> - <TD ALIGN="right">Router/Block</TD> - <TD BGCOLOR="#ffffff"> - <SELECT NAME="blocknum"> -<% - warn $svc_broadband->svcpart; - foreach my $router ($svc_broadband->allowed_routers) { - warn $router->routername; - foreach my $addr_block ($router->addr_block) { -%> - <OPTION VALUE="<%=$addr_block->blocknum%>"<%=($addr_block->blocknum eq $blocknum) ? ' SELECTED' : ''%>> - <%=$router->routername%>:<%=$addr_block->ip_gateway%>/<%=$addr_block->ip_netmask%></OPTION> -<% - } - } -%> - </SELECT> - </TD> - </TR> -<% } else { %> - - <TR> - <TD ALIGN="right">Router/Block</TD> - <TD BGCOLOR="#ffffff"> - <%=$svc_broadband->addr_block->router->routername%>:<%=$svc_broadband->addr_block->NetAddr%> - <INPUT TYPE="hidden" NAME="blocknum" VALUE="<%=$svc_broadband->blocknum%>"> - </TD> - </TR> - -<% } %> - -<% -foreach my $field ($svc_broadband->virtual_fields) { - if ( $part_svc->part_svc_column($field)->columnflag ne 'F' && - $part_svc->part_svc_column($field)->columnflag ne 'X') { - print $svc_broadband->pvf($field)->widget('HTML', 'edit', - $svc_broadband->getfield($field)); - } -} %> - </TABLE> - <BR> - <INPUT TYPE="submit" NAME="submit" VALUE="Submit"> -</FORM> -</BODY> -</HTML> - diff --git a/httemplate/edit/svc_external.cgi b/httemplate/edit/svc_external.cgi deleted file mode 100644 index bcfc85e3f..000000000 --- a/httemplate/edit/svc_external.cgi +++ /dev/null @@ -1,105 +0,0 @@ -<!-- mason kludge --> -<% - -my( $svcnum, $pkgnum, $svcpart, $part_svc, $svc_external ); -if ( $cgi->param('error') ) { - $svc_external = new FS::svc_external ( { - map { $_, scalar($cgi->param($_)) } fields('svc_external') - } ); - $svcnum = $svc_external->svcnum; - $pkgnum = $cgi->param('pkgnum'); - $svcpart = $cgi->param('svcpart'); - $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart}); - die "No part_svc entry!" unless $part_svc; -} else { - my($query) = $cgi->keywords; - if ( $query =~ /^(\d+)$/ ) { #editing - $svcnum=$1; - $svc_external=qsearchs('svc_external',{'svcnum'=>$svcnum}) - or die "Unknown (svc_external) svcnum!"; - - my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum}) - or die "Unknown (cust_svc) svcnum!"; - - $pkgnum=$cust_svc->pkgnum; - $svcpart=$cust_svc->svcpart; - - $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart}); - die "No part_svc entry!" unless $part_svc; - - } else { #adding - - foreach $_ (split(/-/,$query)) { #get & untaint pkgnum & svcpart - $pkgnum=$1 if /^pkgnum(\d+)$/; - $svcpart=$1 if /^svcpart(\d+)$/; - } - $svc_external = new FS::svc_external { svcpart => $svcpart }; - - $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart}); - die "No part_svc entry!" unless $part_svc; - - $svcnum=''; - - #set fixed and default fields from part_svc - foreach my $part_svc_column ( - grep { $_->columnflag } $part_svc->all_part_svc_column - ) { - $svc_external->setfield( $part_svc_column->columnname, - $part_svc_column->columnvalue, - ); - } - - } -} -my $action = $svc_external->svcnum ? 'Edit' : 'Add'; - -my $p1 = popurl(1); -print header("External service $action", ''); - -print qq!<FONT SIZE="+1" COLOR="#ff0000">Error: !, $cgi->param('error'), - "</FONT>" - if $cgi->param('error'); - -print qq!<FORM ACTION="${p1}process/svc_external.cgi" METHOD=POST>!; - -#display - - -#svcnum -print qq!<INPUT TYPE="hidden" NAME="svcnum" VALUE="$svcnum">!; -print qq!Service #<B>!, $svcnum ? $svcnum : "(NEW)", "</B><BR><BR>"; - -#pkgnum -print qq!<INPUT TYPE="hidden" NAME="pkgnum" VALUE="$pkgnum">!; - -#svcpart -print qq!<INPUT TYPE="hidden" NAME="svcpart" VALUE="$svcpart">!; - -my($id,$title)=( - $svc_external->id, - $svc_external->title, -); - -print &ntable("#cccccc",2), - '<TR><TD ALIGN="right">External ID</TD><TD>'. - qq!<INPUT TYPE="text" NAME="id" VALUE="$id">!. - '</TD></TR>'. - '<TR><TD ALIGN="right">Title</TD><TD>'. - qq!<INPUT TYPE="text" NAME="title" VALUE="$title">!. - '</TD></TR>'; - -foreach my $field ($svc_external->virtual_fields) { - if ( $part_svc->part_svc_column($field)->columnflag ne 'F' ) { - # If the flag is X, it won't even show up in $svc_acct->virtual_fields. - print $svc_external->pvf($field)->widget('HTML', 'edit', - $svc_external->getfield($field)); - } -} - -%> - -</TABLE><BR><INPUT TYPE="submit" VALUE="Submit"> - </FORM> - </BODY> -</HTML> - diff --git a/httemplate/edit/svc_forward.cgi b/httemplate/edit/svc_forward.cgi index 2b9d35ad1..6ac6a928b 100755 --- a/httemplate/edit/svc_forward.cgi +++ b/httemplate/edit/svc_forward.cgi @@ -2,6 +2,7 @@ <% my $conf = new FS::Conf; +my $mydomain = $conf->config('domain'); my($svcnum, $pkgnum, $svcpart, $part_svc, $svc_forward); if ( $cgi->param('error') ) { diff --git a/httemplate/edit/svc_www.cgi b/httemplate/edit/svc_www.cgi index ec5169e05..d2c9ade5c 100644 --- a/httemplate/edit/svc_www.cgi +++ b/httemplate/edit/svc_www.cgi @@ -29,12 +29,12 @@ if ( $cgi->param('error') ) { } else { #adding + $svc_www = new FS::svc_www({}); + foreach $_ (split(/-/,$query)) { #get & untaint pkgnum & svcpart $pkgnum=$1 if /^pkgnum(\d+)$/; $svcpart=$1 if /^svcpart(\d+)$/; } - $svc_www = new FS::svc_www { svcpart => $svcpart }; - $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart}); die "No part_svc entry!" unless $part_svc; @@ -167,14 +167,6 @@ foreach $_ (keys %username) { } print "</SELECT></TD></TR>"; -foreach my $field ($svc_www->virtual_fields) { - if ( $part_svc->part_svc_column($field)->columnflag ne 'F' ) { - # If the flag is X, it won't even show up in $svc_acct->virtual_fields. - print $svc_www->pvf($field)->widget('HTML', 'edit', - $svc_www->getfield($field)); - } -} - print '</TABLE><BR><INPUT TYPE="submit" VALUE="Submit">'; print <<END; diff --git a/httemplate/elements/calendar-setup.js b/httemplate/elements/calendar-setup.js index 0dc3caa00..6f1d7a232 100644 --- a/httemplate/elements/calendar-setup.js +++ b/httemplate/elements/calendar-setup.js @@ -19,7 +19,7 @@ * than modifying calendar.js itself). */ -// $Id: calendar-setup.js,v 1.3 2003-11-07 10:53:35 ivan Exp $ +// $Id: calendar-setup.js,v 1.1.2.2 2003-11-07 10:53:36 ivan Exp $ /** * This function "patches" an input field (or other element) to use a calendar diff --git a/httemplate/elements/calendar.js b/httemplate/elements/calendar.js index 3c028cc76..9503f3957 100644 --- a/httemplate/elements/calendar.js +++ b/httemplate/elements/calendar.js @@ -10,7 +10,7 @@ * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html */ -// $Id: calendar.js,v 1.3 2003-11-07 10:53:35 ivan Exp $ +// $Id: calendar.js,v 1.1.2.2 2003-11-07 10:53:36 ivan Exp $ /** The Calendar object constructor. */ Calendar = function (mondayFirst, dateStr, onSelected, onClose) { diff --git a/httemplate/elements/header.html b/httemplate/elements/header.html deleted file mode 100644 index 1d7bf09ab..000000000 --- a/httemplate/elements/header.html +++ /dev/null @@ -1,19 +0,0 @@ -<% - my($title, $menubar) = @_; - my $etc = @_ ? shift : ''; #$etc is for things like onLoad= etc. -%> - <HTML> - <HEAD> - <TITLE> - <%= $title %> - </TITLE> - <META HTTP-Equiv="Cache-Control" Content="no-cache"> - <META HTTP-Equiv="Pragma" Content="no-cache"> - <META HTTP-Equiv="Expires" Content="0"> - </HEAD> - <BODY BGCOLOR="#e8e8e8"<%= $etc %>> - <FONT SIZE=6> - <%= $title %> - </FONT> - <BR><BR> - <%= $menubar ? "$menubar<BR><BR>" : '' %> diff --git a/httemplate/elements/menubar.html b/httemplate/elements/menubar.html deleted file mode 100644 index 87a50312c..000000000 --- a/httemplate/elements/menubar.html +++ /dev/null @@ -1,8 +0,0 @@ -<% - my($item, $url, @html); - while (@_) { - ($item, $url) = splice(@_,0,2); - push @html, qq!<A HREF="$url">$item</A>!; - } -%> -<%= join(' | ', @html) %> diff --git a/httemplate/elements/pager.html b/httemplate/elements/pager.html deleted file mode 100644 index db9ff83bf..000000000 --- a/httemplate/elements/pager.html +++ /dev/null @@ -1,42 +0,0 @@ -<% - - my %opt = @_; - - my $pager = ''; - if ( $opt{'total'} != $opt{'num_rows'} && $opt{'maxrecords'} ) { - unless ( $opt{'offset'} == 0 ) { - $cgi->param('offset', $opt{'offset'} - $opt{'maxrecords'}); -%> - - <A HREF="<%= $cgi->self_url %>"><B><FONT SIZE="+1">Previous</FONT></B></A> - -<% - } - my $page = 0; - for ( my $poff = 0; $poff < $opt{'total'}; $poff += $opt{'maxrecords'} ) { - $page++; - if ( $opt{'offset'} == $poff ) { -%> - - <FONT SIZE="+2"><%= $page %></FONT> - -<% - } else { - $cgi->param('offset', $poff); -%> - - <A HREF="<%= $cgi->self_url %>">$page</A> - -<% - } - } - unless ( $opt{'offset'} + $opt{'maxrecords'} > $opt{'total'} ) { - $cgi->param('offset', $opt{'offset'} + $opt{'maxrecords'}); -%> - - <A HREF="<%= $cgi->self_url %>"><B><FONT SIZE="+1">Next</FONT></B></A> - -<% - } - } -%> diff --git a/httemplate/elements/small_custview.html b/httemplate/elements/small_custview.html deleted file mode 100644 index 1e8ae739a..000000000 --- a/httemplate/elements/small_custview.html +++ /dev/null @@ -1,2 +0,0 @@ -<% my $conf = new FS::Conf; %> -<%= small_custview( shift, shift || $conf->config('countrydefault') ) %> diff --git a/httemplate/elements/table.html b/httemplate/elements/table.html deleted file mode 100644 index 3b6108719..000000000 --- a/httemplate/elements/table.html +++ /dev/null @@ -1,8 +0,0 @@ -<% - my $color = shift; - if ( $color ) { -%> - <TABLE BGCOLOR="<%= $color %>" BORDER=1 WIDTH="100%" CELLSPACING=0 CELLPADDING=2 BORDERCOLOR="#999999"> -<% } else { %> - <TABLE BORDER=1 CELLSPACING=0 CELLPADDING=2 BORDERCOLOR="#999999"> -<% } %> diff --git a/httemplate/graph/money_time-graph.cgi b/httemplate/graph/money_time-graph.cgi deleted file mode 100755 index 55e8982b4..000000000 --- a/httemplate/graph/money_time-graph.cgi +++ /dev/null @@ -1,66 +0,0 @@ -<% - -#my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); -my ($curmon,$curyear) = (localtime(time))[4,5]; - -#find first month -my $syear = $cgi->param('syear') || 1899+$curyear; -my $smonth = $cgi->param('smonth') || $curmon+1; - -#find last month -my $eyear = $cgi->param('eyear') || 1900+$curyear; -my $emonth = $cgi->param('emonth') || $curmon+1; -#if ( $emonth++>12 ) { $emonth-=12; $eyear++; } - -#my @labels; -#my %data; - -my @items = qw( invoiced netsales credits receipts ); -my %label = ( - 'invoiced' => 'Gross Sales (invoiced)', - 'netsales' => 'Net Sales (invoiced - applied credits)', - 'credits' => 'Credits', - 'receipts' => 'Receipts/Cashflow (payments - refunds)', -); -my %color = ( - 'invoiced' => [ 153, 153, 255 ], #light blue - 'netsales' => [ 0, 0, 204 ], #blue - 'credits' => [ 204, 0, 0 ], #red - 'receipts' => [ 0, 204, 0 ], #green -); - -my $report = new FS::Report::Table::Monthly ( - 'items' => \@items, - 'start_month' => $smonth, - 'start_year' => $syear, - 'end_month' => $emonth, - 'end_year' => $eyear, -); -my %data = %{$report->data}; - -#my $chart = Chart::LinesPoints->new(1024,480); -#my $chart = Chart::LinesPoints->new(768,480); -my $chart = Chart::LinesPoints->new(976,384); - -my $d = 0; -$chart->set( - #'min_val' => 0, - 'legend' => 'bottom', - 'colors' => { ( map { 'dataset'.$d++ => $color{$_} } @items ), - #'grey_background' => [ 211, 211, 211 ], - 'grey_background' => 'white', - 'background' => [ 0xe8, 0xe8, 0xe8 ], #grey - }, - #'grey_background' => 'false', - 'legend_labels' => [ map { $label{$_} } @items ], - 'brush_size' => 4, - #'pt_size' => 12, -); - -my @data = map { $data{$_} } ( 'label', @items ); - -http_header('Content-Type' => 'image/png' ); - -$chart->_set_colors(); - -%><%= $chart->scalar_png(\@data) %> diff --git a/httemplate/graph/money_time.cgi b/httemplate/graph/money_time.cgi deleted file mode 100644 index e5903168d..000000000 --- a/httemplate/graph/money_time.cgi +++ /dev/null @@ -1,113 +0,0 @@ -<!-- mason kludge --> -<% - -#my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); -my ($curmon,$curyear) = (localtime(time))[4,5]; - -#find first month -my $syear = $cgi->param('syear') || 1899+$curyear; -my $smonth = $cgi->param('smonth') || $curmon+1; - -#find last month -my $eyear = $cgi->param('eyear') || 1900+$curyear; -my $emonth = $cgi->param('emonth') || $curmon+1; - -%> - -<HTML> - <HEAD> - <TITLE>Sales, Credits and Receipts Summary</TITLE> - </HEAD> -<BODY BGCOLOR="#e8e8e8"> -<IMG SRC="money_time-graph.cgi?<%= $cgi->query_string %>" WIDTH="976" HEIGHT="384"> -<BR> - -<%= table('e8e8e8') %> -<% - -my @items = qw( invoiced netsales credits receipts ); -my %label = ( - 'invoiced' => 'Gross Sales', - 'netsales' => 'Net Sales', - 'credits' => 'Credits', - 'receipts' => 'Receipts', -); -my %color = ( - 'invoiced' => '9999ff', #light blue - 'netsales' => '0000cc', #blue - 'credits' => 'cc0000', #red - 'receipts' => '00cc00', #green -); - -my $report = new FS::Report::Table::Monthly ( - 'items' => \@items, - 'start_month' => $smonth, - 'start_year' => $syear, - 'end_month' => $emonth, - 'end_year' => $eyear, -); -my $data = $report->data; - - -my @mon = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); - -%> - -<TR><TD></TD> -<% foreach my $column ( @{$data->{label}} ) { - #$column =~ s/^(\d+)\//$mon[$1-1]<BR>/e; - $column =~ s/^(\d+)\//$mon[$1-1]<BR>/; - %> - <TH><%= $column %></TH> -<% } %> -</TR> - -<% foreach my $row (@items) { %> - <TR><TH><FONT COLOR="#<%= $color{$row} %>"><%= $label{$row} %></FONT></TH> - <% foreach my $column ( @{$data->{$row}} ) { %> - <TD ALIGN="right" BGCOLOR="#ffffff"> - <FONT COLOR="#<%= $color{$row} %>">$<%= sprintf("%.2f", $column) %></FONT> - </TD> - <% } %> - </TR> -<% } %> -</TABLE> - -<BR> -<FORM METHOD="POST"> -<!-- -<INPUT TYPE="checkbox" NAME="ar"> - Accounts receivable (invoices - applied credits)<BR> -<INPUT TYPE="checkbox" NAME="charged"> - Just Invoices<BR> -<INPUT TYPE="checkbox" NAME="defer"> - Accounts receivable, with deferred revenue (invoices - applied credits, with charges for annual/semi-annual/quarterly/etc. services deferred over applicable time period) (there has got to be a shorter description for this)<BR> -<INPUT TYPE="checkbox" NAME="cash"> - Cashflow (payments - refunds)<BR> -<BR> ---> -From <SELECT NAME="smonth"> -<% foreach my $mon ( 1..12 ) { %> -<OPTION VALUE="<%= $mon %>"<%= $mon == $smonth ? ' SELECTED' : '' %>><%= $mon[$mon-1] %> -<% } %> -</SELECT> -<SELECT NAME="syear"> -<% foreach my $y ( 1999 .. 2010 ) { %> -<OPTION VALUE="<%= $y %>"<%= $y == $syear ? ' SELECTED' : '' %>><%= $y %> -<% } %> -</SELECT> - to <SELECT NAME="emonth"> -<% foreach my $mon ( 1..12 ) { %> -<OPTION VALUE="<%= $mon %>"<%= $mon == $emonth ? ' SELECTED' : '' %>><%= $mon[$mon-1] %> -<% } %> -</SELECT> -<SELECT NAME="eyear"> -<% foreach my $y ( 1999 .. 2010 ) { %> -<OPTION VALUE="<%= $y %>"<%= $y == $eyear ? ' SELECTED' : '' %>><%= $y %> -<% } %> -</SELECT> - -<INPUT TYPE="submit" VALUE="Redisplay"> -</FORM> -</BODY> -</HTML> diff --git a/httemplate/images/ach.png b/httemplate/images/ach.png Binary files differdeleted file mode 100644 index fdcd5e6ed..000000000 --- a/httemplate/images/ach.png +++ /dev/null diff --git a/httemplate/index.html b/httemplate/index.html index d8879bfb8..6624a3f47 100644 --- a/httemplate/index.html +++ b/httemplate/index.html @@ -11,8 +11,8 @@ </td><td> <font color="#ff0000" size=7>freeside main menu</font> </td><td align=right valign=bottom> - version %%%VERSION%%% - <BR><A HREF="http://www.sisd.com/freeside">Freeside home page</A> + version %%%VERSION%%% + <BR><A HREF="http://www.sisd.com/freeside">Freeside home page</A> <BR><A HREF="docs/">Documentation</A> </td></tr> </table> @@ -35,7 +35,6 @@ <BR><FORM ACTION="search/svc_acct.cgi" METHOD="POST">Username <INPUT TYPE="text" NAME="username"><SELECT NAME="username_type"><OPTION VALUE="All">(all)</OPTION><OPTION>Fuzzy</OPTION><OPTION>Substring</OPTION><OPTION SELECTED>Exact</OPTION></SELECT><INPUT TYPE="submit" VALUE="Search"> or <A HREF="search/svc_acct.cgi?username">all accounts by username</A> or <A HREF="search/svc_acct.cgi?uid">uid</A></FORM> <BR><FORM ACTION="search/svc_domain.cgi" METHOD="POST">Domain <INPUT TYPE="text" NAME="domain"><INPUT TYPE="submit" VALUE="Search"> or <A HREF="search/svc_domain.cgi?domain">all domains</A></FORM> <BR><A HREF="search/svc_forward.cgi?svcnum">all mail forwards by svcnum</A><BR> - <BR> </TD></TR> </TABLE> @@ -69,7 +68,6 @@ <LI>all invoices (<A HREF="search/cust_bill.cgi?invnum">by invoice number</A>) (<A HREF="search/cust_bill.cgi?date">by date</A>) (<A HREF="search/cust_bill.cgi?custnum">by customer number</A>) </UL> <A HREF="search/report_cust_pay.html">Payment report (by type and/or date range)</A> - <BR><BR><A HREF="graph/money_time.cgi">Sales, Credits and Receipts Summary</A> <BR><BR><A HREF="search/report_receivables.cgi">Accounts Receivable Aging Summary</A> <BR><BR><A HREF="search/report_prepaid_income.html">Prepaid Income (Unearned Revenue) Report</A> <BR><BR>(old) Financial reports (being rewritten) @@ -134,7 +132,7 @@ <UL> <LI><A HREF="search/cust_main-otaker.cgi">Search customers by order-taker</A> </UL> - <FORM ACTION="search/sql.html" METHOD="POST">SQL query: <TT>SELECT </TT><INPUT TYPE="text" NAME="sql" SIZE=32><INPUT TYPE="submit" VALUE="Query"></FORM> + <FORM ACTION="search/sql.cgi" METHOD="POST">SQL query: <TT>SELECT </TT><INPUT TYPE="text" NAME="sql" SIZE=32><INPUT TYPE="submit" VALUE="Query"></FORM> <BR> </TD></TR> @@ -185,13 +183,7 @@ <LI><A HREF="browse/svc_acct_pop.cgi">View/Edit access numbers</A> - Points of Presence <LI><A HREF="browse/part_bill_event.cgi">View/Edit invoice events</A> - Actions for overdue invoices - <LI><A HREF="browse/msgcat.cgi">View/Edit message catalog</A> - Change error messages and other customizable labels. - <LI><A HREF="browse/part_virtual_field.cgi">View/Edit virtual fields</A> - - Locally defined fields - <LI><A HREF="browse/router.cgi">View/Edit routers</A> - - Broadband access routers - <LI><A HREF="browse/addr_block.cgi">View/Edit address blocks</A> - - Manage address blocks and block assignments to broadband routers. + <LI><A HREF="browse/msgcat.cgi">View/Edit message catalog</A> - Change error messages and other customizable labels. </ul> <BR> </TD></TR> diff --git a/httemplate/misc/catchall.cgi b/httemplate/misc/catchall.cgi index 3402b61e6..9aa84be18 100755 --- a/httemplate/misc/catchall.cgi +++ b/httemplate/misc/catchall.cgi @@ -77,7 +77,7 @@ if ($pkgnum) { } # add an absence of a catchall -$email{''} = "(none)"; +$email{0} = "(none)"; my $p1 = popurl(1); print header("Domain Catchall Edit", ''); diff --git a/httemplate/misc/link.cgi b/httemplate/misc/link.cgi index 79adce88c..efc762cc5 100755 --- a/httemplate/misc/link.cgi +++ b/httemplate/misc/link.cgi @@ -4,6 +4,7 @@ my %link_field = ( 'svc_acct' => 'username', 'svc_domain' => 'domain', + 'svc_acct_sm' => '', 'svc_charge' => '', 'svc_wo' => '', ); diff --git a/httemplate/misc/meta-import.cgi b/httemplate/misc/meta-import.cgi deleted file mode 100644 index 2f3b7380d..000000000 --- a/httemplate/misc/meta-import.cgi +++ /dev/null @@ -1,64 +0,0 @@ -<!-- mason kludge --> -<%= header('Import') %> -<FORM ACTION="process/meta-import.cgi" METHOD="post" ENCTYPE="multipart/form-data"> -Import data from a DBI data source<BR><BR> - -<% - #false laziness with edit/cust_main.cgi - my @agents = qsearch( 'agent', {} ); - die "No agents created!" unless @agents; - my $agentnum = $agents[0]->agentnum; #default to first - - if ( scalar(@agents) == 1 ) { -%> - <INPUT TYPE="hidden" NAME="agentnum" VALUE="<%= $agentnum %>"> -<% } else { %> - <BR><BR>Agent <SELECT NAME="agentnum" SIZE="1"> - <% foreach my $agent (sort { $a->agent cmp $b->agent } @agents) { %> - <OPTION VALUE="<%= $agent->agentnum %>" <%= " SELECTED"x($agent->agentnum==$agentnum) %>><%= $agent->agent %></OPTION> - <% } %> - </SELECT><BR><BR> -<% } %> - -<% - my @referrals = qsearch('part_referral',{}); - die "No advertising sources created!" unless @referrals; - my $refnum = $referrals[0]->refnum; #default to first - - if ( scalar(@referrals) == 1 ) { -%> - <INPUT TYPE="hidden" NAME="refnum" VALUE="<%= $refnum %>"> -<% } else { %> - <BR><BR>Advertising source <SELECT NAME="refnum" SIZE="1"> - <% foreach my $referral ( sort { $a->referral <=> $b->referral } @referrals) { %> - <OPTION VALUE="<%= $referral->refnum %>" <%= " SELECTED"x($referral->refnum==$refnum) %>><%= $referral->refnum %>: <%= $referral->referral %></OPTION> - <% } %> - </SELECT><BR><BR> -<% } %> - - First package: <SELECT NAME="pkgpart"><OPTION VALUE="">(none)</OPTION> -<% foreach my $part_pkg ( qsearch('part_pkg',{'disabled'=>'' }) ) { %> - <OPTION VALUE="<%= $part_pkg->pkgpart %>"><%= $part_pkg->pkg. ' - '. $part_pkg->comment %></OPTION> -<% } %> -</SELECT><BR><BR> - - <table> - <tr> - <td align="right">DBI data source: </td> - <td><INPUT TYPE="text" NAME="data_source"></td> - </tr> - <tr> - <td align="right">DBI username: </td> - <td><INPUT TYPE="text" NAME="username"></td> - </tr> - <tr> - <td align="right">DBI password: </td> - <td><INPUT TYPE="text" NAME="password"></td> - </tr> - </table> - <INPUT TYPE="submit" VALUE="Import"> - - </FORM> - </BODY> -<HTML> - diff --git a/httemplate/misc/payment.cgi b/httemplate/misc/payment.cgi deleted file mode 100644 index bf89a3da7..000000000 --- a/httemplate/misc/payment.cgi +++ /dev/null @@ -1,209 +0,0 @@ -<% - my %type = ( 'CARD' => 'credit card', - 'CHEK' => 'electronic check (ACH)', - ); - - $cgi->param('payby') =~ /^(CARD|CHEK)$/ - or die "unknown payby ". $cgi->param('payby'); - my $payby = $1; - - $cgi->param('custnum') =~ /^(\d+)$/ - or die "illegal custnum ". $cgi->param('custnum'); - my $custnum = $1; - - my $cust_main = qsearchs( 'cust_main', { 'custnum'=>$custnum } ); - die "unknown custnum $custnum" unless $cust_main; - - my $balance = $cust_main->balance; - - my $payinfo = ''; - - #false laziness w/selfservice make_payment.html shortcut for one-country - my $conf = new FS::Conf; - my %states = map { $_->state => 1 } - qsearch('cust_main_county', { - 'country' => $conf->config('defaultcountry') || 'US' - } ); - my @states = sort { $a cmp $b } keys %states; - - my $paybatch = "webui-payment-". time. "-$$-". rand() * 2**32; - -%> -<%= include( '/elements/header.html', "Process $type{$payby} payment" ) %> -<%= include( '/elements/small_custview.html', $cust_main ) %> -<FORM NAME="OneTrueForm" ACTION="process/payment.cgi" METHOD="POST" onSubmit="document.OneTrueForm.process.disabled=true"> -<INPUT TYPE="hidden" NAME="custnum" VALUE="<%= $custnum %>"> -<INPUT TYPE="hidden" NAME="payby" VALUE="<%= $payby %>"> -<INPUT TYPE="hidden" NAME="paybatch" VALUE="<%= $paybatch %>"> -<SCRIPT> -var mywindow = -1; -function myopen(filename,windowname,properties) { - myclose(); - mywindow = window.open(filename,windowname,properties); -} -function myclose() { - if ( mywindow != -1 ) - mywindow.close(); - mywindow = -1; -} -var achwindow = -1; -function achopen(filename,windowname,properties) { - achclose(); - achwindow = window.open(filename,windowname,properties); -} -function achclose() { - if ( achwindow != -1 ) - achwindow.close(); - achwindow = -1; -} -</SCRIPT> -<% #include( '/elements/table.html', '#cccccc' ) %> -<%= ntable('#cccccc') %> - <TR> - <TD ALIGN="right">Payment amount</TD> - <TD> - <TABLE><TR><TD BGCOLOR="#ffffff"> - $<INPUT TYPE="text" NAME="amount" SIZE=8 VALUE="<%= $balance > 0 ? sprintf("%.2f", $balance) : '' %>"> - </TD></TR></TABLE> - </TD> - </TR> -<% if ( $payby eq 'CARD' ) { - my( $payinfo, $paycvv, $month, $year ) = ( '', '', '', '' ); - my $payname = $cust_main->first. ' '. $cust_main->getfield('last'); - my $address1 = $cust_main->address1; - my $address2 = $cust_main->address2; - my $city = $cust_main->city; - my $state = $cust_main->state; - my $zip = $cust_main->zip; - if ( $cust_main->payby =~ /^(CARD|DCRD)$/ ) { - $payinfo = $cust_main->payinfo; - $paycvv = $cust_main->paycvv; - ( $month, $year ) = $cust_main->paydate_monthyear; - $payname = $cust_main->payname if $cust_main->payname; - } -%> - <TR> - <TD ALIGN="right">Card number</TD> - <TD> - <TABLE> - <TR> - <TD> - <INPUT TYPE="text" NAME="payinfo" SIZE=20 MAXLENGTH=19 VALUE="<%=$payinfo%>"> </TD> - <TD>Exp.</TD> - <TD> - <SELECT NAME="month"> - <% for ( ( map "0$_", 1 .. 9 ), 11, 12 ) { %> - <OPTION<%= $_ eq $month ? ' SELECTED' : '' %>><%= $_ %> - <% } %> - </SELECT> - </TD> - <TD> / </TD> - <TD> - <SELECT NAME="year"> - <% my @a = localtime; for ( $a[5]+1900 .. $a[5]+1915 ) { %> - <OPTION<%= $_ eq $year ? ' SELECTED' : '' %>><%= $_ %> - <% } %> - </SELECT> - </TD> - </TR> - </TABLE> - </TD> - </TR> - <TR> - <TD ALIGN="right">CVV2</TD> - <TD><INPUT TYPE="text" NAME="paycvv" VALUE="<%= $paycvv %>" SIZE=4 MAXLENGTH=4> - (<A HREF="javascript:myopen('../docs/cvv2.html','cvv2','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=480,height=288')">help</A>) - </TD> - </TR> - <TR> - <TD ALIGN="right">Exact name on card</TD> - <TD><INPUT TYPE="text" SIZE=32 MAXLENGTH=80 NAME="payname" VALUE="<%=$payname%>"></TD> - </TR><TR> - <TD ALIGN="right">Card billing address</TD> - <TD> - <INPUT TYPE="text" SIZE=40 MAXLENGTH=80 NAME="address1" VALUE="<%=$address1%>"> - </TD> - </TR><TR> - <TD ALIGN="right">Address line 2</TD> - <TD> - <INPUT TYPE="text" SIZE=40 MAXLENGTH=80 NAME="address2" VALUE="<%=$address2%>"> - </TD> - </TR><TR> - <TD ALIGN="right">City</TD> - <TD> - <TABLE> - <TR> - <TD> - <INPUT TYPE="text" NAME="city" SIZE="12" MAXLENGTH=80 VALUE="<%=$city%>"> - </TD> - <TD>State</TD> - <TD> - <SELECT NAME="state"> - <% for ( @states ) { %> - <OPTION<%= $_ eq $state ? ' SELECTED' : '' %>><%= $_ %> - <% } %> - </SELECT> - </TD> - <TD>Zip</TD> - <TD> - <INPUT TYPE="text" NAME="zip" SIZE=11 MAXLENGTH=10 VALUE="<%=$zip%>"> - </TD> - </TR> - </TABLE> - </TD> - </TR> - -<% } elsif ( $payby eq 'CHEK' ) { - my( $payinfo1, $payinfo2, $payname, $ss ) = ( '', '', '', '' ); - if ( $cust_main->payby =~ /^(CHEK|DCHK)$/ ) { - $cust_main->payinfo =~ /^(\d+)\@(\d+)$/ - or die "unparsable payinfo ". $cust_main->payinfo; - ($payinfo1, $payinfo2) = ($1, $2); - $payname = $cust_main->payname; - $ss = $cust_main->ss; - } -%> - <INPUT TYPE="hidden" NAME="month" VALUE="12"> - <INPUT TYPE="hidden" NAME="year" VALUE="2037"> - <TR> - <TD ALIGN="right">Account number</TD> - <TD><INPUT TYPE="text" SIZE=10 NAME="payinfo1" VALUE="<%=$payinfo1%>"></TD> - </TR> - <TR> - <TD ALIGN="right">ABA/Routing number</TD> - <TD> - <INPUT TYPE="text" SIZE=10 MAXLENGTH=9 NAME="payinfo2" VALUE="<%=$payinfo2%>"> - (<A HREF="javascript:achopen('../docs/ach.html','ach','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=384,height=256')">help</A>) - </TD> - </TR> - <TR> - <TD ALIGN="right">Bank name</TD> - <TD><INPUT TYPE="text" NAME="payname" VALUE="<%=$payname%>"></TD> - </TR> - <TR> - <TD ALIGN="right"> - Account holder<BR> - Social security or tax ID # - </TD> - <TD><INPUT TYPE="text" NAME="ss" VALUE="<%=$ss%>"></TD> - </TR> - -<% } %> - -<TR> - <TD COLSPAN=2> - <INPUT TYPE="checkbox" CHECKED NAME="save" VALUE="1"> - Remember this information - </TD> -</TR><TR> - <TD COLSPAN=2> - <INPUT TYPE="checkbox"<%= $payby eq 'CARD' ? ' CHECKED' : '' %> NAME="auto" VALUE="1" onClick="if (this.checked) { document.OneTrueForm.save.checked=true; }"> - Charge future payments to this <%= $type{$payby} %> automatically - </TD> -</TR> -</TABLE> -<BR> -<INPUT TYPE="submit" NAME="process" VALUE="Process payment"> -</FORM> -</BODY> -</HTML> diff --git a/httemplate/misc/process/meta-import.cgi b/httemplate/misc/process/meta-import.cgi deleted file mode 100644 index 59d236f64..000000000 --- a/httemplate/misc/process/meta-import.cgi +++ /dev/null @@ -1,178 +0,0 @@ -<!-- mason kludge --> -<%= header('Map tables') %> - -<SCRIPT> -var gSafeOnload = new Array(); -var gSafeOnsubmit = new Array(); -window.onload = SafeOnload; -function SafeAddOnLoad(f) { - gSafeOnload[gSafeOnload.length] = f; -} -function SafeOnload() { - for (var i=0;i<gSafeOnload.length;i++) - gSafeOnload[i](); -} -function SafeAddOnSubmit(f) { - gSafeOnsubmit[gSafeOnsubmit.length] = f; -} -function SafeOnsubmit() { - for (var i=0;i<gSafeOnsubmit.length;i++) - gSafeOnsubmit[i](); -} -</SCRIPT> - -<FORM NAME="OneTrueForm" METHOD="POST" ACTION="meta-import.cgi"> - -<% - #use DBIx::DBSchema; - my $schema = new_native DBIx::DBSchema - map { $cgi->param($_) } qw( data_source username password ); - foreach my $field (qw( data_source username password )) { %> - <INPUT TYPE="hidden" NAME=<%= $field %> VALUE="<%= $cgi->param($field) %>"> - <% } - - my %schema; - use Tie::DxHash; - tie %schema, 'Tie::DxHash'; - if ( $cgi->param('schema') ) { - my $schema_string = $cgi->param('schema'); - %> <INPUT TYPE="hidden" NAME="schema" VALUE="<%=$schema_string%>"> <% - %schema = map { /^\s*(\w+)\s*=>\s*(\w+)\s*$/ - or die "guru meditation #420: $_"; - ( $1 => $2 ); - } - split( /\n/, $schema_string ); - } - - #first page - unless ( $cgi->param('magic') ) { %> - - <INPUT TYPE="hidden" NAME="magic" VALUE="process"> - <%= hashmaker('schema', [ $schema->tables ], - [ grep !/^h_/, dbdef->tables ], ) %> - <br><INPUT TYPE="submit" VALUE="done"> - <% - - #second page - } elsif ( $cgi->param('magic') eq 'process' ) { %> - - <INPUT TYPE="hidden" NAME="magic" VALUE="process2"> - <% - - my %unique; - foreach my $table ( keys %schema ) { - - my @from_columns = $schema->table($table)->columns; - my @fs_columns = dbdef->table($schema{$table})->columns; - - %> - <%= hashmaker( $table.'__'.$unique{$table}++, - \@from_columns => \@fs_columns, - $table => $schema{$table}, ) %> - <br><hr><br> - <% - - } - - %> - <br><INPUT TYPE="submit" VALUE="done"> - <% - - #third (results) - } elsif ( $cgi->param('magic') eq 'process2' ) { - - print "<pre>\n"; - - my %unique; - foreach my $table ( keys %schema ) { - ( my $spaces = $table ) =~ s/./ /g; - print "'$table' => { 'table' => '$schema{$table}',\n". - #(length($table) x ' '). " 'map' => {\n"; - "$spaces 'map' => {\n"; - my %map = map { /^\s*(\w+)\s*=>\s*(\w+)\s*$/ - or die "guru meditation #420: $_"; - ( $1 => $2 ); - } - split( /\n/, $cgi->param($table.'__'.$unique{$table}++) ); - foreach ( keys %map ) { - print "$spaces '$_' => '$map{$_}',\n"; - } - print "$spaces },\n"; - print "$spaces },\n"; - - } - print "\n</pre>"; - - } else { - warn "unrecognized magic: ". $cgi->param('magic'); - } - - %> -</FORM> -</BODY> -</HTML> - - <% - #hashmaker widget - sub hashmaker { - my($name, $from, $to, $labelfrom, $labelto) = @_; - my $fromsize = scalar(@$from); - my $tosize = scalar(@$to); - "<TABLE><TR><TH>$labelfrom</TH><TH>$labelto</TH></TR><TR><TD>". - qq!<SELECT NAME="${name}_from" SIZE=$fromsize>\n!. - join("\n", map { qq!<OPTION VALUE="$_">$_</OPTION>! } sort { $a cmp $b } @$from ). - "</SELECT>\n<BR>". - qq!<INPUT TYPE="button" VALUE="refill" onClick="repack_${name}_from()">!. - '</TD><TD>'. - qq!<SELECT NAME="${name}_to" SIZE=$tosize>\n!. - join("\n", map { qq!<OPTION VALUE="$_">$_</OPTION>! } sort { $a cmp $b } @$to ). - "</SELECT>\n<BR>". - qq!<INPUT TYPE="button" VALUE="refill" onClick="repack_${name}_to()">!. - '</TD></TR>'. - '<TR><TD COLSPAN=2>'. - qq!<INPUT TYPE="button" VALUE="map" onClick="toke_$name(this.form)">!. - '</TD></TR><TR><TD COLSPAN=2>'. - qq!<TEXTAREA NAME="$name" COLS=80 ROWS=8></TEXTAREA>!. - '</TD></TR></TABLE>'. - "<script> - function toke_$name() { - fromObject = document.OneTrueForm.${name}_from; - for (var i=fromObject.options.length-1;i>-1;i--) { - if (fromObject.options[i].selected) - fromname = deleteOption_$name(fromObject,i); - } - toObject = document.OneTrueForm.${name}_to; - for (var i=toObject.options.length-1;i>-1;i--) { - if (toObject.options[i].selected) - toname = deleteOption_$name(toObject,i); - } - document.OneTrueForm.$name.value = document.OneTrueForm.$name.value + fromname + ' => ' + toname + '\\n'; - } - function deleteOption_$name(object,index) { - value = object.options[index].value; - object.options[index] = null; - return value; - } - function repack_${name}_from() { - var object = document.OneTrueForm.${name}_from; - object.options.length = 0; - ". join("\n", - map { "addOption_$name(object, '$_');\n" } - ( sort { $a cmp $b } @$from ) ). " - } - function repack_${name}_to() { - var object = document.OneTrueForm.${name}_to; - object.options.length = 0; - ". join("\n", - map { "addOption_$name(object, '$_');\n" } - ( sort { $a cmp $b } @$to ) ). " - } - function addOption_$name(object,value) { - var length = object.length; - object.options[length] = new Option(value, value, false, false); - } - </script>". - ''; - } - -%> diff --git a/httemplate/misc/process/payment.cgi b/httemplate/misc/process/payment.cgi deleted file mode 100644 index fa0ede89c..000000000 --- a/httemplate/misc/process/payment.cgi +++ /dev/null @@ -1,148 +0,0 @@ -<% - -#some false laziness w/MyAccount::process_payment - -$cgi->param('custnum') =~ /^(\d+)$/ - or die "illegal custnum ". $cgi->param('custnum'); -my $custnum = $1; - -my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ); -die "unknown custnum $custnum" unless $cust_main; - -$cgi->param('amount') =~ /^\s*(\d*(\.\d\d)?)\s*$/ - or eidiot "illegal amount ". $cgi->param('amount'); -my $amount = $1; -eidiot "amount <= 0" unless $amount > 0; - -$cgi->param('year') =~ /^(\d+)$/ - or die "illegal year ". $cgi->param('year'); -my $year = $1; - -$cgi->param('month') =~ /^(\d+)$/ - or die "illegal month ". $cgi->param('month'); -my $month = $1; - -$cgi->param('payby') =~ /^(CARD|CHEK)$/ - or die "illegal payby ". $cgi->param('payby'); -my $payby = $1; -my %payby2bop = ( - 'CARD' => 'CC', - 'CHEK' => 'ECHECK', -); -my %payby2fields = ( - 'CARD' => [ qw( address1 address2 city state zip ) ], - 'CHEK' => [ qw( ss ) ], -); -my %type = ( 'CARD' => 'credit card', - 'CHEK' => 'electronic check (ACH)', - ); - -$cgi->param('payname') =~ /^([\w \,\.\-\']+)$/ - or eidiot gettext('illegal_name'). " payname: ". $cgi->param('payname'); -my $payname = $1; - -$cgi->param('paybatch') =~ /^([\w \!\@\#\$\%\&\(\)\-\+\;\:\'\"\,\.\?\/\=]*)$/ - or eidiot gettext('illegal_text'). " paybatch: ". $cgi->param('paybatch'); -my $paybatch = $1; - -my $payinfo; -my $paycvv = ''; -if ( $payby eq 'CHEK' ) { - - $cgi->param('payinfo1') =~ /^(\d+)$/ - or eidiot "illegal account number ". $cgi->param('payinfo1'); - my $payinfo1 = $1; - $cgi->param('payinfo2') =~ /^(\d+)$/ - or eidiot "illegal ABA/routing number ". $cgi->param('payinfo2'); - my $payinfo2 = $1; - $payinfo = $payinfo1. '@'. $payinfo2; - -} elsif ( $payby eq 'CARD' ) { - - $payinfo = $cgi->param('payinfo'); - $payinfo =~ s/\D//g; - $payinfo =~ /^(\d{13,16})$/ - or eidiot gettext('invalid_card'); # . ": ". $self->payinfo; - $payinfo = $1; - validate($payinfo) - or eidiot gettext('invalid_card'); # . ": ". $self->payinfo; - eidiot gettext('unknown_card_type') - if cardtype($payinfo) eq "Unknown"; - - if ( defined $cust_main->dbdef_table->column('paycvv') ) { - if ( length($cgi->param('paycvv') ) ) { - if ( cardtype($payinfo) eq 'American Express card' ) { - $cgi->param('paycvv') =~ /^(\d{4})$/ - or eidiot "CVV2 (CID) for American Express cards is four digits."; - $paycvv = $1; - } else { - $cgi->param('paycvv') =~ /^(\d{3})$/ - or eidiot "CVV2 (CVC2/CID) is three digits."; - $paycvv = $1; - } - } - } - -} else { - die "unknown payby $payby"; -} - -my $error = $cust_main->realtime_bop( $payby2bop{$payby}, $amount, - 'quiet' => 1, - 'payinfo' => $payinfo, - 'paydate' => "$year-$month-01", - 'payname' => $payname, - 'paybatch' => $paybatch, - 'paycvv' => $paycvv, - map { $_ => $cgi->param($_) } @{$payby2fields{$payby}} -); -eidiot($error) if $error; - -$cust_main->apply_payments; - -if ( $cgi->param('save') ) { - my $new = new FS::cust_main { $cust_main->hash }; - if ( $payby eq 'CARD' ) { - $new->set( 'payby' => ( $cgi->param('auto') ? 'CARD' : 'DCRD' ) ); - } elsif ( $payby eq 'CHEK' ) { - $new->set( 'payby' => ( $cgi->param('auto') ? 'CHEK' : 'DCHK' ) ); - } else { - die "unknown payby $payby"; - } - $new->set( 'payinfo' => $payinfo ); - $new->set( 'paydate' => "$year-$month-01" ); - $new->set( 'payname' => $payname ); - - #false laziness w/FS:;cust_main::realtime_bop - check both to make sure - # working correctly - my $conf = new FS::Conf; - if ( $payby eq 'CARD' && - grep { $_ eq cardtype($payinfo) } $conf->config('cvv-save') ) { - $new->set( 'paycvv' => $paycvv ); - } else { - $new->set( 'paycvv' => ''); - } - - $new->set( $_ => $cgi->param($_) ) foreach @{$payby2fields{$payby}}; - - my $error = $new->replace($cust_main); - eidiot "payment processed sucessfully, but error saving info: $error" - if $error; - $cust_main = $new; -} - -#success! - -%> -<%= include( '/elements/header.html', ucfirst($type{$payby}). ' processing sucessful', - include('/elements/menubar.html', - 'Main menu' => popurl(3), - "View this customer (#$custnum)" => - popurl(3). "view/cust_main.cgi?$custnum", - ), - - ) -%> -<%= include( '/elements/small_custview.html', $cust_main ) %> -</BODY> -</HTML> diff --git a/httemplate/search/cust_main.cgi b/httemplate/search/cust_main.cgi index 69a78d6fe..2b1ab83b1 100755 --- a/httemplate/search/cust_main.cgi +++ b/httemplate/search/cust_main.cgi @@ -498,9 +498,7 @@ sub cardsearch { $card =~ /^(\d{13,16})$/ or eidiot "Illegal card number\n"; my($payinfo)=$1; - [ qsearch('cust_main',{'payinfo'=>$payinfo, 'payby'=>'CARD'}), - qsearch('cust_main',{'payinfo'=>$payinfo, 'payby'=>'DCRD'}) - ]; + [ qsearch('cust_main',{'payinfo'=>$payinfo, 'payby'=>'CARD'}) ]; } sub referralsearch { diff --git a/httemplate/search/cust_pkg.cgi b/httemplate/search/cust_pkg.cgi index 6d26317e0..9deaee591 100755 --- a/httemplate/search/cust_pkg.cgi +++ b/httemplate/search/cust_pkg.cgi @@ -223,7 +223,7 @@ if ( scalar(@cust_pkg) == 1 ) { <TH><FONT SIZE=-1>Setup</FONT></TH> END - print '<TH><FONT SIZE=-1>Last<BR>bill</FONT></TH>' + print '<TH><FONT SIZE=-1>Next<BR>bill</FONT></TH>' if defined dbdef->table('cust_pkg')->column('last_bill'); print <<END; diff --git a/httemplate/search/elements/search.html b/httemplate/search/elements/search.html deleted file mode 100644 index fbedcaa26..000000000 --- a/httemplate/search/elements/search.html +++ /dev/null @@ -1,59 +0,0 @@ -<% - - my %opt = @_; - unless (exists($opt{'count_query'}) && length($opt{'count_query'})) { - ( $opt{'count_query'} = $opt{'query'} ) =~ - s/^\s*SELECT\s*(.*)\s+FROM\s/SELECT COUNT(*) FROM /i; - } - - my $conf = new FS::Conf; - my $maxrecords = $conf->config('maxsearchrecordsperpage'); - - my $limit = $maxrecords ? "LIMIT $maxrecords" : ''; - - my $offset = $cgi->param('offset') || 0; - $limit .= " OFFSET $offset" if $offset; - - my $count_sth = dbh->prepare($opt{'count_query'}) - or die "Error preparing $opt{'count_query'}: ". dbh->errstr; - $count_sth->execute - or die "Error executing $opt{'count_query'}: ". $count_sth->errstr; - my $total = $count_sth->fetchrow_arrayref->[0]; - - my $sth = dbh->prepare("$opt{'query'} $limit") - or die "Error preparing $opt{'query'}: ". dbh->errstr; - $sth->execute - or die "Error executing $opt{'query'}: ". $sth->errstr; - - #can get # of rows without fetching them all? - my $rows = $sth->fetchall_arrayref; - -%> -<!-- mason kludge --> -<% my $pager = include ( '/elements/pager.html', - 'offset' => $offset, - 'num_rows' => scalar(@$rows), - 'total' => $total, - 'maxrecords' => $maxrecords, - ); -%> - -<%= $total %> total <%= $opt{'name'} %><BR><BR><%= $pager %> -<%= include( '/elements/table.html' ) %> - <TR> - <% foreach ( @{$sth->{NAME}} ) { %> - <TH><%= $_ %></TH> - <% } %> - </TR> - <% foreach my $row ( @$rows ) { %> - <TR> - <% foreach ( @$row ) { %> - <TD><%= $_ %></TD> - <% } %> - </TR> - <% } %> - -</TABLE> -<%= $pager %> -</BODY> -</HTML> diff --git a/httemplate/search/report_cc.cgi b/httemplate/search/report_cc.cgi index c2ab726b6..ff8c1fb0b 100755 --- a/httemplate/search/report_cc.cgi +++ b/httemplate/search/report_cc.cgi @@ -1,7 +1,8 @@ <!-- mason kludge --> <% -my $user = getotaker; +#my $user = getotaker; +my $user = $FS::UID::user; #dumb 1.4 8-char workaround $cgi->param('beginning') =~ /^([ 0-9\-\/]{0,10})$/; my $beginning = $1; diff --git a/httemplate/search/report_credit.cgi b/httemplate/search/report_credit.cgi index 2adafc06e..05017f4a9 100755 --- a/httemplate/search/report_credit.cgi +++ b/httemplate/search/report_credit.cgi @@ -1,7 +1,8 @@ <!-- mason kludge --> <% -my $user = getotaker; +#my $user = getotaker; +my $user = $FS::UID::user; #dumb 1.4 8-char workaround $cgi->param('beginning') =~ /^([ 0-9\-\/]{0,10})$/; my $beginning = $1; diff --git a/httemplate/search/report_tax.cgi b/httemplate/search/report_tax.cgi index ac76fad6e..835554a2e 100755 --- a/httemplate/search/report_tax.cgi +++ b/httemplate/search/report_tax.cgi @@ -1,7 +1,8 @@ <!-- mason kludge --> <% -my $user = getotaker; +#my $user = getotaker; +my $user = $FS::UID::user; #dumb 1.4 8-char workaround $cgi->param('beginning') =~ /^([ 0-9\-\/]{0,10})$/; my $beginning = $1; diff --git a/httemplate/search/sql.cgi b/httemplate/search/sql.cgi new file mode 100755 index 000000000..b83ef039f --- /dev/null +++ b/httemplate/search/sql.cgi @@ -0,0 +1,76 @@ +<% + +my $conf = new FS::Conf; +my $maxrecords = $conf->config('maxsearchrecordsperpage'); + +my $limit = ''; +$limit .= "LIMIT $maxrecords" if $maxrecords; + +my $offset = $cgi->param('offset') || 0; +$limit .= " OFFSET $offset" if $offset; + +my $total; + +my $sql = $cgi->param('sql'); +$sql =~ s/^\s*SELECT//i; + +my $count_sql = $sql; +$count_sql =~ s/^(.*)\s+FROM\s/COUNT(*) FROM /i; + +my $sth = dbh->prepare("SELECT $count_sql") + or eidiot dbh->errstr. " doing $count_sql\n"; +$sth->execute or eidiot "Error executing \"$count_sql\": ". $sth->errstr; + +$total = $sth->fetchrow_arrayref->[0]; + +my $sth = dbh->prepare("SELECT $sql $limit") + or eidiot dbh->errstr. " doing $sql\n"; +$sth->execute or eidiot "Error executing \"$sql\": ". $sth->errstr; +my $rows = $sth->fetchall_arrayref; + +%> +<!-- mason kludge --> +<% + + #begin pager + my $pager = ''; + if ( $total != scalar(@$rows) && $maxrecords ) { + unless ( $offset == 0 ) { + $cgi->param('offset', $offset - $maxrecords); + $pager .= '<A HREF="'. $cgi->self_url. + '"><B><FONT SIZE="+1">Previous</FONT></B></A> '; + } + my $poff; + my $page; + for ( $poff = 0; $poff < $total; $poff += $maxrecords ) { + $page++; + if ( $offset == $poff ) { + $pager .= qq!<FONT SIZE="+2">$page</FONT> !; + } else { + $cgi->param('offset', $poff); + $pager .= qq!<A HREF="!. $cgi->self_url. qq!">$page</A> !; + } + } + unless ( $offset + $maxrecords > $total ) { + $cgi->param('offset', $offset + $maxrecords); + $pager .= '<A HREF="'. $cgi->self_url. + '"><B><FONT SIZE="+1">Next</FONT></B></A> '; + } + } + #end pager + + print header('Query Results', menubar('Main Menu'=>$p) ). + "$total total rows<BR><BR>$pager". table(). + "<TR>"; + print "<TH>$_</TH>" foreach @{$sth->{NAME}}; + print "</TR>"; + + foreach $row ( @$rows ) { + print "<TR>"; + print "<TD>$_</TD>" foreach @$row; + print "</TR>"; + } + + print "</TABLE>$pager</BODY></HTML>"; + +%> diff --git a/httemplate/search/sql.html b/httemplate/search/sql.html deleted file mode 100644 index 7d7fc0890..000000000 --- a/httemplate/search/sql.html +++ /dev/null @@ -1,12 +0,0 @@ -<%= include( '/elements/header.html', 'Query Results', - include( '/elements/menubar.html', 'Main Menu' => $p ) - ) -%> - -<%= include( 'elements/search.html', - 'name' => 'rows', - 'query' => 'SELECT '. ( $cgi->param('sql') - || eidiot('Empty query') ), - ) -%> - diff --git a/httemplate/search/svc_acct.cgi b/httemplate/search/svc_acct.cgi index 1e4a03d84..29e851d91 100755 --- a/httemplate/search/svc_acct.cgi +++ b/httemplate/search/svc_acct.cgi @@ -1,5 +1,7 @@ <% +my $mydomain = ''; + my $conf = new FS::Conf; my $maxrecords = $conf->config('maxsearchrecordsperpage'); @@ -162,8 +164,14 @@ END $domain = "<A HREF=\"${p}view/svc_domain.cgi?". $svc_domain->svcnum. "\">". $svc_domain->domain. "</A>"; } else { - die "No svc_domain.svcnum record for svc_acct.domsvc: ". - $svc_acct->domsvc; + unless ( $mydomain ) { + my $conf = new FS::Conf; + unless ( $mydomain = $conf->config('domain') ) { + die "No legacy domain config file and no svc_domain.svcnum record ". + "for svc_acct.domsvc: ". $svc_acct->domsvc; + } + } + $domain = "<i>$mydomain</i><FONT COLOR=\"#FF0000\">*</FONT>"; } my($cust_pkg,$cust_main); if ( $cust_svc->pkgnum ) { @@ -225,8 +233,17 @@ END } - print "</TABLE>$pager<BR>". - '</BODY></HTML>'; + print "</TABLE>$pager<BR>"; + + if ( $mydomain ) { + print "<BR><FONT COLOR=\"#FF0000\">*</FONT> The <I>$mydomain</I> domain ". + "is contained in your legacy <CODE>domain</CODE> ". + "<A HREF=\"${p}docs/config.html#domain\">configuration file</A>. ". + "You should run the <CODE>bin/fs-migrate-svc_acct_sm</CODE> script ". + "to create a proper svc_domain record for this domain."; + } + + print '</BODY></HTML>'; } diff --git a/httemplate/search/svc_acct_sm.cgi b/httemplate/search/svc_acct_sm.cgi new file mode 100755 index 000000000..4ee300612 --- /dev/null +++ b/httemplate/search/svc_acct_sm.cgi @@ -0,0 +1,84 @@ +<% + +my $conf = new FS::Conf; +my $mydomain = $conf->config('domain'); + +$cgi->param('domuser') =~ /^([a-z0-9_\-]{0,32})$/; +my $domuser = $1; + +$cgi->param('domain') =~ /^([\w\-\.]+)$/ or die "Illegal domain"; +my $svc_domain = qsearchs('svc_domain',{'domain'=>$1}) + or die "Unknown domain"; +my $domsvc = $svc_domain->svcnum; + +my @svc_acct_sm; +if ($domuser) { + @svc_acct_sm=qsearch('svc_acct_sm',{ + 'domuser' => $domuser, + 'domsvc' => $domsvc, + }); +} else { + @svc_acct_sm=qsearch('svc_acct_sm',{'domsvc' => $domsvc}); +} + +if ( scalar(@svc_acct_sm) == 1 ) { + my($svcnum)=$svc_acct_sm[0]->svcnum; + print $cgi->redirect(popurl(2). "view/svc_acct_sm.cgi?$svcnum"); +} elsif ( scalar(@svc_acct_sm) > 1 ) { +%> +<!-- mason kludge --> +<% + print header('Mail Alias Search Results'), &table(), <<END; + <TR> + <TH>Mail to<BR><FONT SIZE=-1>(click to view mail alias)</FONT></TH> + <TH>Forwards to<BR><FONT SIZE=-1>(click to view account)</FONT></TH> + </TR> +END + + my($svc_acct_sm); + foreach $svc_acct_sm (@svc_acct_sm) { + my($svcnum,$domuser,$domuid,$domsvc)=( + $svc_acct_sm->svcnum, + $svc_acct_sm->domuser, + $svc_acct_sm->domuid, + $svc_acct_sm->domsvc, + ); + + my $svc_domain = qsearchs( 'svc_domain', { 'svcnum' => $domsvc } ); + if ( $svc_domain ) { + my $domain = $svc_domain->domain; + + print qq!<TR><TD><A HREF="!. popurl(2). qq!view/svc_acct_sm.cgi?$svcnum">!, + #print '', ( ($domuser eq '*') ? "<I>(anything)</I>" : $domuser ); + ( ($domuser eq '*') ? "<I>(anything)</I>" : $domuser ), + qq!\@$domain</A> </TD>!, + ; + } else { + my $warning = "couldn't find svc_domain.svcnum $svcnum ( svc_acct_sm.svcnum $svcnum"; + warn $warning; + print "<TR><TD>WARNING: $warning</TD>"; + } + + my $svc_acct = qsearchs( 'svc_acct', { 'uid' => $domuid } ); + if ( $svc_acct ) { + my $username = $svc_acct->username; + my $svc_acct_svcnum =$svc_acct->svcnum; + print qq!<TD><A HREF="!, popurl(2), + qq!view/svc_acct.cgi?$svc_acct_svcnum">$username\@$mydomain</A>!, + qq!</TD></TR>! + ; + } else { + my $warning = "couldn't find svc_acct.uid $domuid (svc_acct_sm.svcnum $svcnum)!"; + warn $warning; + print "<TD>WARNING: $warning</TD></TR>"; + } + + } + + print '</TABLE></BODY></HTML>'; + +} else { #error + idiot("Mail Alias not found"); +} + +%> diff --git a/httemplate/search/svc_acct_sm.html b/httemplate/search/svc_acct_sm.html new file mode 100755 index 000000000..0719856db --- /dev/null +++ b/httemplate/search/svc_acct_sm.html @@ -0,0 +1,23 @@ +<HTML> + <HEAD> + <TITLE>Mail Alias Search</TITLE> + </HEAD> + <BODY> + <CENTER> + <H1>Mail Alias Search</H1> + </CENTER> + <HR> + <FORM ACTION="svc_acct_sm.cgi" METHOD="post"> + Search for <B>mail alias</B>: + <INPUT TYPE="text" NAME="domuser"><FONT SIZE=-1>(opt.)</FONT> @ + <INPUT TYPE="text" NAME="domain"><FONT SIZE=-1>(req.)</FONT> + + <P><INPUT TYPE="submit" VALUE="Search"> + + </FORM> + + <HR> + + </BODY> +</HTML> + diff --git a/httemplate/search/svc_domain.cgi b/httemplate/search/svc_domain.cgi index 948b1d9ae..cd78dc128 100755 --- a/httemplate/search/svc_domain.cgi +++ b/httemplate/search/svc_domain.cgi @@ -1,6 +1,7 @@ <% my $conf = new FS::Conf; +my $mydomain = $conf->config('domain'); my($query)=$cgi->keywords; $query ||= ''; #to avoid use of unitialized value errors @@ -74,6 +75,18 @@ END $svc_domain->svcnum, $svc_domain->domain, ); + #my($malias); + #if ( qsearch('svc_acct_sm',{'domsvc'=>$svcnum}) ) { + # $malias=( + # qq|<FORM ACTION="svc_acct_sm.cgi" METHOD="post">|. + # qq|<INPUT TYPE="hidden" NAME="domuser" VALUE="">|. + # qq|<INPUT TYPE="hidden" NAME="domain" VALUE="$domain">|. + # qq|<INPUT TYPE="submit" VALUE="(mail aliases)">|. + # qq|</FORM>| + # ); + #} else { + # $malias=''; + #} #don't display all accounts here my $rowspan = 1; diff --git a/httemplate/view/cust_main.cgi b/httemplate/view/cust_main.cgi index dd9cd3075..bb275a833 100755 --- a/httemplate/view/cust_main.cgi +++ b/httemplate/view/cust_main.cgi @@ -570,12 +570,9 @@ function cust_credit_areyousure(href) { <% if ( $conf->config('payby-default') ne 'HIDE' ) { %> - <BR><BR><A NAME="history"><FONT SIZE="+2">Payment History</FONT></A><BR> - <A HREF="<%= $p %>edit/cust_pay.cgi?custnum=<%= $custnum %>">Post cash/check payment</A> - | <A HREF="<%= $p %>misc/payment.cgi?payby=CARD;custnum=<%= $custnum %>">Process credit card payment</A> - | <A HREF="<%= $p %>misc/payment.cgi?payby=CHEK;custnum=<%= $custnum %>">Process electronic check (ACH) payment</A> - <BR><A HREF="<%= $p %>edit/cust_credit.cgi?<%= $custnum %>">Post credit</A> - <BR> + <BR><BR><A NAME="history">Payment History</A> + (<A HREF="<%= $p %>edit/cust_pay.cgi?custnum=<%= $custnum %>">Post payment</A> + | <A HREF="<%= $p %>edit/cust_credit.cgi?<%= $custnum %>">Post credit</A>) <% #get payment history diff --git a/httemplate/view/cust_pkg.cgi b/httemplate/view/cust_pkg.cgi index 5f0e6bffc..c3880114c 100755 --- a/httemplate/view/cust_pkg.cgi +++ b/httemplate/view/cust_pkg.cgi @@ -71,7 +71,7 @@ print &ntable("#cccccc"), '<TR><TD>', &ntable("#cccccc",2), ( $setup ? time2str("%D",$setup) : "(Not setup)" ), '</TD></TR>'; print '<TR><TD ALIGN="right">Last bill date</TD><TD BGCOLOR="#ffffff">', - ( $cust_pkg->get('last_bill') ? time2str("%D",$cust_pkg->get('last_bill')) : " " ), + ( $cust_pkg->last_bill ? time2str("%D",$cust_pkg->last_bill) : " " ), '</TD></TR>' if $cust_pkg->dbdef_table->column('last_bill'); diff --git a/httemplate/view/svc_acct.cgi b/httemplate/view/svc_acct.cgi index 14d2745a2..8657f16ab 100755 --- a/httemplate/view/svc_acct.cgi +++ b/httemplate/view/svc_acct.cgi @@ -2,6 +2,7 @@ <% my $conf = new FS::Conf; +my $mydomain = $conf->config('domain'); my($query) = $cgi->keywords; $query =~ /^(\d+)$/; @@ -31,7 +32,11 @@ if ( $svc_acct->domsvc ) { die "Unknown domain" unless $svc_domain; $domain = $svc_domain->domain; } else { - die "No svc_domain.svcnum record for svc_acct.domsvc: ". $cust_svc->domsvc; + unless ( $mydomain ) { + die "No legacy domain config file and no svc_domain.svcnum record ". + "for svc_acct.domsvc: ". $cust_svc->domsvc; + } + $domain = $mydomain; } %> @@ -173,7 +178,7 @@ if ($svc_acct->slipip) { : $svc_acct->slipip ). "</TD>"; my($attribute); - foreach $attribute ( grep /^radius_/, $svc_acct->fields ) { + foreach $attribute ( grep /^radius_/, fields('svc_acct') ) { #warn $attribute; $attribute =~ /^radius_(.*)$/; my $pattribute = $FS::raddb::attrib{$1}; @@ -181,7 +186,7 @@ if ($svc_acct->slipip) { "<TD BGCOLOR=\"#ffffff\">". $svc_acct->getfield($attribute). "</TD></TR>"; } - foreach $attribute ( grep /^rc_/, $svc_acct->fields ) { + foreach $attribute ( grep /^rc_/, fields('svc_acct') ) { #warn $attribute; $attribute =~ /^rc_(.*)$/; my $pattribute = $FS::raddb::attrib{$1}; @@ -196,19 +201,7 @@ if ($svc_acct->slipip) { print '<TR><TD ALIGN="right">RADIUS groups</TD><TD BGCOLOR="#ffffff">'. join('<BR>', $svc_acct->radius_groups). '</TD></TR>'; -# Can this be abstracted further? Maybe a library function like -# widget('HTML', 'view', $svc_acct) ? It would definitely make UI -# style management easier. - -foreach (sort { $a cmp $b } $svc_acct->virtual_fields) { - print $svc_acct->pvf($_)->widget('HTML', 'view', $svc_acct->getfield($_)), - "\n"; -} -%> -</TABLE></TD></TR></TABLE> -<% - -print '<BR><BR>'; +print '</TABLE></TD></TR></TABLE><BR><BR>'; print join("\n", $conf->config('svc_acct-notes') ). '<BR><BR>'. joblisting({'svcnum'=>$svcnum}, 1). '</BODY></HTML>'; diff --git a/httemplate/view/svc_acct_sm.cgi b/httemplate/view/svc_acct_sm.cgi new file mode 100755 index 000000000..4e5acc427 --- /dev/null +++ b/httemplate/view/svc_acct_sm.cgi @@ -0,0 +1,58 @@ +<!-- mason kludge --> +<% + +my $conf = new FS::Conf; +my $mydomain = $conf->config('domain'); + +my($query) = $cgi->keywords; +$query =~ /^(\d+)$/; +my $svcnum = $1; +my $svc_acct_sm = qsearchs('svc_acct_sm',{'svcnum'=>$svcnum}); +die "Unknown svcnum" unless $svc_acct_sm; + +my $cust_svc = qsearchs('cust_svc',{'svcnum'=>$svcnum}); +my $pkgnum = $cust_svc->getfield('pkgnum'); +my($cust_pkg, $custnum); +if ($pkgnum) { + $cust_pkg=qsearchs('cust_pkg',{'pkgnum'=>$pkgnum}); + $custnum=$cust_pkg->getfield('custnum'); +} else { + $cust_pkg = ''; + $custnum = ''; +} + +my $part_svc = qsearchs('part_svc',{'svcpart'=> $cust_svc->svcpart } ) + or die "Unkonwn svcpart"; + +print header('Mail Alias View', menubar( + ( ( $pkgnum || $custnum ) + ? ( "View this package (#$pkgnum)" => "${p}view/cust_pkg.cgi?$pkgnum", + "View this customer (#$custnum)" => "${p}view/cust_main.cgi?$custnum", + ) + : ( "Cancel this (unaudited) account" => + "${p}misc/cancel-unaudited.cgi?$svcnum" ) + ), + "Main menu" => $p, +)); + +my($domsvc,$domuid,$domuser) = ( + $svc_acct_sm->domsvc, + $svc_acct_sm->domuid, + $svc_acct_sm->domuser, +); +my $svc = $part_svc->svc; +my $svc_domain = qsearchs('svc_domain',{'svcnum'=>$domsvc}) + or die "Corrupted database: no svc_domain.svcnum matching domsvc $domsvc"; +my $domain = $svc_domain->domain; +my $svc_acct = qsearchs('svc_acct',{'uid'=>$domuid}) + or die "Corrupted database: no svc_acct.uid matching domuid $domuid"; +my $username = $svc_acct->username; + +print qq!<A HREF="${p}edit/svc_acct_sm.cgi?$svcnum">Edit this information</A>!, + "<BR>Service #$svcnum", + "<BR>Service: <B>$svc</B>", + qq!<BR>Mail to <B>!, ( ($domuser eq '*') ? "<I>(anything)</I>" : $domuser ) , qq!</B>\@<B>$domain</B> forwards to <B>$username</B>\@$mydomain mailbox.!, + '</BODY></HTML>' +; + +%> diff --git a/httemplate/view/svc_broadband.cgi b/httemplate/view/svc_broadband.cgi deleted file mode 100644 index ae23386a1..000000000 --- a/httemplate/view/svc_broadband.cgi +++ /dev/null @@ -1,142 +0,0 @@ -<!-- mason kludge --> -<% - -my($query) = $cgi->keywords; -$query =~ /^(\d+)$/; -my $svcnum = $1; -my $svc_broadband = qsearchs( 'svc_broadband', { 'svcnum' => $svcnum } ) - or die "svc_broadband: Unknown svcnum $svcnum"; - -#false laziness w/all svc_*.cgi -my $cust_svc = qsearchs( 'cust_svc', { 'svcnum' => $svcnum } ); -my $pkgnum = $cust_svc->getfield('pkgnum'); -my($cust_pkg, $custnum); -if ($pkgnum) { - $cust_pkg = qsearchs( 'cust_pkg', { 'pkgnum' => $pkgnum } ); - $custnum = $cust_pkg->custnum; -} else { - $cust_pkg = ''; - $custnum = ''; -} -#eofalse - -my $router = $svc_broadband->addr_block->router; - -if (not $router) { die "Could not lookup router for svc_broadband (svcnum $svcnum)" }; - -my ( - $routername, - $routernum, - $speed_down, - $speed_up, - $ip_addr - ) = ( - $router->getfield('routername'), - $router->getfield('routernum'), - $svc_broadband->getfield('speed_down'), - $svc_broadband->getfield('speed_up'), - $svc_broadband->getfield('ip_addr') - ); -%> - -<%=header('Broadband Service View', menubar( - ( ( $custnum ) - ? ( "View this customer (#$custnum)" => "${p}view/cust_main.cgi?$custnum", - ) - : ( "Cancel this (unaudited) website" => - "${p}misc/cancel-unaudited.cgi?$svcnum" ) - ), - "Main menu" => $p, -)) -%> - -<A HREF="<%=${p}%>edit/svc_broadband.cgi?<%=$svcnum%>">Edit this information</A> -<BR> -<%=ntable("#cccccc")%> - <TR> - <TD> - <%=ntable("#cccccc",2)%> - <TR> - <TD ALIGN="right">Service number</TD> - <TD BGCOLOR="#ffffff"><%=$svcnum%></TD> - </TR> - <TR> - <TD ALIGN="right">Router</TD> - <TD BGCOLOR="#ffffff"><%=$routernum%>: <%=$routername%></TD> - </TR> - <TR> - <TD ALIGN="right">Download Speed</TD> - <TD BGCOLOR="#ffffff"><%=$speed_down%></TD> - </TR> - <TR> - <TD ALIGN="right">Upload Speed</TD> - <TD BGCOLOR="#ffffff"><%=$speed_up%></TD> - </TR> - <TR> - <TD ALIGN="right">IP Address</TD> - <TD BGCOLOR="#ffffff"><%=$ip_addr%></TD> - </TR> - <TR COLSPAN="2"><TD></TD></TR> - -<% -foreach (sort { $a cmp $b } $svc_broadband->virtual_fields) { - print $svc_broadband->pvf($_)->widget('HTML', 'view', - $svc_broadband->getfield($_)), "\n"; -} - -%> - </TABLE> - </TD> - </TR> -</TABLE> - -<BR> -<%=ntable("#cccccc", 2)%> -<% - my $sb_router = qsearchs('router', { svcnum => $svcnum }); - if ($sb_router) { - %> - <B>Router associated: <%=$sb_router->routername%> </B> - <A HREF="<%=popurl(2)%>edit/router.cgi?<%=$sb_router->routernum%>"> - (details) - </A> - <BR> - <% my @addr_block; - if (@addr_block = $sb_router->addr_block) { - %> - <B>Address space </B> - <A HREF="<%=popurl(2)%>browse/addr_block.cgi"> - (edit) - </A> - <BR> - <% print ntable("#cccccc", 1); - foreach (@addr_block) { %> - <TR> - <TD><%=$_->ip_gateway%>/<%=$_->ip_netmask%></TD> - </TR> - <% } %> - </TABLE> - <% } else { %> - <B>No address space allocated.</B> - <% } %> - <BR> - <% - } else { -%> - -<FORM METHOD="GET" ACTION="<%=popurl(2)%>edit/router.cgi"> - <INPUT TYPE="hidden" NAME="svcnum" VALUE="<%=$svcnum%>"> -Add router named - <INPUT TYPE="text" NAME="routername" SIZE="32" VALUE="Broadband router (<%=$svcnum%>)"> - <INPUT TYPE="submit" VALUE="Add router"> -</FORM> - -<% -} -%> - -<BR> -<%=joblisting({'svcnum'=>$svcnum}, 1)%> - </BODY> -</HTML> - diff --git a/httemplate/view/svc_domain.cgi b/httemplate/view/svc_domain.cgi index 1dbe16d23..e4b16d998 100755 --- a/httemplate/view/svc_domain.cgi +++ b/httemplate/view/svc_domain.cgi @@ -47,7 +47,7 @@ Service #<%= $svcnum %> <BR>Domain name: <B><%= $domain %></B> <BR>Catch all email <A HREF="<%= ${p} %>misc/catchall.cgi?<%= $svcnum %>">(change)</A>: <%= $email ? "<B>$email</B>" : "<I>(none)<I>" %> -<BR><BR><A HREF="<%= ${p} %>misc/whois.cgi?custnum=<%=$custnum%>;svcnum=<%=$svcnum%>;domain=<%=$domain%>">View whois information.</A> +<BR><BR><A HREF="http://www.geektools.com/cgi-bin/proxy.cgi?query=<%=$domain%>;targetnic=auto">View whois information.</A> <BR><BR> <SCRIPT> function areyousure(href) { diff --git a/httemplate/view/svc_external.cgi b/httemplate/view/svc_external.cgi deleted file mode 100644 index 59cc357c7..000000000 --- a/httemplate/view/svc_external.cgi +++ /dev/null @@ -1,51 +0,0 @@ -<!-- mason kludge --> -<% - -my($query) = $cgi->keywords; -$query =~ /^(\d+)$/; -my $svcnum = $1; -my $svc_external = qsearchs( 'svc_external', { 'svcnum' => $svcnum } ) - or die "svc_external: Unknown svcnum $svcnum"; - -#false laziness w/all svc_*.cgi -my $cust_svc = qsearchs( 'cust_svc', { 'svcnum' => $svcnum } ); -my $pkgnum = $cust_svc->getfield('pkgnum'); -my($cust_pkg, $custnum); -if ($pkgnum) { - $cust_pkg = qsearchs( 'cust_pkg', { 'pkgnum' => $pkgnum } ); - $custnum = $cust_pkg->custnum; -} else { - $cust_pkg = ''; - $custnum = ''; -} -#eofalse - -%> - -<%= header('External Service View', menubar( - ( ( $custnum ) - ? ( "View this customer (#$custnum)" => "${p}view/cust_main.cgi?$custnum", - ) - : ( "Cancel this (unaudited) external service" => - "${p}misc/cancel-unaudited.cgi?$svcnum" ) - ), - "Main menu" => $p, -)) %> - -<A HREF="<%=$p%>edit/svc_external.cgi?<%=$svcnum%>">Edit this information</A><BR> -<%= ntable("#cccccc") %><TR><TD><%= ntable("#cccccc",2) %> - -<TR><TD ALIGN="right">Service number</TD> - <TD BGCOLOR="#ffffff"><%= $svcnum %></TD></TR> -<TR><TD ALIGN="right">External ID</TD> - <TD BGCOLOR="#ffffff"><%= $svc_external->id %></TD></TR> -<TR><TD ALIGN="right">Title</TD> - <TD BGCOLOR="#ffffff"><%= $svc_external->title %></TD></TR> - -<% foreach (sort { $a cmp $b } $svc_external->virtual_fields) { %> - <%= $svc_external->pvf($_)->widget('HTML', 'view', $svc_external->getfield($_)) %> -<% } %> - -</TABLE></TD></TR></TABLE> -<BR><%= joblisting({'svcnum'=>$svcnum}, 1) %> -</BODY></HTML> diff --git a/httemplate/view/svc_forward.cgi b/httemplate/view/svc_forward.cgi index 52360bcc2..97bb45615 100755 --- a/httemplate/view/svc_forward.cgi +++ b/httemplate/view/svc_forward.cgi @@ -69,14 +69,7 @@ print qq!<A HREF="${p}edit/svc_forward.cgi?$svcnum">Edit this information</A>!. qq!<TR><TD ALIGN="right">Email to</TD>!. qq!<TD BGCOLOR="#ffffff">$source</TD></TR>!. qq!<TR><TD ALIGN="right">Forwards to </TD>!. - qq!<TD BGCOLOR="#ffffff">$destination</TD></TR>!; - -foreach (sort { $a cmp $b } $svc_forward->virtual_fields) { - print $svc_forward->pvf($_)->widget('HTML', 'view', $svc_forward->getfield($_)), - "\n"; -} - -print qq! </TABLE>!. + qq!<TD BGCOLOR="#ffffff">$destination</TD></TR></TABLE>!. '<BR>'. joblisting({'svcnum'=>$svcnum}, 1). '</BODY></HTML>' ; diff --git a/httemplate/view/svc_www.cgi b/httemplate/view/svc_www.cgi index 2980f846b..6697b44bc 100644 --- a/httemplate/view/svc_www.cgi +++ b/httemplate/view/svc_www.cgi @@ -46,15 +46,8 @@ print header('Website View', menubar( qq!<TR><TD ALIGN="right">Website name</TD>!. qq!<TD BGCOLOR="#ffffff"><A HREF="http://$www">$www<A></TD></TR>!. qq!<TR><TD ALIGN="right">Account</TD>!. - qq!<TD BGCOLOR="#ffffff"><A HREF="${p}view/svc_acct.cgi?$usersvc">$email</A></TD></TR>!; - -foreach (sort { $a cmp $b } $svc_www->virtual_fields) { - print $svc_www->pvf($_)->widget('HTML', 'view', $svc_www->getfield($_)), - "\n"; -} - - -print '</TABLE></TD></TR></TABLE>'. + qq!<TD BGCOLOR="#ffffff"><A HREF="${p}view/svc_acct.cgi?$usersvc">$email</A></TD></TR>!. + '</TABLE></TD></TR></TABLE>'. '<BR>'. joblisting({'svcnum'=>$svcnum}, 1). '</BODY></HTML>' ; |