diff options
author | Ivan Kohler <ivan@freeside.biz> | 2015-10-13 10:10:40 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2015-10-13 10:10:40 -0700 |
commit | 2b2dd969f3c18751afc583ad1e836ab8e6f73b5d (patch) | |
tree | 72ad19092f9d3a5118add9a55067b8a97c168f46 | |
parent | d31d59c63c8f4dfd52ca19a02ffcf32fcf49f497 (diff) | |
parent | cd468ecb9a321ca96254b7204f6dc193b11cd903 (diff) |
Merge branch 'master' of git.freeside.biz:/home/git/freeside
229 files changed, 8847 insertions, 15949 deletions
diff --git a/FS-Test/Makefile.PL b/FS-Test/Makefile.PL deleted file mode 100644 index cea088a4c..000000000 --- a/FS-Test/Makefile.PL +++ /dev/null @@ -1,34 +0,0 @@ -use 5.006; -use strict; -use warnings FATAL => 'all'; -use ExtUtils::MakeMaker; -use File::ShareDir::Install; - -install_share dist => 'share'; - -WriteMakefile( - NAME => 'FS::Test', - AUTHOR => q{Mark Wells <mark@freeside.biz>}, - VERSION_FROM => 'lib/FS/Test.pm', - ABSTRACT => 'Freeside test suite', - LICENSE => 'agpl_3', - PL_FILES => {}, - EXE_FILES => [ glob 'bin/*' ], - MIN_PERL_VERSION => 5.006, - CONFIGURE_REQUIRES => { - 'ExtUtils::MakeMaker' => 0, - 'File::ShareDir::Install' => 0, - }, - BUILD_REQUIRES => { - 'Test::More' => 0, - }, - PREREQ_PM => { - 'WWW::Mechanize' => 0, - }, - dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', }, - clean => { FILES => 'FS-Test-*' }, -); - -package MY; -use File::ShareDir::Install qw(postamble); - diff --git a/FS-Test/README b/FS-Test/README index b1518bd6f..8e9681cef 100644 --- a/FS-Test/README +++ b/FS-Test/README @@ -2,42 +2,36 @@ FS-Test INSTALLATION -To install this module, install Freeside as usual. Then run the following -commands: - - perl Makefile.PL - make - make install - -INITIALIZATION - -Run "freeside-test-start" from an account that can sudo to root. This will -create a database with the test image and set the system clock to one day -after the last bill. If there's an existing Freeside database, it will be -renamed to "freeside_YYYYMMDD" (the current date). - -To restore the system clock and put the existing database back in place, -run "freeside-test-stop". +This module no longer needs to be installed. Run it directly from the source +tree. RUNNING TESTS -"freeside-test-run" is the main test script. Currently there's only one -test plan, "ui_tests". freeside-test-run will: +"freeside-test-run" is the main test script. Currently there's only one test +plan, "ui_tests". freeside-test-run will: - download all the URLs listed in the test plan into a directory in /tmp - compare them to the reference versions with "diff -ur" - write the output to "freeside_test.YYYYMMDD.diff" -- display the results of "diffstat" on that diff The raw output directory will not be deleted, so you can examine the results -yourself. This is recommended for files that don't diff nicely like Excel -versions of reports and PDF invoices. +yourself. + +If you want to do anything with the database besides compare the test results +to reference, run "freeside-test-start" by hand first. This will create a +database with the test image and start Apache with a fake time of one day after +the last bill. If there's an existing Freeside database, it will be renamed to +"freeside_YYYYMMDD" (the current date). + +To put the existing database back in place, run "freeside-test-stop", then +restart Apache and any Freeside services. UPDATING THE REFERENCE PAGES The simplest way to update the reference copies of the test pages is -freeside-test-fetch -d ./share/output +bin/freeside-test-start +bin/freeside-test-fetch -d ./share/output (from the FS-Test source directory). If you're installing from a git repo, this will overwrite the working tree with the newly downloaded test pages. diff --git a/FS-Test/bin/freeside-test-fetch b/FS-Test/bin/freeside-test-fetch index ccc8528ff..953005704 100755 --- a/FS-Test/bin/freeside-test-fetch +++ b/FS-Test/bin/freeside-test-fetch @@ -1,8 +1,14 @@ #!/usr/bin/perl use strict; -use FS::Test; use Getopt::Std; +use File::Spec; + +my @dirs = File::Spec->splitdir(File::Spec->rel2abs(__FILE__)); +splice @dirs, -2; # bin/freeside-test-run +push @INC, File::Spec->catdir( @dirs, 'lib' ); +eval "use FS::Test;"; +die $@ if $@; my %opt; diff --git a/FS-Test/bin/freeside-test-run b/FS-Test/bin/freeside-test-run index add1e9b25..853bdc9a8 100644..100755 --- a/FS-Test/bin/freeside-test-run +++ b/FS-Test/bin/freeside-test-run @@ -2,18 +2,20 @@ set -ae -tempdir=$( mktemp -d freeside-test.XXXX ) -sharedir=$(perl -MFS::Test -e "print FS::Test::share_dir()") +tempdir=$( mktemp -d --tmpdir freeside-test.XXXX ) +# get the parent directory of bin/(this script) +testroot=$( dirname ${BASH_SOURCE[0]} ) +testroot=$( cd $testroot; cd ..; pwd ) echo "Starting test mode." -freeside-test-start +$testroot/bin/freeside-test-start echo "Saving results to $tempdir." -freeside-test-fetch -d $tempdir +$testroot/bin/freeside-test-fetch -d $tempdir echo "Exiting test mode." -freeside-test-stop || true +$testroot/bin/freeside-test-stop || true diffname=freeside-test.`date +%Y%m%d`.diff echo "Writing diff to $diffname." -diff -urb "$sharedir/output" "$tempdir" > $diffname +diff -urb "$testroot/share/output" "$tempdir" > $diffname diffstat -C $diffname diff --git a/FS-Test/bin/freeside-test-start b/FS-Test/bin/freeside-test-start index 4f12e325b..ed8e131a9 100755 --- a/FS-Test/bin/freeside-test-start +++ b/FS-Test/bin/freeside-test-start @@ -4,12 +4,15 @@ VERSION='5.0.1' set -ae +# get the parent directory of bin/(this script) +testroot=$( dirname ${BASH_SOURCE[0]} ) +testroot=$( cd $testroot; cd ..; pwd ) + echo "Stopping services." sudo service freeside stop sudo service apache2 stop newname=freeside_`date +%Y%m%d` -sharedir=$(perl -MFS::Test -e "print FS::Test::share_dir()") # get company_name from existing DB, strip whitespace # (if there is no existing DB, continue anyway) @@ -34,7 +37,7 @@ fi if [ $createdb = YES ]; then echo "Creating new database from stock schema." createdb --owner=freeside freeside - sudo -u freeside psql freeside -q -f $sharedir/test.sql > /dev/null + sudo -u freeside psql freeside -q -f $testroot/share/test.sql > /dev/null fi newtime=$(sudo -u freeside \ diff --git a/FS-Test/bin/freeside-test-stop b/FS-Test/bin/freeside-test-stop index 7c67f54ec..6ec505a1f 100755 --- a/FS-Test/bin/freeside-test-stop +++ b/FS-Test/bin/freeside-test-stop @@ -24,9 +24,6 @@ oldname=$( psql -tl | \ if [ -n "$oldname" ]; then echo "Renaming $oldname to freeside." psql postgres -c "ALTER DATABASE $oldname RENAME TO freeside" - echo "Restarting services." - sudo service apache2 restart - sudo service freeside restart fi echo "Done." diff --git a/FS-Test/lib/FS/Test.pm b/FS-Test/lib/FS/Test.pm index aedf502b5..bc9797779 100644 --- a/FS-Test/lib/FS/Test.pm +++ b/FS-Test/lib/FS/Test.pm @@ -4,14 +4,15 @@ use 5.006; use strict; use warnings FATAL => 'all'; -use File::ShareDir 'dist_dir'; +#use File::ShareDir 'dist_dir'; use WWW::Mechanize; use File::chdir; use URI; use File::Slurp qw(write_file); use Class::Accessor 'antlers'; +use File::Spec; -our $VERSION = '0.01'; +our $VERSION = '0.02'; =head1 NAME @@ -29,7 +30,11 @@ database image, the test plan, and probably other stuff. =cut sub share_dir { - dist_dir('FS-Test') +# dist_dir('FS-Test') +# we no longer install this anywhere + my @dirs = File::Spec->splitdir(File::Spec->rel2abs(__FILE__)); + splice @dirs, -3; # lib/FS/Test.pm + File::Spec->catdir( @dirs, 'share' ); } =item new OPTIONS diff --git a/FS-Test/share/output/browse/part_pkg.cgi/active=1 b/FS-Test/share/output/browse/part_pkg.cgi/active=1 index 6eeffd57a..5f5f8a313 100644 --- a/FS-Test/share/output/browse/part_pkg.cgi/active=1 +++ b/FS-Test/share/output/browse/part_pkg.cgi/active=1 @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -1131,7 +1131,7 @@ function filter_change() { window.location = 'http://localhost/freeside/browse/ - <TD CLASS="grid" ALIGN=left ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">prorate_round_day: </td><TD ALIGN="left">1</td></tr><tr><TD ALIGN="right">prorate_verbose: </td><TD ALIGN="left">1</td></tr><tr><TD ALIGN="right">cutoff_day: </td><TD ALIGN="left">1</td></tr></table></TD> + <TD CLASS="grid" ALIGN=left ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">cutoff_day: </td><TD ALIGN="left">1</td></tr><tr><TD ALIGN="right">prorate_round_day: </td><TD ALIGN="left">1</td></tr><tr><TD ALIGN="right">prorate_verbose: </td><TD ALIGN="left">1</td></tr></table></TD> @@ -1185,7 +1185,7 @@ function filter_change() { window.location = 'http://localhost/freeside/browse/ - <TD CLASS="grid" ALIGN=left ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">prorate_round_day: </td><TD ALIGN="left">1</td></tr><tr><TD ALIGN="right">prorate_verbose: </td><TD ALIGN="left">1</td></tr><tr><TD ALIGN="right">cutoff_day: </td><TD ALIGN="left">1</td></tr></table></TD> + <TD CLASS="grid" ALIGN=left ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">cutoff_day: </td><TD ALIGN="left">1</td></tr><tr><TD ALIGN="right">prorate_round_day: </td><TD ALIGN="left">1</td></tr><tr><TD ALIGN="right">prorate_verbose: </td><TD ALIGN="left">1</td></tr></table></TD> diff --git a/FS-Test/share/output/browse/part_svc.cgi/orderby=active b/FS-Test/share/output/browse/part_svc.cgi/orderby=active index 3ce994cf8..ce7d11994 100644 --- a/FS-Test/share/output/browse/part_svc.cgi/orderby=active +++ b/FS-Test/share/output/browse/part_svc.cgi/orderby=active @@ -617,7 +617,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -962,7 +962,7 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">sec_phrase</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">blocknum</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"></TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -974,8 +974,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">popnum</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Access number</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">cf_privatekey</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee"></TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -986,8 +986,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">sectornum</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Tower sector</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">dir</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Home directory</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -998,20 +998,21 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">uid</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">UID</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">domsvc</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Domain</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> - + 1 </TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> + Yes </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">gid</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">GID</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">finger</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Real name</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1022,8 +1023,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">finger</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Real name</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">gid</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">GID</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1034,8 +1035,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">dir</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Home directory</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">pbxsvc</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">PBX</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1046,8 +1047,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">shell</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Shell</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">popnum</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Access number</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1070,8 +1071,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">slipip</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">IP address</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">routernum</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee"></TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1082,7 +1083,7 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">routernum</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">sec_phrase</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"></TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1094,8 +1095,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">blocknum</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee"></TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">sectornum</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Tower sector</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1106,21 +1107,20 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">domsvc</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Domain</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">shell</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Shell</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> - 1 + </TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> - Yes </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">pbxsvc</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">PBX</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">slipip</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">IP address</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1131,8 +1131,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">cf_privatekey</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee"></TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">uid</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">UID</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1188,8 +1188,8 @@ function part_export_areyousure(href) { - <TD CLASS="grid" BGCOLOR="#ffffff">suffix</TD> - <TD CLASS="grid" BGCOLOR="#ffffff"></TD> + <TD CLASS="grid" BGCOLOR="#ffffff">au_eligibility_type</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">AU Eligibility Type</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1200,8 +1200,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">catchall</TD> - <TD CLASS="grid" BGCOLOR="#ffffff"></TD> + <TD CLASS="grid" BGCOLOR="#ffffff">au_registrant_name</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">AU Registrant Name</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1212,8 +1212,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">quota</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">Quota</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">catchall</TD> + <TD CLASS="grid" BGCOLOR="#ffffff"></TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1224,7 +1224,7 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">registrarnum</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">expiration_date</TD> <TD CLASS="grid" BGCOLOR="#ffffff"></TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1236,8 +1236,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">registrarkey</TD> - <TD CLASS="grid" BGCOLOR="#ffffff"></TD> + <TD CLASS="grid" BGCOLOR="#ffffff">quota</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">Quota</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1248,7 +1248,7 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">setup_date</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">registrarkey</TD> <TD CLASS="grid" BGCOLOR="#ffffff"></TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1260,7 +1260,7 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">renewal_interval</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">registrarnum</TD> <TD CLASS="grid" BGCOLOR="#ffffff"></TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1272,7 +1272,7 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">expiration_date</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">renewal_interval</TD> <TD CLASS="grid" BGCOLOR="#ffffff"></TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1284,8 +1284,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">au_registrant_name</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">AU Registrant Name</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">setup_date</TD> + <TD CLASS="grid" BGCOLOR="#ffffff"></TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1296,8 +1296,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">au_eligibility_type</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">AU Eligibility Type</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">suffix</TD> + <TD CLASS="grid" BGCOLOR="#ffffff"></TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1341,8 +1341,8 @@ function part_export_areyousure(href) { - <TD CLASS="grid" BGCOLOR="#eeeeee">description</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Descriptive label</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">altitude</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Altitude</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1353,8 +1353,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">routernum</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Router/block</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">authkey</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Authentication key</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1377,8 +1377,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">sectornum</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Tower/sector</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">description</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Descriptive label</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1389,32 +1389,32 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">speed_up</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Upload speed (Kbps)</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">latitude</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Latitude</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> - 1024 + </TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">speed_down</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Download speed (Kbps)</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">longitude</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Longitude</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> - 1024 + </TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">authkey</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Authentication key</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">performance_profile</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Peformance Profile</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1425,8 +1425,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">latitude</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Latitude</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">plan_id</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Service Plan Id</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1437,8 +1437,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">longitude</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Longitude</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">poe_location</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">POE Location</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1449,8 +1449,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">altitude</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Altitude</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">radio_location</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Radio Location</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1461,8 +1461,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">vlan_profile</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">VLAN profile</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">radio_serialnum</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Radio Serial Number</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1473,8 +1473,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">performance_profile</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Peformance Profile</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">routernum</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Router/block</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1485,8 +1485,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">plan_id</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Service Plan Id</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">rssi</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">RSSI</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1497,8 +1497,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">radio_serialnum</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Radio Serial Number</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">sectornum</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Tower/sector</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1509,8 +1509,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">radio_location</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Radio Location</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">serviceid</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Torrus serviceid</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1521,8 +1521,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">poe_location</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">POE Location</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">shared_svcnum</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Shared Service</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1533,32 +1533,32 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">rssi</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">RSSI</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">speed_down</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Download speed (Kbps)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> - + 1024 </TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">suid</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">SUID</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">speed_up</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">Upload speed (Kbps)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> - + 1024 </TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">shared_svcnum</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Shared Service</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">suid</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">SUID</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1569,8 +1569,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#eeeeee">serviceid</TD> - <TD CLASS="grid" BGCOLOR="#eeeeee">Torrus serviceid</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">vlan_profile</TD> + <TD CLASS="grid" BGCOLOR="#eeeeee">VLAN profile</TD> <TD CLASS="grid" BGCOLOR="#eeeeee">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#eeeeee"> @@ -1614,8 +1614,8 @@ function part_export_areyousure(href) { - <TD CLASS="grid" BGCOLOR="#ffffff">countrycode</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">Country code</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">circuit_svcnum</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">Circuit</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1626,20 +1626,20 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">sim_imsi</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">IMSI</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">countrycode</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">Country code</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> - + 1 </TD> <TD CLASS="grid" BGCOLOR="#ffffff"> </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">phone_name</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">Name</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">domsvc</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">Domain</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1650,8 +1650,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">pbxsvc</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">PBX</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">e911_class</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">E911 Service Class</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1662,8 +1662,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">domsvc</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">Domain</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">e911_type</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">E911 Service Type</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1674,8 +1674,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">forwarddst</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">Forward Destination</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">email</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">Email</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1686,8 +1686,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">email</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">Email</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">forwarddst</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">Forward Destination</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1698,8 +1698,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">lnp_status</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">LNP Status</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">lnp_desired_due_date</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">LNP Desired Due Date</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1710,8 +1710,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">portable</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">Portable?</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">lnp_due_date</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">LNP Due Date</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1722,8 +1722,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">lrn</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">LRN</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">lnp_other_provider</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">LNP Other Provider</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1734,8 +1734,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">lnp_desired_due_date</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">LNP Desired Due Date</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">lnp_other_provider_account</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">LNP Other Provider Account #</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1746,8 +1746,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">lnp_due_date</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">LNP Due Date</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">lnp_reject_reason</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">LNP Reject Reason</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1758,8 +1758,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">lnp_other_provider</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">LNP Other Provider</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">lnp_status</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">LNP Status</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1770,8 +1770,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">lnp_other_provider_account</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">LNP Other Provider Account #</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">lrn</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">LRN</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1782,8 +1782,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">lnp_reject_reason</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">LNP Reject Reason</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">max_simultaneous</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">Maximum number of simultaneous users</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1794,8 +1794,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">sms_carrierid</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">SMS Carrier</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">pbxsvc</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">PBX</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1806,8 +1806,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">sms_account</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">SMS Carrier Account</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">phone_name</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">Name</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1818,8 +1818,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">max_simultaneous</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">Maximum number of simultaneous users</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">portable</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">Portable?</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1830,8 +1830,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">e911_class</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">E911 Service Class</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">sim_imsi</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">IMSI</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1842,8 +1842,8 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">e911_type</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">E911 Service Type</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">sip_server</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">SIP Host</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> @@ -1854,20 +1854,20 @@ function part_export_areyousure(href) { </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">circuit_svcnum</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">Circuit</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">sms_account</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">SMS Carrier Account</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> - 1 + </TD> <TD CLASS="grid" BGCOLOR="#ffffff"> </TD> </TR><TR> - <TD CLASS="grid" BGCOLOR="#ffffff">sip_server</TD> - <TD CLASS="grid" BGCOLOR="#ffffff">SIP Host</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">sms_carrierid</TD> + <TD CLASS="grid" BGCOLOR="#ffffff">SMS Carrier</TD> <TD CLASS="grid" BGCOLOR="#ffffff">Fixed (unchangeable)</TD> <TD CLASS="grid" BGCOLOR="#ffffff"> diff --git a/FS-Test/share/output/edit/cust_main-contacts.html/135 b/FS-Test/share/output/edit/cust_main-contacts.html/135 index 6dd5bd895..ae160d6f1 100644 --- a/FS-Test/share/output/edit/cust_main-contacts.html/135 +++ b/FS-Test/share/output/edit/cust_main-contacts.html/135 @@ -617,7 +617,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/edit/cust_main.cgi/135 b/FS-Test/share/output/edit/cust_main.cgi/135 index 84196c7cc..3f60d0069 100644 --- a/FS-Test/share/output/edit/cust_main.cgi/135 +++ b/FS-Test/share/output/edit/cust_main.cgi/135 @@ -617,7 +617,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/edit/part_pkg.cgi/2 b/FS-Test/share/output/edit/part_pkg.cgi/2 index 8a9f1fc00..798351f2d 100644 --- a/FS-Test/share/output/edit/part_pkg.cgi/2 +++ b/FS-Test/share/output/edit/part_pkg.cgi/2 @@ -617,7 +617,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -1325,11 +1325,6 @@ function confirm_submit(f) { >Anniversary, with intro price</OPTION> - <OPTION VALUE="prorate_calendar" - - >Prorate (calendar cycle)</OPTION> - - <OPTION VALUE="prorate" SELECTED >Prorate (Nth of month billing)</OPTION> @@ -1340,6 +1335,11 @@ function confirm_submit(f) { >Prorate (Nth of month billing), with intro period</OPTION> + <OPTION VALUE="prorate_calendar" + + >Prorate (calendar cycle)</OPTION> + + <OPTION VALUE="prepaid" >Prepaid, no automatic cycle</OPTION> @@ -3742,10 +3742,15 @@ spawn_bill_dst_pkgpart(this);" <TR> <TD CLASS="background" COLSPAN=99> +<SCRIPT> +var provision_hold_td = []; +var provision_hold_input = []; +</SCRIPT> + <TABLE BORDER=0 CELLSPACING=4 ><TR><TD VALIGN="top"> -<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Quan.</FONT></TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Primary</FONT></TH><TH BGCOLOR="#dcdcdc">Service</TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Hide<BR>from<BR>Invoices</FONT></TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Bulk<BR>Charge</FONT></TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Hold<BR>Until<BR>Provision</FONT></TH></TR> +<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Quan.</FONT></TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Primary</FONT></TH><TH BGCOLOR="#dcdcdc">Service</TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Hide<BR>from<BR>Invoices</FONT></TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Bulk<BR>Charge</FONT></TH><TH BGCOLOR="#dcdcdc" ID="th_provision_hold1"><FONT SIZE=-1>Remove Hold After Provisioning</FONT></TH></TR><SCRIPT>provision_hold_td.push(document.getElementById('th_provision_hold1'))</SCRIPT> <TR> @@ -3769,9 +3774,13 @@ spawn_bill_dst_pkgpart(this);" <INPUT TYPE="checkbox" NAME="no_bulk_skip1" VALUE="Y" CHECKED> </TD> - <TD ALIGN="center"> - <INPUT TYPE="checkbox" NAME="provision_hold1" VALUE="Y"> + <TD ALIGN="center" ID="td_provision_hold1"> + <INPUT TYPE="checkbox" ID="input_provision_hold1" NAME="provision_hold1" VALUE="Y"> </TD> +<SCRIPT> +provision_hold_td.push(document.getElementById('td_provision_hold1')); +provision_hold_input.push(document.getElementById('input_provision_hold1')); +</SCRIPT> </TR> @@ -3796,15 +3805,19 @@ spawn_bill_dst_pkgpart(this);" <INPUT TYPE="checkbox" NAME="no_bulk_skip2" VALUE="Y" CHECKED> </TD> - <TD ALIGN="center"> - <INPUT TYPE="checkbox" NAME="provision_hold2" VALUE="Y"> + <TD ALIGN="center" ID="td_provision_hold2"> + <INPUT TYPE="checkbox" ID="input_provision_hold2" NAME="provision_hold2" VALUE="Y"> </TD> +<SCRIPT> +provision_hold_td.push(document.getElementById('td_provision_hold2')); +provision_hold_input.push(document.getElementById('input_provision_hold2')); +</SCRIPT> </TR> </TABLE></TD><TD VALIGN="top"> -<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Quan.</FONT></TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Primary</FONT></TH><TH BGCOLOR="#dcdcdc">Service</TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Hide<BR>from<BR>Invoices</FONT></TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Bulk<BR>Charge</FONT></TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Hold<BR>Until<BR>Provision</FONT></TH></TR> +<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Quan.</FONT></TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Primary</FONT></TH><TH BGCOLOR="#dcdcdc">Service</TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Hide<BR>from<BR>Invoices</FONT></TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Bulk<BR>Charge</FONT></TH><TH BGCOLOR="#dcdcdc" ID="th_provision_hold2"><FONT SIZE=-1>Remove Hold After Provisioning</FONT></TH></TR><SCRIPT>provision_hold_td.push(document.getElementById('th_provision_hold2'))</SCRIPT> <TR> <TD> @@ -3827,9 +3840,13 @@ spawn_bill_dst_pkgpart(this);" <INPUT TYPE="checkbox" NAME="no_bulk_skip3" VALUE="Y" CHECKED> </TD> - <TD ALIGN="center"> - <INPUT TYPE="checkbox" NAME="provision_hold3" VALUE="Y"> + <TD ALIGN="center" ID="td_provision_hold3"> + <INPUT TYPE="checkbox" ID="input_provision_hold3" NAME="provision_hold3" VALUE="Y"> </TD> +<SCRIPT> +provision_hold_td.push(document.getElementById('td_provision_hold3')); +provision_hold_input.push(document.getElementById('input_provision_hold3')); +</SCRIPT> </TR> @@ -3854,15 +3871,19 @@ spawn_bill_dst_pkgpart(this);" <INPUT TYPE="checkbox" NAME="no_bulk_skip4" VALUE="Y" CHECKED> </TD> - <TD ALIGN="center"> - <INPUT TYPE="checkbox" NAME="provision_hold4" VALUE="Y"> + <TD ALIGN="center" ID="td_provision_hold4"> + <INPUT TYPE="checkbox" ID="input_provision_hold4" NAME="provision_hold4" VALUE="Y"> </TD> +<SCRIPT> +provision_hold_td.push(document.getElementById('td_provision_hold4')); +provision_hold_input.push(document.getElementById('input_provision_hold4')); +</SCRIPT> </TR> </TABLE></TD><TD VALIGN="top"> -<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Quan.</FONT></TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Primary</FONT></TH><TH BGCOLOR="#dcdcdc">Service</TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Hide<BR>from<BR>Invoices</FONT></TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Bulk<BR>Charge</FONT></TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Hold<BR>Until<BR>Provision</FONT></TH></TR> +<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Quan.</FONT></TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Primary</FONT></TH><TH BGCOLOR="#dcdcdc">Service</TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Hide<BR>from<BR>Invoices</FONT></TH><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Bulk<BR>Charge</FONT></TH><TH BGCOLOR="#dcdcdc" ID="th_provision_hold3"><FONT SIZE=-1>Remove Hold After Provisioning</FONT></TH></TR><SCRIPT>provision_hold_td.push(document.getElementById('th_provision_hold3'))</SCRIPT> <TR> <TD> @@ -3885,14 +3906,42 @@ spawn_bill_dst_pkgpart(this);" <INPUT TYPE="checkbox" NAME="no_bulk_skip5" VALUE="Y" CHECKED> </TD> - <TD ALIGN="center"> - <INPUT TYPE="checkbox" NAME="provision_hold5" VALUE="Y"> + <TD ALIGN="center" ID="td_provision_hold5"> + <INPUT TYPE="checkbox" ID="input_provision_hold5" NAME="provision_hold5" VALUE="Y"> </TD> +<SCRIPT> +provision_hold_td.push(document.getElementById('td_provision_hold5')); +provision_hold_input.push(document.getElementById('input_provision_hold5')); +</SCRIPT> </TR> </TR></TABLE></TD></TR></TABLE> +<SCRIPT> +// start_on_hold from edit/part_pkg.cgi +// toggles display of provision_hold checkboxes when that changes +function provision_hold_check () { + var start_on_hold = document.getElementById('start_on_hold'); + if (start_on_hold) { + for (i = 0; i < provision_hold_td.length; i++) { + provision_hold_td[i].style.display = start_on_hold.checked ? '' : 'none'; + } + for (i = 0; i < provision_hold_input.length; i++) { + provision_hold_input[i].disabled = start_on_hold.checked ? false : true; + } + } +} +function provision_hold_init () { + var start_on_hold = document.getElementById('start_on_hold'); + if (start_on_hold) { + start_on_hold.onchange = provision_hold_check; + provision_hold_check(); + } +} +provision_hold_init(); +</SCRIPT> + </TD> </TR> @@ -4261,7 +4310,39 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Charge recurring fee for period</TD><TD><SELECT NAME="flat__recur_temporality"><OPTION VALUE="upcoming">Upcoming (future)<OPTION VALUE="preceding">Preceding (past)</SELECT></TD></TR><TR><TD ALIGN="right">Auto-add a start date to the 1st, ignoring the current month.</TD><TD><INPUT TYPE="checkbox" NAME="flat__start_1st" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Prorate first month to synchronize with the customer's other packages</TD><TD><INPUT TYPE="checkbox" NAME="flat__sync_bill_date" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When synchronizing, defer the bill until the customer's next bill date</TD><TD><INPUT TYPE="checkbox" NAME="flat__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When synchronizing, round the prorated period to the nearest full day</TD><TD><INPUT TYPE="checkbox" NAME="flat__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD><INPUT TYPE="checkbox" NAME="flat__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Adjust next bill date forward when unsuspending</TD><TD><INPUT TYPE="checkbox" NAME="flat__unsuspend_adjust_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill the last period on cancellation</TD><TD><INPUT TYPE="checkbox" NAME="flat__bill_recur_on_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill immediately upon suspension</TD><TD><INPUT TYPE="checkbox" NAME="flat__bill_suspend_as_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Optional External ID</TD><TD><INPUT TYPE="text" NAME="flat__externalid" VALUE=""></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD><INPUT TYPE="checkbox" NAME="flat__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Time limit for this package</TD><TD><INPUT TYPE="text" NAME="flat__seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Upload limit for this package</TD><TD><INPUT TYPE="text" NAME="flat__upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Download limit for this package</TD><TD><INPUT TYPE="text" NAME="flat__downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Transfer limit for this package</TD><TD><INPUT TYPE="text" NAME="flat__totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Cost of recharge for this package</TD><TD><INPUT TYPE="text" NAME="flat__recharge_amount" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge time for this package</TD><TD><INPUT TYPE="text" NAME="flat__recharge_seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge upload for this package</TD><TD><INPUT TYPE="text" NAME="flat__recharge_upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge download for this package</TD><TD><INPUT TYPE="text" NAME="flat__recharge_downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge transfer for this package</TD><TD><INPUT TYPE="text" NAME="flat__recharge_totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Allow usage from previous period to roll over into current period</TD><TD><INPUT TYPE="checkbox" NAME="flat__usage_rollover" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Reset usage to these values on manual package recharge</TD><TD><INPUT TYPE="checkbox" NAME="flat__recharge_reset" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="flat__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="flat__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="flat__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="flat__OPTIONS" VALUE="recharge_downbytes,unused_credit_change,a2billing_carrer_initblock_offp,add_full_period,a2billing_tariff,prorate_defer_bill,unsuspend_adjust_bill,upbytes,recharge_seconds,recharge_upbytes,unused_credit_cancel,sync_bill_date,recharge_totalbytes,bill_recur_on_cancel,unused_credit_suspend,a2billing_carrier_cost_min,prorate_verbose,recharge_amount,a2billing_type,a2billing_retail_cost_min_offp,setup_fee,a2billing_simultaccess,downbytes,recur_fee,externalid,delay_cancel,usage_rollover,recur_temporality,bill_suspend_as_cancel,start_1st,a2billing_retail_initblock_offp,suspend_bill,prorate_round_day,seconds,totalbytes,recharge_reset,a2billing_carrier_increment_offp,a2billing_retail_increment_offp"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Charge recurring fee for period</TD><TD> + <SELECT NAME="flat__recur_temporality"><OPTION VALUE="upcoming">Upcoming (future)<OPTION VALUE="preceding">Preceding (past)</SELECT></TD></TR><TR><TD ALIGN="right">Auto-add a start date to the 1st, ignoring the current month.</TD><TD> + <INPUT TYPE="checkbox" NAME="flat__start_1st" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Prorate first month to synchronize with the customer's other packages</TD><TD> + <INPUT TYPE="checkbox" NAME="flat__sync_bill_date" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When synchronizing, defer the bill until the customer's next bill date</TD><TD> + <INPUT TYPE="checkbox" NAME="flat__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When synchronizing, round the prorated period to the nearest full day</TD><TD> + <INPUT TYPE="checkbox" NAME="flat__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD> + <INPUT TYPE="checkbox" NAME="flat__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Adjust next bill date forward when unsuspending</TD><TD> + <INPUT TYPE="checkbox" NAME="flat__unsuspend_adjust_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill the last period on cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="flat__bill_recur_on_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill immediately upon suspension</TD><TD> + <INPUT TYPE="checkbox" NAME="flat__bill_suspend_as_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Optional External ID</TD><TD> + <INPUT TYPE="text" NAME="flat__externalid" VALUE=""></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD> + <INPUT TYPE="checkbox" NAME="flat__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Time limit for this package</TD><TD> + <INPUT TYPE="text" NAME="flat__seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Upload limit for this package</TD><TD> + <INPUT TYPE="text" NAME="flat__upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Download limit for this package</TD><TD> + <INPUT TYPE="text" NAME="flat__downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Transfer limit for this package</TD><TD> + <INPUT TYPE="text" NAME="flat__totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Cost of recharge for this package</TD><TD> + <INPUT TYPE="text" NAME="flat__recharge_amount" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge time for this package</TD><TD> + <INPUT TYPE="text" NAME="flat__recharge_seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge upload for this package</TD><TD> + <INPUT TYPE="text" NAME="flat__recharge_upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge download for this package</TD><TD> + <INPUT TYPE="text" NAME="flat__recharge_downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge transfer for this package</TD><TD> + <INPUT TYPE="text" NAME="flat__recharge_totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Allow usage from previous period to roll over into current period</TD><TD> + <INPUT TYPE="checkbox" NAME="flat__usage_rollover" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Reset usage to these values on manual package recharge</TD><TD> + <INPUT TYPE="checkbox" NAME="flat__recharge_reset" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="flat__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="flat__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="flat__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "flat__OPTIONS" + ID = "flat__OPTIONS" + VALUE = "recur_temporality,start_1st,sync_bill_date,prorate_defer_bill,prorate_round_day,suspend_bill,unsuspend_adjust_bill,bill_recur_on_cancel,bill_suspend_as_cancel,externalid,prorate_verbose,seconds,upbytes,downbytes,totalbytes,recharge_amount,recharge_seconds,recharge_upbytes,recharge_downbytes,recharge_totalbytes,usage_rollover,recharge_reset,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4270,7 +4351,21 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD><INPUT TYPE="checkbox" NAME="flat_delayed__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="flat_delayed__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="flat_delayed__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="flat_delayed__delay_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Initial free days</TD><TD><INPUT TYPE="text" NAME="flat_delayed__free_days" VALUE="0"></TD></TR><TR><TD ALIGN="right">Delay setup fee in addition to recurring fee</TD><TD><INPUT TYPE="checkbox" NAME="flat_delayed__delay_setup" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Number of days before recurring billing commences to notify customer. (0 means no warning)</TD><TD><INPUT TYPE="text" NAME="flat_delayed__recur_notify" VALUE="0"></TD></TR></TABLE><INPUT TYPE="hidden" NAME="flat_delayed__OPTIONS" VALUE="free_days,a2billing_tariff,delay_cancel,recur_notify,a2billing_simultaccess,recur_fee,delay_setup,a2billing_carrer_initblock_offp,setup_fee,unused_credit_change,a2billing_retail_increment_offp,a2billing_type,a2billing_retail_cost_min_offp,a2billing_carrier_increment_offp,unused_credit_suspend,a2billing_carrier_cost_min,a2billing_retail_initblock_offp,suspend_bill,unused_credit_cancel"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_delayed__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_delayed__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_delayed__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_delayed__delay_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Initial free days</TD><TD> + <INPUT TYPE="text" NAME="flat_delayed__free_days" VALUE="0"></TD></TR><TR><TD ALIGN="right">Delay setup fee in addition to recurring fee</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_delayed__delay_setup" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Number of days before recurring billing commences to notify customer. (0 means no warning)</TD><TD> + <INPUT TYPE="text" NAME="flat_delayed__recur_notify" VALUE="0"></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "flat_delayed__OPTIONS" + ID = "flat_delayed__OPTIONS" + VALUE = "suspend_bill,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp,free_days,delay_setup,recur_notify" +> + + </DIV> @@ -4279,34 +4374,143 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Duration of the introductory period, in number of months</TD><TD><INPUT TYPE="text" NAME="flat_introrate__intro_duration" VALUE="0"></TD></TR><TR><TD ALIGN="right">Introductory recurring fee for this package</TD><TD><INPUT TYPE="text" NAME="flat_introrate__intro_fee" VALUE="0"></TD></TR><TR><TD ALIGN="right">Charge recurring fee for period</TD><TD><SELECT NAME="flat_introrate__recur_temporality"><OPTION VALUE="upcoming">Upcoming (future)<OPTION VALUE="preceding">Preceding (past)</SELECT></TD></TR><TR><TD ALIGN="right">Auto-add a start date to the 1st, ignoring the current month.</TD><TD><INPUT TYPE="checkbox" NAME="flat_introrate__start_1st" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Prorate first month to synchronize with the customer's other packages</TD><TD><INPUT TYPE="checkbox" NAME="flat_introrate__sync_bill_date" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When synchronizing, defer the bill until the customer's next bill date</TD><TD><INPUT TYPE="checkbox" NAME="flat_introrate__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When synchronizing, round the prorated period to the nearest full day</TD><TD><INPUT TYPE="checkbox" NAME="flat_introrate__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD><INPUT TYPE="checkbox" NAME="flat_introrate__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Adjust next bill date forward when unsuspending</TD><TD><INPUT TYPE="checkbox" NAME="flat_introrate__unsuspend_adjust_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill the last period on cancellation</TD><TD><INPUT TYPE="checkbox" NAME="flat_introrate__bill_recur_on_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill immediately upon suspension</TD><TD><INPUT TYPE="checkbox" NAME="flat_introrate__bill_suspend_as_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Optional External ID</TD><TD><INPUT TYPE="text" NAME="flat_introrate__externalid" VALUE=""></TD></TR><TR><TD ALIGN="right">Time limit for this package</TD><TD><INPUT TYPE="text" NAME="flat_introrate__seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Upload limit for this package</TD><TD><INPUT TYPE="text" NAME="flat_introrate__upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Download limit for this package</TD><TD><INPUT TYPE="text" NAME="flat_introrate__downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Transfer limit for this package</TD><TD><INPUT TYPE="text" NAME="flat_introrate__totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Cost of recharge for this package</TD><TD><INPUT TYPE="text" NAME="flat_introrate__recharge_amount" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge time for this package</TD><TD><INPUT TYPE="text" NAME="flat_introrate__recharge_seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge upload for this package</TD><TD><INPUT TYPE="text" NAME="flat_introrate__recharge_upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge download for this package</TD><TD><INPUT TYPE="text" NAME="flat_introrate__recharge_downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge transfer for this package</TD><TD><INPUT TYPE="text" NAME="flat_introrate__recharge_totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Allow usage from previous period to roll over into current period</TD><TD><INPUT TYPE="checkbox" NAME="flat_introrate__usage_rollover" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Reset usage to these values on manual package recharge</TD><TD><INPUT TYPE="checkbox" NAME="flat_introrate__recharge_reset" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="flat_introrate__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="flat_introrate__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="flat_introrate__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="flat_introrate__OPTIONS" VALUE="usage_rollover,intro_fee,recur_temporality,downbytes,recur_fee,a2billing_simultaccess,delay_cancel,externalid,intro_duration,setup_fee,a2billing_carrier_increment_offp,a2billing_retail_increment_offp,totalbytes,recharge_reset,suspend_bill,a2billing_retail_initblock_offp,start_1st,seconds,prorate_round_day,bill_suspend_as_cancel,prorate_defer_bill,upbytes,unsuspend_adjust_bill,recharge_seconds,a2billing_tariff,a2billing_carrer_initblock_offp,add_full_period,unused_credit_change,recharge_downbytes,a2billing_retail_cost_min_offp,recharge_amount,a2billing_type,bill_recur_on_cancel,a2billing_carrier_cost_min,unused_credit_suspend,recharge_totalbytes,recharge_upbytes,unused_credit_cancel,sync_bill_date"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Duration of the introductory period, in number of months</TD><TD> + <INPUT TYPE="text" NAME="flat_introrate__intro_duration" VALUE="0"></TD></TR><TR><TD ALIGN="right">Introductory recurring fee for this package</TD><TD> + <INPUT TYPE="text" NAME="flat_introrate__intro_fee" VALUE="0"></TD></TR><TR><TD ALIGN="right">Charge recurring fee for period</TD><TD> + <SELECT NAME="flat_introrate__recur_temporality"><OPTION VALUE="upcoming">Upcoming (future)<OPTION VALUE="preceding">Preceding (past)</SELECT></TD></TR><TR><TD ALIGN="right">Auto-add a start date to the 1st, ignoring the current month.</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_introrate__start_1st" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Prorate first month to synchronize with the customer's other packages</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_introrate__sync_bill_date" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When synchronizing, defer the bill until the customer's next bill date</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_introrate__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When synchronizing, round the prorated period to the nearest full day</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_introrate__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_introrate__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Adjust next bill date forward when unsuspending</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_introrate__unsuspend_adjust_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill the last period on cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_introrate__bill_recur_on_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill immediately upon suspension</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_introrate__bill_suspend_as_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Optional External ID</TD><TD> + <INPUT TYPE="text" NAME="flat_introrate__externalid" VALUE=""></TD></TR><TR><TD ALIGN="right">Time limit for this package</TD><TD> + <INPUT TYPE="text" NAME="flat_introrate__seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Upload limit for this package</TD><TD> + <INPUT TYPE="text" NAME="flat_introrate__upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Download limit for this package</TD><TD> + <INPUT TYPE="text" NAME="flat_introrate__downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Transfer limit for this package</TD><TD> + <INPUT TYPE="text" NAME="flat_introrate__totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Cost of recharge for this package</TD><TD> + <INPUT TYPE="text" NAME="flat_introrate__recharge_amount" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge time for this package</TD><TD> + <INPUT TYPE="text" NAME="flat_introrate__recharge_seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge upload for this package</TD><TD> + <INPUT TYPE="text" NAME="flat_introrate__recharge_upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge download for this package</TD><TD> + <INPUT TYPE="text" NAME="flat_introrate__recharge_downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge transfer for this package</TD><TD> + <INPUT TYPE="text" NAME="flat_introrate__recharge_totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Allow usage from previous period to roll over into current period</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_introrate__usage_rollover" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Reset usage to these values on manual package recharge</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_introrate__recharge_reset" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_introrate__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_introrate__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="flat_introrate__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "flat_introrate__OPTIONS" + ID = "flat_introrate__OPTIONS" + VALUE = "intro_duration,intro_fee,recur_temporality,start_1st,sync_bill_date,prorate_defer_bill,prorate_round_day,suspend_bill,unsuspend_adjust_bill,bill_recur_on_cancel,bill_suspend_as_cancel,externalid,seconds,upbytes,downbytes,totalbytes,recharge_amount,recharge_seconds,recharge_upbytes,recharge_downbytes,recharge_totalbytes,usage_rollover,recharge_reset,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> - <DIV ID="plandprorate_calendar" - STYLE="display: none; z-index: 0" + <DIV ID="plandprorate" + STYLE="display: block; z-index: 1" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Billing day (1 - end of cycle)</TD><TD><INPUT TYPE="text" NAME="prorate_calendar__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">Defer the first bill until the billing day</TD><TD><INPUT TYPE="checkbox" NAME="prorate_calendar__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD><INPUT TYPE="checkbox" NAME="prorate_calendar__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Auto-add a start date to the 1st, ignoring the current month.</TD><TD><INPUT TYPE="checkbox" NAME="prorate_calendar__start_1st" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD><INPUT TYPE="checkbox" NAME="prorate_calendar__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Adjust next bill date forward when unsuspending</TD><TD><INPUT TYPE="checkbox" NAME="prorate_calendar__unsuspend_adjust_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill the last period on cancellation</TD><TD><INPUT TYPE="checkbox" NAME="prorate_calendar__bill_recur_on_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill immediately upon suspension</TD><TD><INPUT TYPE="checkbox" NAME="prorate_calendar__bill_suspend_as_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Optional External ID</TD><TD><INPUT TYPE="text" NAME="prorate_calendar__externalid" VALUE=""></TD></TR><TR><TD ALIGN="right">Time limit for this package</TD><TD><INPUT TYPE="text" NAME="prorate_calendar__seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Upload limit for this package</TD><TD><INPUT TYPE="text" NAME="prorate_calendar__upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Download limit for this package</TD><TD><INPUT TYPE="text" NAME="prorate_calendar__downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Transfer limit for this package</TD><TD><INPUT TYPE="text" NAME="prorate_calendar__totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Cost of recharge for this package</TD><TD><INPUT TYPE="text" NAME="prorate_calendar__recharge_amount" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge time for this package</TD><TD><INPUT TYPE="text" NAME="prorate_calendar__recharge_seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge upload for this package</TD><TD><INPUT TYPE="text" NAME="prorate_calendar__recharge_upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge download for this package</TD><TD><INPUT TYPE="text" NAME="prorate_calendar__recharge_downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge transfer for this package</TD><TD><INPUT TYPE="text" NAME="prorate_calendar__recharge_totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Allow usage from previous period to roll over into current period</TD><TD><INPUT TYPE="checkbox" NAME="prorate_calendar__usage_rollover" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Reset usage to these values on manual package recharge</TD><TD><INPUT TYPE="checkbox" NAME="prorate_calendar__recharge_reset" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="prorate_calendar__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="prorate_calendar__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="prorate_calendar__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="prorate_calendar__OPTIONS" VALUE="usage_rollover,recur_temporality,recur_fee,downbytes,a2billing_simultaccess,delay_cancel,externalid,setup_fee,a2billing_carrier_increment_offp,a2billing_retail_increment_offp,totalbytes,recharge_reset,suspend_bill,start_1st,a2billing_retail_initblock_offp,seconds,prorate_round_day,bill_suspend_as_cancel,cutoff_day,unsuspend_adjust_bill,prorate_defer_bill,upbytes,recharge_seconds,a2billing_tariff,a2billing_carrer_initblock_offp,add_full_period,unused_credit_change,recharge_downbytes,a2billing_retail_cost_min_offp,recharge_amount,prorate_verbose,a2billing_type,bill_recur_on_cancel,a2billing_carrier_cost_min,unused_credit_suspend,recharge_totalbytes,recharge_upbytes,unused_credit_cancel,sync_bill_date"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Billing Day (1 - 28)</TD><TD> + <INPUT TYPE="text" NAME="prorate__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">Defer the first bill until the billing day</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Round the prorated period to the nearest full day</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Auto-add a start date to the 1st, ignoring the current month.</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate__start_1st" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Adjust next bill date forward when unsuspending</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate__unsuspend_adjust_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill the last period on cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate__bill_recur_on_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill immediately upon suspension</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate__bill_suspend_as_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Optional External ID</TD><TD> + <INPUT TYPE="text" NAME="prorate__externalid" VALUE=""></TD></TR><TR><TD ALIGN="right">Time limit for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate__seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Upload limit for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate__upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Download limit for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate__downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Transfer limit for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate__totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Cost of recharge for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate__recharge_amount" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge time for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate__recharge_seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge upload for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate__recharge_upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge download for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate__recharge_downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge transfer for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate__recharge_totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Allow usage from previous period to roll over into current period</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate__usage_rollover" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Reset usage to these values on manual package recharge</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate__recharge_reset" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "prorate__OPTIONS" + ID = "prorate__OPTIONS" + VALUE = "cutoff_day,prorate_defer_bill,add_full_period,prorate_round_day,prorate_verbose,start_1st,suspend_bill,unsuspend_adjust_bill,bill_recur_on_cancel,bill_suspend_as_cancel,externalid,seconds,upbytes,downbytes,totalbytes,recharge_amount,recharge_seconds,recharge_upbytes,recharge_downbytes,recharge_totalbytes,usage_rollover,recharge_reset,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> - <DIV ID="plandprorate" - STYLE="display: block; z-index: 1" + <DIV ID="plandprorate_delayed" + STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Billing Day (1 - 28)</TD><TD><INPUT TYPE="text" NAME="prorate__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">Defer the first bill until the billing day</TD><TD><INPUT TYPE="checkbox" NAME="prorate__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD><INPUT TYPE="checkbox" NAME="prorate__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Round the prorated period to the nearest full day</TD><TD><INPUT TYPE="checkbox" NAME="prorate__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD><INPUT TYPE="checkbox" NAME="prorate__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Auto-add a start date to the 1st, ignoring the current month.</TD><TD><INPUT TYPE="checkbox" NAME="prorate__start_1st" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD><INPUT TYPE="checkbox" NAME="prorate__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Adjust next bill date forward when unsuspending</TD><TD><INPUT TYPE="checkbox" NAME="prorate__unsuspend_adjust_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill the last period on cancellation</TD><TD><INPUT TYPE="checkbox" NAME="prorate__bill_recur_on_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill immediately upon suspension</TD><TD><INPUT TYPE="checkbox" NAME="prorate__bill_suspend_as_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Optional External ID</TD><TD><INPUT TYPE="text" NAME="prorate__externalid" VALUE=""></TD></TR><TR><TD ALIGN="right">Time limit for this package</TD><TD><INPUT TYPE="text" NAME="prorate__seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Upload limit for this package</TD><TD><INPUT TYPE="text" NAME="prorate__upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Download limit for this package</TD><TD><INPUT TYPE="text" NAME="prorate__downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Transfer limit for this package</TD><TD><INPUT TYPE="text" NAME="prorate__totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Cost of recharge for this package</TD><TD><INPUT TYPE="text" NAME="prorate__recharge_amount" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge time for this package</TD><TD><INPUT TYPE="text" NAME="prorate__recharge_seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge upload for this package</TD><TD><INPUT TYPE="text" NAME="prorate__recharge_upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge download for this package</TD><TD><INPUT TYPE="text" NAME="prorate__recharge_downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge transfer for this package</TD><TD><INPUT TYPE="text" NAME="prorate__recharge_totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Allow usage from previous period to roll over into current period</TD><TD><INPUT TYPE="checkbox" NAME="prorate__usage_rollover" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Reset usage to these values on manual package recharge</TD><TD><INPUT TYPE="checkbox" NAME="prorate__recharge_reset" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="prorate__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="prorate__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="prorate__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="prorate__OPTIONS" VALUE="recharge_downbytes,unused_credit_change,a2billing_carrer_initblock_offp,add_full_period,a2billing_tariff,prorate_defer_bill,unsuspend_adjust_bill,upbytes,cutoff_day,recharge_seconds,recharge_upbytes,unused_credit_cancel,sync_bill_date,recharge_totalbytes,bill_recur_on_cancel,unused_credit_suspend,a2billing_carrier_cost_min,recharge_amount,prorate_verbose,a2billing_type,a2billing_retail_cost_min_offp,setup_fee,a2billing_simultaccess,recur_fee,downbytes,externalid,delay_cancel,usage_rollover,recur_temporality,bill_suspend_as_cancel,a2billing_retail_initblock_offp,start_1st,suspend_bill,prorate_round_day,seconds,totalbytes,recharge_reset,a2billing_carrier_increment_offp,a2billing_retail_increment_offp"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_delayed__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_delayed__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_delayed__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_delayed__delay_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Initial free days</TD><TD> + <INPUT TYPE="text" NAME="prorate_delayed__free_days" VALUE="0"></TD></TR><TR><TD ALIGN="right">Delay setup fee in addition to recurring fee</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_delayed__delay_setup" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Number of days before recurring billing commences to notify customer. (0 means no warning)</TD><TD> + <INPUT TYPE="text" NAME="prorate_delayed__recur_notify" VALUE="0"></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "prorate_delayed__OPTIONS" + ID = "prorate_delayed__OPTIONS" + VALUE = "suspend_bill,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp,free_days,delay_setup,recur_notify" +> + + </DIV> - <DIV ID="plandprorate_delayed" + <DIV ID="plandprorate_calendar" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD><INPUT TYPE="checkbox" NAME="prorate_delayed__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="prorate_delayed__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="prorate_delayed__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="prorate_delayed__delay_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Initial free days</TD><TD><INPUT TYPE="text" NAME="prorate_delayed__free_days" VALUE="0"></TD></TR><TR><TD ALIGN="right">Delay setup fee in addition to recurring fee</TD><TD><INPUT TYPE="checkbox" NAME="prorate_delayed__delay_setup" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Number of days before recurring billing commences to notify customer. (0 means no warning)</TD><TD><INPUT TYPE="text" NAME="prorate_delayed__recur_notify" VALUE="0"></TD></TR></TABLE><INPUT TYPE="hidden" NAME="prorate_delayed__OPTIONS" VALUE="setup_fee,unused_credit_change,delay_setup,a2billing_carrer_initblock_offp,free_days,a2billing_tariff,delay_cancel,a2billing_simultaccess,recur_notify,recur_fee,unused_credit_cancel,a2billing_retail_initblock_offp,suspend_bill,unused_credit_suspend,a2billing_carrier_cost_min,a2billing_retail_increment_offp,a2billing_type,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Billing day (1 - end of cycle)</TD><TD> + <INPUT TYPE="text" NAME="prorate_calendar__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">Defer the first bill until the billing day</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_calendar__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_calendar__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Auto-add a start date to the 1st, ignoring the current month.</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_calendar__start_1st" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_calendar__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Adjust next bill date forward when unsuspending</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_calendar__unsuspend_adjust_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill the last period on cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_calendar__bill_recur_on_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill immediately upon suspension</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_calendar__bill_suspend_as_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Optional External ID</TD><TD> + <INPUT TYPE="text" NAME="prorate_calendar__externalid" VALUE=""></TD></TR><TR><TD ALIGN="right">Time limit for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate_calendar__seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Upload limit for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate_calendar__upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Download limit for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate_calendar__downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Transfer limit for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate_calendar__totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Cost of recharge for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate_calendar__recharge_amount" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge time for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate_calendar__recharge_seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge upload for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate_calendar__recharge_upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge download for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate_calendar__recharge_downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge transfer for this package</TD><TD> + <INPUT TYPE="text" NAME="prorate_calendar__recharge_totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Allow usage from previous period to roll over into current period</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_calendar__usage_rollover" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Reset usage to these values on manual package recharge</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_calendar__recharge_reset" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_calendar__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_calendar__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="prorate_calendar__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "prorate_calendar__OPTIONS" + ID = "prorate_calendar__OPTIONS" + VALUE = "cutoff_day,prorate_defer_bill,prorate_verbose,start_1st,suspend_bill,unsuspend_adjust_bill,bill_recur_on_cancel,bill_suspend_as_cancel,externalid,seconds,upbytes,downbytes,totalbytes,recharge_amount,recharge_seconds,recharge_upbytes,recharge_downbytes,recharge_totalbytes,usage_rollover,recharge_reset,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4315,7 +4519,23 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Action to take upon reaching end of prepaid period</TD><TD><SELECT NAME="prepaid__recur_action"><OPTION VALUE="suspend">suspend<OPTION VALUE="cancel">cancel</SELECT></TD></TR><TR><TD ALIGN="right">Action to take upon reaching a usage limit.</TD><TD><SELECT NAME="prepaid__overlimit_action"><OPTION VALUE="overlimit">Default overlimit processing<OPTION VALUE="cancel">Cancel</SELECT></TD></TR><TR><TD ALIGN="right">Time limit for this package</TD><TD><INPUT TYPE="text" NAME="prepaid__seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Upload limit for this package</TD><TD><INPUT TYPE="text" NAME="prepaid__upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Download limit for this package</TD><TD><INPUT TYPE="text" NAME="prepaid__downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Transfer limit for this package</TD><TD><INPUT TYPE="text" NAME="prepaid__totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="prepaid__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="prepaid__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="prepaid__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="prepaid__OPTIONS" VALUE="a2billing_retail_initblock_offp,recharge_totalbytes,seconds,unused_credit_cancel,recharge_upbytes,recur_action,recharge_amount,a2billing_type,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_increment_offp,totalbytes,recharge_reset,overlimit_action,unused_credit_suspend,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,recharge_downbytes,setup_fee,unused_credit_change,usage_rollover,recharge_seconds,upbytes,a2billing_simultaccess,downbytes,recur_fee,delay_cancel,a2billing_tariff"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Action to take upon reaching end of prepaid period</TD><TD> + <SELECT NAME="prepaid__recur_action"><OPTION VALUE="suspend">suspend<OPTION VALUE="cancel">cancel</SELECT></TD></TR><TR><TD ALIGN="right">Action to take upon reaching a usage limit.</TD><TD> + <SELECT NAME="prepaid__overlimit_action"><OPTION VALUE="overlimit">Default overlimit processing<OPTION VALUE="cancel">Cancel</SELECT></TD></TR><TR><TD ALIGN="right">Time limit for this package</TD><TD> + <INPUT TYPE="text" NAME="prepaid__seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Upload limit for this package</TD><TD> + <INPUT TYPE="text" NAME="prepaid__upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Download limit for this package</TD><TD> + <INPUT TYPE="text" NAME="prepaid__downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Transfer limit for this package</TD><TD> + <INPUT TYPE="text" NAME="prepaid__totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="prepaid__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="prepaid__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="prepaid__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "prepaid__OPTIONS" + ID = "prepaid__OPTIONS" + VALUE = "recur_action,overlimit_action,seconds,upbytes,downbytes,totalbytes,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4324,7 +4544,30 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Billing day</TD><TD><INPUT TYPE="text" NAME="subscription__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">Time limit for this package</TD><TD><INPUT TYPE="text" NAME="subscription__seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Upload limit for this package</TD><TD><INPUT TYPE="text" NAME="subscription__upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Download limit for this package</TD><TD><INPUT TYPE="text" NAME="subscription__downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Transfer limit for this package</TD><TD><INPUT TYPE="text" NAME="subscription__totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Cost of recharge for this package</TD><TD><INPUT TYPE="text" NAME="subscription__recharge_amount" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge time for this package</TD><TD><INPUT TYPE="text" NAME="subscription__recharge_seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge upload for this package</TD><TD><INPUT TYPE="text" NAME="subscription__recharge_upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge download for this package</TD><TD><INPUT TYPE="text" NAME="subscription__recharge_downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge transfer for this package</TD><TD><INPUT TYPE="text" NAME="subscription__recharge_totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Allow usage from previous period to roll over into current period</TD><TD><INPUT TYPE="checkbox" NAME="subscription__usage_rollover" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Reset usage to these values on manual package recharge</TD><TD><INPUT TYPE="checkbox" NAME="subscription__recharge_reset" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Optional External ID</TD><TD><INPUT TYPE="text" NAME="subscription__externalid" VALUE=""></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="subscription__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="subscription__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="subscription__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="subscription__OPTIONS" VALUE="recharge_totalbytes,seconds,a2billing_retail_initblock_offp,recharge_upbytes,unused_credit_cancel,a2billing_retail_increment_offp,a2billing_type,recharge_amount,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,unused_credit_suspend,a2billing_carrier_cost_min,recharge_reset,totalbytes,a2billing_carrer_initblock_offp,setup_fee,recharge_downbytes,unused_credit_change,recharge_seconds,upbytes,cutoff_day,usage_rollover,externalid,a2billing_tariff,delay_cancel,a2billing_simultaccess,recur_fee,downbytes"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Billing day</TD><TD> + <INPUT TYPE="text" NAME="subscription__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">Time limit for this package</TD><TD> + <INPUT TYPE="text" NAME="subscription__seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Upload limit for this package</TD><TD> + <INPUT TYPE="text" NAME="subscription__upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Download limit for this package</TD><TD> + <INPUT TYPE="text" NAME="subscription__downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Transfer limit for this package</TD><TD> + <INPUT TYPE="text" NAME="subscription__totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Cost of recharge for this package</TD><TD> + <INPUT TYPE="text" NAME="subscription__recharge_amount" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge time for this package</TD><TD> + <INPUT TYPE="text" NAME="subscription__recharge_seconds" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge upload for this package</TD><TD> + <INPUT TYPE="text" NAME="subscription__recharge_upbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge download for this package</TD><TD> + <INPUT TYPE="text" NAME="subscription__recharge_downbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Recharge transfer for this package</TD><TD> + <INPUT TYPE="text" NAME="subscription__recharge_totalbytes" VALUE=""></TD></TR><TR><TD ALIGN="right">Allow usage from previous period to roll over into current period</TD><TD> + <INPUT TYPE="checkbox" NAME="subscription__usage_rollover" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Reset usage to these values on manual package recharge</TD><TD> + <INPUT TYPE="checkbox" NAME="subscription__recharge_reset" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Optional External ID</TD><TD> + <INPUT TYPE="text" NAME="subscription__externalid" VALUE=""></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="subscription__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="subscription__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="subscription__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "subscription__OPTIONS" + ID = "subscription__OPTIONS" + VALUE = "cutoff_day,seconds,upbytes,downbytes,totalbytes,recharge_amount,recharge_seconds,recharge_upbytes,recharge_downbytes,recharge_totalbytes,usage_rollover,recharge_reset,externalid,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4333,7 +4576,30 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Hours included</TD><TD><INPUT TYPE="text" NAME="sqlradacct_hour__recur_included_hours" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per hour</TD><TD><INPUT TYPE="text" NAME="sqlradacct_hour__recur_hourly_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">Maximum overage charge for hours (0 means no cap)</TD><TD><INPUT TYPE="text" NAME="sqlradacct_hour__recur_hourly_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Upload gigabytes included</TD><TD><INPUT TYPE="text" NAME="sqlradacct_hour__recur_included_input" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per gigabyte upload</TD><TD><INPUT TYPE="text" NAME="sqlradacct_hour__recur_input_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">Maximum overage charge for upload (0 means no cap)</TD><TD><INPUT TYPE="text" NAME="sqlradacct_hour__recur_input_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Download gigabytes included</TD><TD><INPUT TYPE="text" NAME="sqlradacct_hour__recur_included_output" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per gigabyte download</TD><TD><INPUT TYPE="text" NAME="sqlradacct_hour__recur_output_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">Maximum overage charge for download (0 means no cap)</TD><TD><INPUT TYPE="text" NAME="sqlradacct_hour__recur_output_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Total gigabytes included</TD><TD><INPUT TYPE="text" NAME="sqlradacct_hour__recur_included_total" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per gigabyte total</TD><TD><INPUT TYPE="text" NAME="sqlradacct_hour__recur_total_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">Maximum overage charge for total gigabytes (0 means no cap)</TD><TD><INPUT TYPE="text" NAME="sqlradacct_hour__recur_total_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Global cap on all overage charges (0 means no cap)</TD><TD><INPUT TYPE="text" NAME="sqlradacct_hour__global_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="sqlradacct_hour__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="sqlradacct_hour__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="sqlradacct_hour__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="sqlradacct_hour__OPTIONS" VALUE="a2billing_retail_increment_offp,a2billing_type,a2billing_carrier_increment_offp,recur_output_charge,a2billing_retail_cost_min_offp,unused_credit_suspend,a2billing_carrier_cost_min,recur_total_cap,a2billing_retail_initblock_offp,unused_credit_cancel,recur_included_hours,global_cap,delay_cancel,a2billing_tariff,recur_hourly_cap,recur_hourly_charge,recur_total_charge,a2billing_simultaccess,recur_included_output,recur_input_cap,recur_fee,recur_input_charge,a2billing_carrer_initblock_offp,recur_included_input,recur_output_cap,setup_fee,recur_included_total,unused_credit_change"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Hours included</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_hour__recur_included_hours" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per hour</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_hour__recur_hourly_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">Maximum overage charge for hours (0 means no cap)</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_hour__recur_hourly_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Upload gigabytes included</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_hour__recur_included_input" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per gigabyte upload</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_hour__recur_input_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">Maximum overage charge for upload (0 means no cap)</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_hour__recur_input_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Download gigabytes included</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_hour__recur_included_output" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per gigabyte download</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_hour__recur_output_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">Maximum overage charge for download (0 means no cap)</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_hour__recur_output_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Total gigabytes included</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_hour__recur_included_total" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per gigabyte total</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_hour__recur_total_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">Maximum overage charge for total gigabytes (0 means no cap)</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_hour__recur_total_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Global cap on all overage charges (0 means no cap)</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_hour__global_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="sqlradacct_hour__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="sqlradacct_hour__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="sqlradacct_hour__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "sqlradacct_hour__OPTIONS" + ID = "sqlradacct_hour__OPTIONS" + VALUE = "recur_included_hours,recur_hourly_charge,recur_hourly_cap,recur_included_input,recur_input_charge,recur_input_cap,recur_included_output,recur_output_charge,recur_output_cap,recur_included_total,recur_total_charge,recur_total_cap,global_cap,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4342,7 +4608,31 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Hours included per day</TD><TD><INPUT TYPE="text" NAME="sqlradacct_daily__recur_included_hours" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per hour</TD><TD><INPUT TYPE="text" NAME="sqlradacct_daily__recur_hourly_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">Maximum daily charge for hours (0 means no cap)</TD><TD><INPUT TYPE="text" NAME="sqlradacct_daily__recur_hourly_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Upload megabytes included per day</TD><TD><INPUT TYPE="text" NAME="sqlradacct_daily__recur_included_input" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per megabyte upload</TD><TD><INPUT TYPE="text" NAME="sqlradacct_daily__recur_input_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">Maximum daily charge for upload (0 means no cap)</TD><TD><INPUT TYPE="text" NAME="sqlradacct_daily__recur_input_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Download megabytes included per day</TD><TD><INPUT TYPE="text" NAME="sqlradacct_daily__recur_included_output" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per megabyte download</TD><TD><INPUT TYPE="text" NAME="sqlradacct_daily__recur_output_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">Maximum daily charge for download (0 means no cap)</TD><TD><INPUT TYPE="text" NAME="sqlradacct_daily__recur_output_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Total megabytes included per day</TD><TD><INPUT TYPE="text" NAME="sqlradacct_daily__recur_included_total" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per megabyte total</TD><TD><INPUT TYPE="text" NAME="sqlradacct_daily__recur_total_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">Maximum daily charge for total megabytes (0 means no cap)</TD><TD><INPUT TYPE="text" NAME="sqlradacct_daily__recur_total_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Daily cap on all overage charges (0 means no cap)</TD><TD><INPUT TYPE="text" NAME="sqlradacct_daily__global_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Monthly (billing frequency) cap on all overage charges (0 means no cap)</TD><TD><INPUT TYPE="text" NAME="sqlradacct_daily__monthly_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="sqlradacct_daily__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="sqlradacct_daily__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="sqlradacct_daily__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="sqlradacct_daily__OPTIONS" VALUE="recur_input_charge,recur_included_input,a2billing_carrer_initblock_offp,recur_output_cap,setup_fee,unused_credit_change,recur_included_total,global_cap,delay_cancel,a2billing_tariff,recur_hourly_charge,recur_total_charge,recur_hourly_cap,a2billing_simultaccess,recur_fee,recur_included_output,recur_input_cap,recur_total_cap,a2billing_retail_initblock_offp,monthly_cap,recur_included_hours,unused_credit_cancel,a2billing_retail_increment_offp,a2billing_type,a2billing_carrier_increment_offp,recur_output_charge,a2billing_retail_cost_min_offp,unused_credit_suspend,a2billing_carrier_cost_min"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Hours included per day</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_daily__recur_included_hours" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per hour</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_daily__recur_hourly_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">Maximum daily charge for hours (0 means no cap)</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_daily__recur_hourly_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Upload megabytes included per day</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_daily__recur_included_input" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per megabyte upload</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_daily__recur_input_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">Maximum daily charge for upload (0 means no cap)</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_daily__recur_input_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Download megabytes included per day</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_daily__recur_included_output" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per megabyte download</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_daily__recur_output_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">Maximum daily charge for download (0 means no cap)</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_daily__recur_output_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Total megabytes included per day</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_daily__recur_included_total" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per megabyte total</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_daily__recur_total_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">Maximum daily charge for total megabytes (0 means no cap)</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_daily__recur_total_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Daily cap on all overage charges (0 means no cap)</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_daily__global_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Monthly (billing frequency) cap on all overage charges (0 means no cap)</TD><TD> + <INPUT TYPE="text" NAME="sqlradacct_daily__monthly_cap" VALUE="0"></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="sqlradacct_daily__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="sqlradacct_daily__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="sqlradacct_daily__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "sqlradacct_daily__OPTIONS" + ID = "sqlradacct_daily__OPTIONS" + VALUE = "recur_included_hours,recur_hourly_charge,recur_hourly_cap,recur_included_input,recur_input_charge,recur_input_cap,recur_included_output,recur_output_charge,recur_output_cap,recur_included_total,recur_total_charge,recur_total_cap,global_cap,monthly_cap,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4351,7 +4641,18 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Charge recurring fee for period</TD><TD><SELECT NAME="voip_cdr__recur_temporality"><OPTION VALUE="upcoming">Upcoming (future)<OPTION VALUE="preceding">Preceding (past)</SELECT></TD></TR><TR><TD ALIGN="right">Recurring fee method</TD><TD><SELECT NAME="voip_cdr__recur_method"><OPTION VALUE="anniversary">Charge the recurring fee at the frequency specified above<OPTION VALUE="prorate">Charge a prorated fee the first time (selectable billing date)<OPTION VALUE="subscription">Charge the full fee for the first partial period (selectable billing date)</SELECT></TD></TR><TR><TD ALIGN="right">Billing Day (1 - 28) for prorating or subscription</TD><TD><INPUT TYPE="text" NAME="voip_cdr__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">When prorating, defer the first bill until the billing day</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When prorating, round to the nearest full day</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">CDR service matching method</TD><TD><SELECT NAME="voip_cdr__cdr_svc_method"><OPTION VALUE="svc_phone.phonenum">Phone numbers (svc_phone.phonenum)<OPTION VALUE="svc_pbx.title">PBX name (svc_pbx.title)<OPTION VALUE="svc_pbx.svcnum">Freeside service # (svc_pbx.svcnum)<OPTION VALUE="svc_pbx.ip.src">PBX name to source IP address<OPTION VALUE="svc_pbx.ip.dst">PBX name to destination IP address<OPTION VALUE="svc_acct.username">Username (svc_acct.username)</SELECT></TD></TR><TR><TD ALIGN="right">Rating method</TD><TD><INPUT TYPE="radio" NAME="voip_cdr__rating_method" VALUE="prefix"> Rate calls by using destination prefix to look up a region and rate according to the internal prefix and rate tables<BR><INPUT TYPE="radio" NAME="voip_cdr__rating_method" VALUE="upstream_simple"> Simply pass through and charge the "upstream_price" amount.<BR><INPUT TYPE="radio" NAME="voip_cdr__rating_method" VALUE="single_price"> A single price per minute for all calls.<BR></TD></TR><TR><TD ALIGN="right">Rounding for destination prefix rating</TD><TD><SELECT NAME="voip_cdr__rounding"><OPTION VALUE="2">Two decimal places (cent)<OPTION VALUE="4">Four decimal places (100th of a cent)</SELECT></TD></TR><TR><TD ALIGN="right">Rate plan</TD><TD> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Charge recurring fee for period</TD><TD> + <SELECT NAME="voip_cdr__recur_temporality"><OPTION VALUE="upcoming">Upcoming (future)<OPTION VALUE="preceding">Preceding (past)</SELECT></TD></TR><TR><TD ALIGN="right">Recurring fee method</TD><TD> + <SELECT NAME="voip_cdr__recur_method"><OPTION VALUE="anniversary">Charge the recurring fee at the frequency specified above<OPTION VALUE="prorate">Charge a prorated fee the first time (selectable billing date)<OPTION VALUE="subscription">Charge the full fee for the first partial period (selectable billing date)</SELECT></TD></TR><TR><TD ALIGN="right">Billing Day (1 - 28) for prorating or subscription</TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">When prorating, defer the first bill until the billing day</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When prorating, round to the nearest full day</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">CDR service matching method</TD><TD> + <SELECT NAME="voip_cdr__cdr_svc_method"><OPTION VALUE="svc_phone.phonenum">Phone numbers (svc_phone.phonenum)<OPTION VALUE="svc_pbx.title">PBX name (svc_pbx.title)<OPTION VALUE="svc_pbx.svcnum">Freeside service # (svc_pbx.svcnum)<OPTION VALUE="svc_pbx.ip.src">PBX name to source IP address<OPTION VALUE="svc_pbx.ip.dst">PBX name to destination IP address<OPTION VALUE="svc_acct.username">Username (svc_acct.username)</SELECT></TD></TR><TR><TD ALIGN="right">Rating method</TD><TD> + <INPUT TYPE="radio" NAME="voip_cdr__rating_method" VALUE="prefix"> Rate calls by using destination prefix to look up a region and rate according to the internal prefix and rate tables<BR><INPUT TYPE="radio" NAME="voip_cdr__rating_method" VALUE="upstream_simple"> Simply pass through and charge the "upstream_price" amount.<BR><INPUT TYPE="radio" NAME="voip_cdr__rating_method" VALUE="single_price"> A single price per minute for all calls.<BR></TD></TR><TR><TD ALIGN="right">Rounding for destination prefix rating</TD><TD> + <SELECT NAME="voip_cdr__rounding"><OPTION VALUE="2">Two decimal places (cent)<OPTION VALUE="4">Four decimal places (100th of a cent)</SELECT></TD></TR><TR><TD ALIGN="right">Rate plan</TD><TD> + <SELECT NAME = "voip_cdr__ratenum" ID = "ratenum" @@ -4369,6 +4670,7 @@ spawn_supp_dst_pkgpart(this);" </TD></TR><TR><TD ALIGN="right">Optional alternate intrastate rate plan</TD><TD> + <SELECT NAME = "voip_cdr__intrastate_ratenum" ID = "ratenum" @@ -4385,7 +4687,61 @@ spawn_supp_dst_pkgpart(this);" </SELECT> -</TD></TR><TR><TD ALIGN="right">Number of calls included at no usage charge</TD><TD><INPUT TYPE="text" NAME="voip_cdr__calls_included" VALUE=""></TD></TR><TR><TD ALIGN="right">Charge per minute when using "single price per minute" rating method</TD><TD><INPUT TYPE="text" NAME="voip_cdr__min_charge" VALUE=""></TD></TR><TR><TD ALIGN="right">Minutes included when using the "single price per minute" or "prefix" rating method</TD><TD><INPUT TYPE="text" NAME="voip_cdr__min_included" VALUE=""></TD></TR><TR><TD ALIGN="right">Granularity when using "single price per minute" rating method</TD><TD><SELECT NAME="voip_cdr__sec_granularity"><OPTION VALUE="1">1 second<OPTION VALUE="6">6 second<OPTION VALUE="30">30 second<OPTION VALUE="60">minute<OPTION VALUE="0">call</SELECT></TD></TR><TR><TD ALIGN="right">Handling of calls without a rate in the rate table</TD><TD><SELECT NAME="voip_cdr__ignore_unrateable"><OPTION VALUE="" SELECTED>Exit with a fatal error<OPTION VALUE="1">Ignore and continue<OPTION VALUE="2">Flag for later review</SELECT></TD></TR><TR><TD ALIGN="right">Default prefix optionally prepended to customer DID numbers when searching for CDR records</TD><TD><INPUT TYPE="text" NAME="voip_cdr__default_prefix" VALUE="+1"></TD></TR><TR><TD ALIGN="right">Disable rating of CDR records based on the "src" field in addition to "charged_party"</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__disable_src" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Destination prefix for domestic CDR records</TD><TD><INPUT TYPE="text" NAME="voip_cdr__domestic_prefix" VALUE="1"></TD></TR><TR><TD ALIGN="right">Destination prefix for international CDR records</TD><TD><INPUT TYPE="text" NAME="voip_cdr__international_prefix" VALUE="011"></TD></TR><TR><TD ALIGN="right">Disable automatic toll-free processing</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__disable_tollfree" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the amaflags field is set to "2" ("BILL"/"BILLING").</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__use_amaflags" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the Carrier ID is set to any of these (comma-separated) values: </TD><TD><INPUT TYPE="text" NAME="voip_cdr__use_carrierid" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the CDR Type is set to this cdrtypenum: </TD><TD><INPUT TYPE="text" NAME="voip_cdr__use_cdrtypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the CDR Type is set to this cdrtypenum: </TD><TD><INPUT TYPE="text" NAME="voip_cdr__ignore_cdrtypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the CDR Call Type is set to this calltypenum: </TD><TD><INPUT TYPE="text" NAME="voip_cdr__use_calltypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the CDR Call Type is set to this calltypenum: </TD><TD><INPUT TYPE="text" NAME="voip_cdr__ignore_calltypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the Disposition is set to any of these (comma-separated) values: </TD><TD><INPUT TYPE="text" NAME="voip_cdr__ignore_disposition" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the Disposition is set to any of these (comma-separated) values: </TD><TD><INPUT TYPE="text" NAME="voip_cdr__disposition_in" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the dcontext is set to any of these (comma-separated) values: </TD><TD><INPUT TYPE="text" NAME="voip_cdr__skip_dcontext" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the destination number starts with any of these values: </TD><TD><INPUT TYPE="text" NAME="voip_cdr__skip_dst_prefix" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the dstchannel starts with:</TD><TD><INPUT TYPE="text" NAME="voip_cdr__skip_dstchannel_prefix" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the source is more than this many digits:</TD><TD><INPUT TYPE="text" NAME="voip_cdr__skip_src_length_more" VALUE=""></TD></TR><TR><TD ALIGN="right">Do charge for CDRs where source is equal or greater than the specified digits, when accountcode is toll free</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__noskip_src_length_accountcode_tollfree" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Optional alternate rate plan when accountcode is toll free: </TD><TD><SELECT NAME="voip_cdr__accountcode_tollfree_ratenum"><OPTION VALUE=""></SELECT></TD></TR><TR><TD ALIGN="right">When using an alternate rate plan for toll-free accountcodes, the CDR field to use in rating calculations</TD><TD><SELECT NAME="voip_cdr__accountcode_tollfree_field"><OPTION VALUE="dst">Destination (dst)<OPTION VALUE="src">Source (src)</SELECT></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the destination is less than this many digits:</TD><TD><INPUT TYPE="text" NAME="voip_cdr__skip_dst_length_less" VALUE=""></TD></TR><TR><TD ALIGN="right">Do charge for CDRs where dst is less than the specified digits, when accountcode is toll free</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__noskip_dst_length_accountcode_tollfree" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the lastapp matches this value: </TD><TD><INPUT TYPE="text" NAME="voip_cdr__skip_lastapp" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where max_callers is less than or equal to this value: </TD><TD><INPUT TYPE="text" NAME="voip_cdr__skip_max_callers" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for calls between numbers belonging to the same customer</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__skip_same_customer" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Calculate usage based on the duration field instead of the billsec field</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__use_duration" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Rewrite these (comma-separated) destination numbers to 411 for rating purposes (also ignore any carrierid check): </TD><TD><INPUT TYPE="text" NAME="voip_cdr__411_rewrite" VALUE=""></TD></TR><TR><TD ALIGN="right">CDR display format for invoices</TD><TD><SELECT NAME="voip_cdr__output_format"><OPTION VALUE="" SELECTED><OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="source_default">Default with source<OPTION VALUE="basic">Basic<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="simple">Simple<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="simple2">Simple with source<OPTION VALUE="default">Default</SELECT></TD></TR><TR><TD ALIGN="right">CDR display format for selfservice</TD><TD><SELECT NAME="voip_cdr__selfservice_format"><OPTION VALUE="" SELECTED><OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="source_default">Default with source<OPTION VALUE="basic">Basic<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="simple">Simple<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="simple2">Simple with source<OPTION VALUE="default">Default</SELECT></TD></TR><TR><TD ALIGN="right">Inbound CDR display format for selfservice</TD><TD><SELECT NAME="voip_cdr__selfservice_inbound_format"><OPTION VALUE="" SELECTED><OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="source_default">Default with source<OPTION VALUE="basic">Basic<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="simple">Simple<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="simple2">Simple with source<OPTION VALUE="default">Default</SELECT></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section. The section is defined in the next option.</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__usage_mandate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Section in which to place usage charges (whether separated or not): </TD><TD><INPUT TYPE="text" NAME="voip_cdr__usage_section" VALUE=""></TD></TR><TR><TD ALIGN="right">Include usage summary with recurring charges when usage is in separate section</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__summarize_usage" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show details for included / no-charge calls.</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__usage_showzero" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Generate an invoice immediately for every call (as well any setup fee, upon first payment). Useful for prepaid.</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__bill_every_call" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill for all phone numbers that were active during the billing period</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__bill_inactive_svcs" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Only bill CDRs with a date during the package billing period</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__bill_only_pkg_dates" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Consider for tax purposes the number of lines to be svc_phones that may be provisioned rather than those that actually are.</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__count_available_phones" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="voip_cdr__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="voip_cdr__OPTIONS" VALUE="disable_tollfree,summarize_usage,prorate_round_day,international_prefix,recur_temporality,selfservice_format,skip_max_callers,delay_cancel,skip_same_customer,setup_fee,usage_mandate,count_available_phones,recur_method,use_amaflags,rating_method,noskip_src_length_accountcode_tollfree,a2billing_retail_cost_min_offp,a2billing_carrier_cost_min,bill_every_call,use_duration,skip_src_length_more,skip_dst_prefix,unused_credit_cancel,ignore_disposition,skip_dcontext,ignore_cdrtypenum,calls_included,cdr_svc_method,a2billing_tariff,ignore_calltypenum,min_charge,domestic_prefix,disposition_in,skip_dst_length_less,a2billing_retail_increment_offp,disable_src,a2billing_carrier_increment_offp,usage_showzero,skip_lastapp,noskip_dst_length_accountcode_tollfree,a2billing_retail_initblock_offp,sec_granularity,suspend_bill,rounding,a2billing_simultaccess,recur_fee,bill_inactive_svcs,accountcode_tollfree_field,min_included,ratenum,intrastate_ratenum,a2billing_type,prorate_verbose,unused_credit_suspend,usage_section,ignore_unrateable,output_format,use_calltypenum,prorate_defer_bill,cutoff_day,use_cdrtypenum,default_prefix,411_rewrite,accountcode_tollfree_ratenum,selfservice_inbound_format,bill_only_pkg_dates,add_full_period,use_carrierid,skip_dstchannel_prefix,a2billing_carrer_initblock_offp,unused_credit_change"> +</TD></TR><TR><TD ALIGN="right">Number of calls included at no usage charge</TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__calls_included" VALUE=""></TD></TR><TR><TD ALIGN="right">Charge per minute when using "single price per minute" rating method</TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__min_charge" VALUE=""></TD></TR><TR><TD ALIGN="right">Minutes included when using the "single price per minute" or "prefix" rating method</TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__min_included" VALUE=""></TD></TR><TR><TD ALIGN="right">Granularity when using "single price per minute" rating method</TD><TD> + <SELECT NAME="voip_cdr__sec_granularity"><OPTION VALUE="1">1 second<OPTION VALUE="6">6 second<OPTION VALUE="30">30 second<OPTION VALUE="60">minute<OPTION VALUE="0">call</SELECT></TD></TR><TR><TD ALIGN="right">Handling of calls without a rate in the rate table</TD><TD> + <SELECT NAME="voip_cdr__ignore_unrateable"><OPTION VALUE="" SELECTED>Exit with a fatal error<OPTION VALUE="1">Ignore and continue<OPTION VALUE="2">Flag for later review</SELECT></TD></TR><TR><TD ALIGN="right">Default prefix optionally prepended to customer DID numbers when searching for CDR records</TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__default_prefix" VALUE="+1"></TD></TR><TR><TD ALIGN="right">Disable rating of CDR records based on the "src" field in addition to "charged_party"</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__disable_src" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Destination prefix for domestic CDR records</TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__domestic_prefix" VALUE="1"></TD></TR><TR><TD ALIGN="right">Destination prefix for international CDR records</TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__international_prefix" VALUE="011"></TD></TR><TR><TD ALIGN="right">Disable automatic toll-free processing</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__disable_tollfree" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the amaflags field is set to "2" ("BILL"/"BILLING").</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__use_amaflags" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the Carrier ID is set to any of these (comma-separated) values: </TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__use_carrierid" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the CDR Type is set to this cdrtypenum: </TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__use_cdrtypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the CDR Type is set to this cdrtypenum: </TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__ignore_cdrtypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the CDR Call Type is set to this calltypenum: </TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__use_calltypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the CDR Call Type is set to this calltypenum: </TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__ignore_calltypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the Disposition is set to any of these (comma-separated) values: </TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__ignore_disposition" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the Disposition is set to any of these (comma-separated) values: </TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__disposition_in" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the dcontext is set to any of these (comma-separated) values: </TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__skip_dcontext" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the destination number starts with any of these values: </TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__skip_dst_prefix" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the dstchannel starts with:</TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__skip_dstchannel_prefix" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the source is more than this many digits:</TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__skip_src_length_more" VALUE=""></TD></TR><TR><TD ALIGN="right">Do charge for CDRs where source is equal or greater than the specified digits, when accountcode is toll free</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__noskip_src_length_accountcode_tollfree" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Optional alternate rate plan when accountcode is toll free: </TD><TD> + <SELECT NAME="voip_cdr__accountcode_tollfree_ratenum"><OPTION VALUE=""></SELECT></TD></TR><TR><TD ALIGN="right">When using an alternate rate plan for toll-free accountcodes, the CDR field to use in rating calculations</TD><TD> + <SELECT NAME="voip_cdr__accountcode_tollfree_field"><OPTION VALUE="dst">Destination (dst)<OPTION VALUE="src">Source (src)</SELECT></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the destination is less than this many digits:</TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__skip_dst_length_less" VALUE=""></TD></TR><TR><TD ALIGN="right">Do charge for CDRs where dst is less than the specified digits, when accountcode is toll free</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__noskip_dst_length_accountcode_tollfree" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the lastapp matches this value: </TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__skip_lastapp" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where max_callers is less than or equal to this value: </TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__skip_max_callers" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for calls between numbers belonging to the same customer</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__skip_same_customer" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Calculate usage based on the duration field instead of the billsec field</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__use_duration" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Rewrite these (comma-separated) destination numbers to 411 for rating purposes (also ignore any carrierid check): </TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__411_rewrite" VALUE=""></TD></TR><TR><TD ALIGN="right">CDR display format for invoices</TD><TD> + <SELECT NAME="voip_cdr__output_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic">Basic<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="default">Default<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="simple">Simple<OPTION VALUE="simple2">Simple with source<OPTION VALUE="source_default">Default with source<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix</SELECT></TD></TR><TR><TD ALIGN="right">CDR display format for selfservice</TD><TD> + <SELECT NAME="voip_cdr__selfservice_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic">Basic<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="default">Default<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="simple">Simple<OPTION VALUE="simple2">Simple with source<OPTION VALUE="source_default">Default with source<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix</SELECT></TD></TR><TR><TD ALIGN="right">Inbound CDR display format for selfservice</TD><TD> + <SELECT NAME="voip_cdr__selfservice_inbound_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic">Basic<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="default">Default<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="simple">Simple<OPTION VALUE="simple2">Simple with source<OPTION VALUE="source_default">Default with source<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix</SELECT></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section. The section is defined in the next option.</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__usage_mandate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Section in which to place usage charges (whether separated or not): </TD><TD> + <INPUT TYPE="text" NAME="voip_cdr__usage_section" VALUE=""></TD></TR><TR><TD ALIGN="right">Include usage summary with recurring charges when usage is in separate section</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__summarize_usage" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show details for included / no-charge calls.</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__usage_showzero" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Generate an invoice immediately for every call (as well any setup fee, upon first payment). Useful for prepaid.</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__bill_every_call" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill for all phone numbers that were active during the billing period</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__bill_inactive_svcs" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Only bill CDRs with a date during the package billing period</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__bill_only_pkg_dates" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Consider for tax purposes the number of lines to be svc_phones that may be provisioned rather than those that actually are.</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__count_available_phones" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_cdr__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "voip_cdr__OPTIONS" + ID = "voip_cdr__OPTIONS" + VALUE = "recur_temporality,recur_method,cutoff_day,prorate_defer_bill,prorate_round_day,add_full_period,prorate_verbose,cdr_svc_method,rating_method,rounding,ratenum,intrastate_ratenum,calls_included,min_charge,min_included,sec_granularity,ignore_unrateable,default_prefix,disable_src,domestic_prefix,international_prefix,disable_tollfree,use_amaflags,use_carrierid,use_cdrtypenum,ignore_cdrtypenum,use_calltypenum,ignore_calltypenum,ignore_disposition,disposition_in,skip_dcontext,skip_dst_prefix,skip_dstchannel_prefix,skip_src_length_more,noskip_src_length_accountcode_tollfree,accountcode_tollfree_ratenum,accountcode_tollfree_field,skip_dst_length_less,noskip_dst_length_accountcode_tollfree,skip_lastapp,skip_max_callers,skip_same_customer,use_duration,411_rewrite,output_format,selfservice_format,selfservice_inbound_format,usage_mandate,usage_section,summarize_usage,usage_showzero,bill_every_call,bill_inactive_svcs,bill_only_pkg_dates,count_available_phones,suspend_bill,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4394,7 +4750,46 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Charge recurring fee for period</TD><TD><SELECT NAME="voip_inbound__recur_temporality"><OPTION VALUE="upcoming">Upcoming (future)<OPTION VALUE="preceding">Preceding (past)</SELECT></TD></TR><TR><TD ALIGN="right">Recurring fee method</TD><TD><SELECT NAME="voip_inbound__recur_method"><OPTION VALUE="anniversary">Charge the recurring fee at the frequency specified above<OPTION VALUE="prorate">Charge a prorated fee the first time (selectable billing date)<OPTION VALUE="subscription">Charge the full fee for the first partial period (selectable billing date)</SELECT></TD></TR><TR><TD ALIGN="right">Billing Day (1 - 28) for prorating or subscription</TD><TD><INPUT TYPE="text" NAME="voip_inbound__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">When prorating, defer the first bill until the billing day</TD><TD><INPUT TYPE="checkbox" NAME="voip_inbound__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When prorating, round to the nearest full day</TD><TD><INPUT TYPE="checkbox" NAME="voip_inbound__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD><INPUT TYPE="checkbox" NAME="voip_inbound__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD><INPUT TYPE="checkbox" NAME="voip_inbound__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Charge per minute</TD><TD><INPUT TYPE="text" NAME="voip_inbound__min_charge" VALUE=""></TD></TR><TR><TD ALIGN="right">Minutes included</TD><TD><INPUT TYPE="text" NAME="voip_inbound__min_included" VALUE=""></TD></TR><TR><TD ALIGN="right">Granularity</TD><TD><SELECT NAME="voip_inbound__sec_granularity"><OPTION VALUE="1">1 second<OPTION VALUE="6">6 second<OPTION VALUE="30">30 second<OPTION VALUE="60">minute<OPTION VALUE="0">call</SELECT></TD></TR><TR><TD ALIGN="right">Default prefix optionally prepended to customer DID numbers when searching for CDR records</TD><TD><INPUT TYPE="text" NAME="voip_inbound__default_prefix" VALUE="+1"></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the amaflags field is set to "2" ("BILL"/"BILLING").</TD><TD><INPUT TYPE="checkbox" NAME="voip_inbound__use_amaflags" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the Carrier ID is set to any of these (comma-separated) values: </TD><TD><INPUT TYPE="text" NAME="voip_inbound__use_carrierid" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the CDR Type is set to this cdrtypenum: </TD><TD><INPUT TYPE="text" NAME="voip_inbound__use_cdrtypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the CDR Type is set to this cdrtypenum: </TD><TD><INPUT TYPE="text" NAME="voip_inbound__ignore_cdrtypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the CDR Call Type is set to this cdrtypenum: </TD><TD><INPUT TYPE="text" NAME="voip_inbound__use_calltypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the CDR Call Type is set to this cdrtypenum: </TD><TD><INPUT TYPE="text" NAME="voip_inbound__ignore_calltypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the Disposition is set to any of these (comma-separated) values: </TD><TD><INPUT TYPE="text" NAME="voip_inbound__ignore_disposition" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the Disposition is set to any of these (comma-separated) values: </TD><TD><INPUT TYPE="text" NAME="voip_inbound__disposition_in" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the dcontext is set to any of these (comma-separated) values:</TD><TD><INPUT TYPE="text" NAME="voip_inbound__skip_dcontext" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the dstchannel starts with:</TD><TD><INPUT TYPE="text" NAME="voip_inbound__skip_dstchannel_prefix" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the destination is less than this many digits:</TD><TD><INPUT TYPE="text" NAME="voip_inbound__skip_dst_length_less" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the lastapp matches this value</TD><TD><INPUT TYPE="text" NAME="voip_inbound__skip_lastapp" VALUE=""></TD></TR><TR><TD ALIGN="right">Calculate usage based on the duration field instead of the billsec field</TD><TD><INPUT TYPE="checkbox" NAME="voip_inbound__use_duration" VALUE=1 ></TD></TR><TR><TD ALIGN="right">CDR invoice display format</TD><TD><SELECT NAME="voip_inbound__output_format"><OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="source_default">Default with source<OPTION VALUE="basic">Basic<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="simple">Simple<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="simple2">Simple with source<OPTION VALUE="default">Default<OPTION VALUE="sum_count_class">Summary, one line per usage class</SELECT></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section</TD><TD><INPUT TYPE="checkbox" NAME="voip_inbound__usage_mandate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Include usage summary with recurring charges when usage is in separate section</TD><TD><INPUT TYPE="checkbox" NAME="voip_inbound__summarize_usage" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Section in which to place usage charges (whether separated or not)</TD><TD><INPUT TYPE="text" NAME="voip_inbound__usage_section" VALUE=""></TD></TR><TR><TD ALIGN="right">Generate an invoice immediately for every call. Useful for prepaid.</TD><TD><INPUT TYPE="checkbox" NAME="voip_inbound__bill_every_call" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="voip_inbound__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="voip_inbound__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="voip_inbound__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="voip_inbound__OPTIONS" VALUE="a2billing_carrier_increment_offp,a2billing_retail_increment_offp,summarize_usage,skip_lastapp,sec_granularity,a2billing_retail_initblock_offp,prorate_round_day,recur_temporality,a2billing_simultaccess,recur_fee,delay_cancel,min_included,setup_fee,usage_mandate,use_amaflags,recur_method,prorate_verbose,a2billing_type,a2billing_retail_cost_min_offp,bill_every_call,unused_credit_suspend,usage_section,a2billing_carrier_cost_min,use_duration,use_calltypenum,unused_credit_cancel,output_format,ignore_disposition,use_cdrtypenum,cutoff_day,prorate_defer_bill,ignore_calltypenum,min_charge,skip_dcontext,ignore_cdrtypenum,default_prefix,a2billing_tariff,disposition_in,a2billing_carrer_initblock_offp,use_carrierid,add_full_period,skip_dstchannel_prefix,skip_dst_length_less,unused_credit_change"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Charge recurring fee for period</TD><TD> + <SELECT NAME="voip_inbound__recur_temporality"><OPTION VALUE="upcoming">Upcoming (future)<OPTION VALUE="preceding">Preceding (past)</SELECT></TD></TR><TR><TD ALIGN="right">Recurring fee method</TD><TD> + <SELECT NAME="voip_inbound__recur_method"><OPTION VALUE="anniversary">Charge the recurring fee at the frequency specified above<OPTION VALUE="prorate">Charge a prorated fee the first time (selectable billing date)<OPTION VALUE="subscription">Charge the full fee for the first partial period (selectable billing date)</SELECT></TD></TR><TR><TD ALIGN="right">Billing Day (1 - 28) for prorating or subscription</TD><TD> + <INPUT TYPE="text" NAME="voip_inbound__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">When prorating, defer the first bill until the billing day</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_inbound__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When prorating, round to the nearest full day</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_inbound__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_inbound__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_inbound__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Charge per minute</TD><TD> + <INPUT TYPE="text" NAME="voip_inbound__min_charge" VALUE=""></TD></TR><TR><TD ALIGN="right">Minutes included</TD><TD> + <INPUT TYPE="text" NAME="voip_inbound__min_included" VALUE=""></TD></TR><TR><TD ALIGN="right">Granularity</TD><TD> + <SELECT NAME="voip_inbound__sec_granularity"><OPTION VALUE="1">1 second<OPTION VALUE="6">6 second<OPTION VALUE="30">30 second<OPTION VALUE="60">minute<OPTION VALUE="0">call</SELECT></TD></TR><TR><TD ALIGN="right">Default prefix optionally prepended to customer DID numbers when searching for CDR records</TD><TD> + <INPUT TYPE="text" NAME="voip_inbound__default_prefix" VALUE="+1"></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the amaflags field is set to "2" ("BILL"/"BILLING").</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_inbound__use_amaflags" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the Carrier ID is set to any of these (comma-separated) values: </TD><TD> + <INPUT TYPE="text" NAME="voip_inbound__use_carrierid" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the CDR Type is set to this cdrtypenum: </TD><TD> + <INPUT TYPE="text" NAME="voip_inbound__use_cdrtypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the CDR Type is set to this cdrtypenum: </TD><TD> + <INPUT TYPE="text" NAME="voip_inbound__ignore_cdrtypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the CDR Call Type is set to this cdrtypenum: </TD><TD> + <INPUT TYPE="text" NAME="voip_inbound__use_calltypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the CDR Call Type is set to this cdrtypenum: </TD><TD> + <INPUT TYPE="text" NAME="voip_inbound__ignore_calltypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the Disposition is set to any of these (comma-separated) values: </TD><TD> + <INPUT TYPE="text" NAME="voip_inbound__ignore_disposition" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the Disposition is set to any of these (comma-separated) values: </TD><TD> + <INPUT TYPE="text" NAME="voip_inbound__disposition_in" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the dcontext is set to any of these (comma-separated) values:</TD><TD> + <INPUT TYPE="text" NAME="voip_inbound__skip_dcontext" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the dstchannel starts with:</TD><TD> + <INPUT TYPE="text" NAME="voip_inbound__skip_dstchannel_prefix" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the destination is less than this many digits:</TD><TD> + <INPUT TYPE="text" NAME="voip_inbound__skip_dst_length_less" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the lastapp matches this value</TD><TD> + <INPUT TYPE="text" NAME="voip_inbound__skip_lastapp" VALUE=""></TD></TR><TR><TD ALIGN="right">Calculate usage based on the duration field instead of the billsec field</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_inbound__use_duration" VALUE=1 ></TD></TR><TR><TD ALIGN="right">CDR invoice display format</TD><TD> + <SELECT NAME="voip_inbound__output_format"><OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="simple2">Simple with source<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="simple">Simple<OPTION VALUE="source_default">Default with source<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic">Basic<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="default">Default</SELECT></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_inbound__usage_mandate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Include usage summary with recurring charges when usage is in separate section</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_inbound__summarize_usage" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Section in which to place usage charges (whether separated or not)</TD><TD> + <INPUT TYPE="text" NAME="voip_inbound__usage_section" VALUE=""></TD></TR><TR><TD ALIGN="right">Generate an invoice immediately for every call. Useful for prepaid.</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_inbound__bill_every_call" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_inbound__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_inbound__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_inbound__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "voip_inbound__OPTIONS" + ID = "voip_inbound__OPTIONS" + VALUE = "recur_temporality,recur_method,cutoff_day,prorate_defer_bill,prorate_round_day,add_full_period,prorate_verbose,min_charge,min_included,sec_granularity,default_prefix,use_amaflags,use_carrierid,use_cdrtypenum,ignore_cdrtypenum,use_calltypenum,ignore_calltypenum,ignore_disposition,disposition_in,skip_dcontext,skip_dstchannel_prefix,skip_dst_length_less,skip_lastapp,use_duration,output_format,usage_mandate,summarize_usage,usage_section,bill_every_call,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4403,7 +4798,64 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Charge recurring fee for period</TD><TD><SELECT NAME="voip_tiered__recur_temporality"><OPTION VALUE="upcoming">Upcoming (future)<OPTION VALUE="preceding">Preceding (past)</SELECT></TD></TR><TR><TD ALIGN="right">Recurring fee method</TD><TD><SELECT NAME="voip_tiered__recur_method"><OPTION VALUE="anniversary">Charge the recurring fee at the frequency specified above<OPTION VALUE="prorate">Charge a prorated fee the first time (selectable billing date)<OPTION VALUE="subscription">Charge the full fee for the first partial period (selectable billing date)</SELECT></TD></TR><TR><TD ALIGN="right">Billing Day (1 - 28) for prorating or subscription</TD><TD><INPUT TYPE="text" NAME="voip_tiered__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">When prorating, defer the first bill until the billing day</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When prorating, round to the nearest full day</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">CDR service matching method</TD><TD><SELECT NAME="voip_tiered__cdr_svc_method"><OPTION VALUE="svc_phone.phonenum">Phone numbers (svc_phone.phonenum)<OPTION VALUE="svc_pbx.title">PBX name (svc_pbx.title)<OPTION VALUE="svc_pbx.svcnum">Freeside service # (svc_pbx.svcnum)<OPTION VALUE="svc_pbx.ip.src">PBX name to source IP address<OPTION VALUE="svc_pbx.ip.dst">PBX name to destination IP address<OPTION VALUE="svc_acct.username">Username (svc_acct.username)</SELECT></TD></TR><TR><TD ALIGN="right">Call direction when using phone number matching</TD><TD><SELECT NAME="voip_tiered__cdr_inout"><OPTION VALUE="outbound">Outbound<OPTION VALUE="inbound">Inbound<OPTION VALUE="outbound_inbound">Outbound and Inbound</SELECT></TD></TR><TR><TD ALIGN="right">Tier plan</TD><TD><SELECT NAME="voip_tiered__tiernum"></SELECT></TD></TR><TR><TD ALIGN="right">Rounding for destination prefix rating</TD><TD><SELECT NAME="voip_tiered__rounding"><OPTION VALUE="2">Two decimal places (cent)<OPTION VALUE="4">Four decimal places (100th of a cent)</SELECT></TD></TR><TR><TD ALIGN="right">Number of calls included at no usage charge</TD><TD><INPUT TYPE="text" NAME="voip_tiered__calls_included" VALUE=""></TD></TR><TR><TD ALIGN="right">Minutes included</TD><TD><INPUT TYPE="text" NAME="voip_tiered__min_included" VALUE=""></TD></TR><TR><TD ALIGN="right">Granularity</TD><TD><SELECT NAME="voip_tiered__sec_granularity"><OPTION VALUE="1">1 second<OPTION VALUE="6">6 second<OPTION VALUE="30">30 second<OPTION VALUE="60">minute<OPTION VALUE="0">call</SELECT></TD></TR><TR><TD ALIGN="right">Default prefix optionally prepended to customer DID numbers when searching for CDR records</TD><TD><INPUT TYPE="text" NAME="voip_tiered__default_prefix" VALUE="+1"></TD></TR><TR><TD ALIGN="right">Disable rating of CDR records based on the "src" field in addition to "charged_party"</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__disable_src" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the amaflags field is set to "2" ("BILL"/"BILLING").</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__use_amaflags" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the Carrier ID is set to any of these (comma-separated) values: </TD><TD><INPUT TYPE="text" NAME="voip_tiered__use_carrierid" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the CDR Type is set to this cdrtypenum: </TD><TD><INPUT TYPE="text" NAME="voip_tiered__use_cdrtypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the CDR Type is set to this cdrtypenum: </TD><TD><INPUT TYPE="text" NAME="voip_tiered__ignore_cdrtypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the CDR Call Type is set to this calltypenum: </TD><TD><INPUT TYPE="text" NAME="voip_tiered__use_calltypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the CDR Call Type is set to this calltypenum: </TD><TD><INPUT TYPE="text" NAME="voip_tiered__ignore_calltypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the Disposition is set to any of these (comma-separated) values: </TD><TD><INPUT TYPE="text" NAME="voip_tiered__ignore_disposition" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the Disposition is set to any of these (comma-separated) values: </TD><TD><INPUT TYPE="text" NAME="voip_tiered__disposition_in" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the dcontext is set to any of these (comma-separated) values: </TD><TD><INPUT TYPE="text" NAME="voip_tiered__skip_dcontext" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the destination number starts with any of these values: </TD><TD><INPUT TYPE="text" NAME="voip_tiered__skip_dst_prefix" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the dstchannel starts with:</TD><TD><INPUT TYPE="text" NAME="voip_tiered__skip_dstchannel_prefix" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the source is more than this many digits:</TD><TD><INPUT TYPE="text" NAME="voip_tiered__skip_src_length_more" VALUE=""></TD></TR><TR><TD ALIGN="right">When using an alternate rate plan for toll-free accountcodes, the CDR field to use in rating calculations</TD><TD><SELECT NAME="voip_tiered__accountcode_tollfree_field"><OPTION VALUE="dst">Destination (dst)<OPTION VALUE="src">Source (src)</SELECT></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the destination is less than this many digits:</TD><TD><INPUT TYPE="text" NAME="voip_tiered__skip_dst_length_less" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the lastapp matches this value: </TD><TD><INPUT TYPE="text" NAME="voip_tiered__skip_lastapp" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where max_callers is less than or equal to this value: </TD><TD><INPUT TYPE="text" NAME="voip_tiered__skip_max_callers" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for calls between numbers belonging to the same customer</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__skip_same_customer" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Calculate usage based on the duration field instead of the billsec field</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__use_duration" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Rewrite these (comma-separated) destination numbers to 411 for rating purposes (also ignore any carrierid check): </TD><TD><INPUT TYPE="text" NAME="voip_tiered__411_rewrite" VALUE=""></TD></TR><TR><TD ALIGN="right">CDR display format for invoices</TD><TD><SELECT NAME="voip_tiered__output_format"><OPTION VALUE="" SELECTED><OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="source_default">Default with source<OPTION VALUE="basic">Basic<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="simple">Simple<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="simple2">Simple with source<OPTION VALUE="default">Default</SELECT></TD></TR><TR><TD ALIGN="right">CDR display format for selfservice</TD><TD><SELECT NAME="voip_tiered__selfservice_format"><OPTION VALUE="" SELECTED><OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="source_default">Default with source<OPTION VALUE="basic">Basic<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="simple">Simple<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="simple2">Simple with source<OPTION VALUE="default">Default</SELECT></TD></TR><TR><TD ALIGN="right">Inbound CDR display format for selfservice</TD><TD><SELECT NAME="voip_tiered__selfservice_inbound_format"><OPTION VALUE="" SELECTED><OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="source_default">Default with source<OPTION VALUE="basic">Basic<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="simple">Simple<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="simple2">Simple with source<OPTION VALUE="default">Default</SELECT></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section. The section is defined in the next option.</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__usage_mandate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Section in which to place usage charges (whether separated or not): </TD><TD><INPUT TYPE="text" NAME="voip_tiered__usage_section" VALUE=""></TD></TR><TR><TD ALIGN="right">Include usage summary with recurring charges when usage is in separate section</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__summarize_usage" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show details for included / no-charge calls.</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__usage_showzero" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Generate an invoice immediately for every call (as well any setup fee, upon first payment). Useful for prepaid.</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__bill_every_call" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill for all phone numbers that were active during the billing period</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__bill_inactive_svcs" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Only bill CDRs with a date during the package billing period</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__bill_only_pkg_dates" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Consider for tax purposes the number of lines to be svc_phones that may be provisioned rather than those that actually are.</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__count_available_phones" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="voip_tiered__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="voip_tiered__OPTIONS" VALUE="default_prefix,accountcode_tollfree_ratenum,411_rewrite,selfservice_inbound_format,bill_only_pkg_dates,prorate_defer_bill,cutoff_day,use_cdrtypenum,unused_credit_change,use_carrierid,add_full_period,skip_dstchannel_prefix,a2billing_carrer_initblock_offp,unused_credit_suspend,usage_section,prorate_verbose,a2billing_type,output_format,use_calltypenum,tiernum,ignore_unrateable,cdr_inout,a2billing_simultaccess,bill_inactive_svcs,recur_fee,ratenum,intrastate_ratenum,min_included,accountcode_tollfree_field,usage_showzero,skip_lastapp,disable_src,a2billing_retail_increment_offp,a2billing_carrier_increment_offp,rounding,noskip_dst_length_accountcode_tollfree,sec_granularity,a2billing_retail_initblock_offp,suspend_bill,calls_included,skip_dcontext,ignore_cdrtypenum,a2billing_tariff,cdr_svc_method,ignore_calltypenum,min_charge,ignore_disposition,skip_dst_length_less,domestic_prefix,disposition_in,a2billing_carrier_cost_min,bill_every_call,rating_method,a2billing_retail_cost_min_offp,noskip_src_length_accountcode_tollfree,skip_src_length_more,skip_dst_prefix,unused_credit_cancel,use_duration,delay_cancel,recur_temporality,selfservice_format,skip_max_callers,skip_same_customer,setup_fee,usage_mandate,count_available_phones,recur_method,use_amaflags,disable_tollfree,summarize_usage,international_prefix,prorate_round_day"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Charge recurring fee for period</TD><TD> + <SELECT NAME="voip_tiered__recur_temporality"><OPTION VALUE="upcoming">Upcoming (future)<OPTION VALUE="preceding">Preceding (past)</SELECT></TD></TR><TR><TD ALIGN="right">Recurring fee method</TD><TD> + <SELECT NAME="voip_tiered__recur_method"><OPTION VALUE="anniversary">Charge the recurring fee at the frequency specified above<OPTION VALUE="prorate">Charge a prorated fee the first time (selectable billing date)<OPTION VALUE="subscription">Charge the full fee for the first partial period (selectable billing date)</SELECT></TD></TR><TR><TD ALIGN="right">Billing Day (1 - 28) for prorating or subscription</TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">When prorating, defer the first bill until the billing day</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When prorating, round to the nearest full day</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">CDR service matching method</TD><TD> + <SELECT NAME="voip_tiered__cdr_svc_method"><OPTION VALUE="svc_phone.phonenum">Phone numbers (svc_phone.phonenum)<OPTION VALUE="svc_pbx.title">PBX name (svc_pbx.title)<OPTION VALUE="svc_pbx.svcnum">Freeside service # (svc_pbx.svcnum)<OPTION VALUE="svc_pbx.ip.src">PBX name to source IP address<OPTION VALUE="svc_pbx.ip.dst">PBX name to destination IP address<OPTION VALUE="svc_acct.username">Username (svc_acct.username)</SELECT></TD></TR><TR><TD ALIGN="right">Call direction when using phone number matching</TD><TD> + <SELECT NAME="voip_tiered__cdr_inout"><OPTION VALUE="outbound">Outbound<OPTION VALUE="inbound">Inbound<OPTION VALUE="outbound_inbound">Outbound and Inbound</SELECT></TD></TR><TR><TD ALIGN="right">Tier plan</TD><TD> + <SELECT NAME="voip_tiered__tiernum"></SELECT></TD></TR><TR><TD ALIGN="right">Rounding for destination prefix rating</TD><TD> + <SELECT NAME="voip_tiered__rounding"><OPTION VALUE="2">Two decimal places (cent)<OPTION VALUE="4">Four decimal places (100th of a cent)</SELECT></TD></TR><TR><TD ALIGN="right">Number of calls included at no usage charge</TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__calls_included" VALUE=""></TD></TR><TR><TD ALIGN="right">Minutes included</TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__min_included" VALUE=""></TD></TR><TR><TD ALIGN="right">Granularity</TD><TD> + <SELECT NAME="voip_tiered__sec_granularity"><OPTION VALUE="1">1 second<OPTION VALUE="6">6 second<OPTION VALUE="30">30 second<OPTION VALUE="60">minute<OPTION VALUE="0">call</SELECT></TD></TR><TR><TD ALIGN="right">Default prefix optionally prepended to customer DID numbers when searching for CDR records</TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__default_prefix" VALUE="+1"></TD></TR><TR><TD ALIGN="right">Disable rating of CDR records based on the "src" field in addition to "charged_party"</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__disable_src" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the amaflags field is set to "2" ("BILL"/"BILLING").</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__use_amaflags" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the Carrier ID is set to any of these (comma-separated) values: </TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__use_carrierid" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the CDR Type is set to this cdrtypenum: </TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__use_cdrtypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the CDR Type is set to this cdrtypenum: </TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__ignore_cdrtypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the CDR Call Type is set to this calltypenum: </TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__use_calltypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the CDR Call Type is set to this calltypenum: </TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__ignore_calltypenum" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the Disposition is set to any of these (comma-separated) values: </TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__ignore_disposition" VALUE=""></TD></TR><TR><TD ALIGN="right">Only charge for CDRs where the Disposition is set to any of these (comma-separated) values: </TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__disposition_in" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the dcontext is set to any of these (comma-separated) values: </TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__skip_dcontext" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the destination number starts with any of these values: </TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__skip_dst_prefix" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the dstchannel starts with:</TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__skip_dstchannel_prefix" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the source is more than this many digits:</TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__skip_src_length_more" VALUE=""></TD></TR><TR><TD ALIGN="right">When using an alternate rate plan for toll-free accountcodes, the CDR field to use in rating calculations</TD><TD> + <SELECT NAME="voip_tiered__accountcode_tollfree_field"><OPTION VALUE="dst">Destination (dst)<OPTION VALUE="src">Source (src)</SELECT></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the destination is less than this many digits:</TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__skip_dst_length_less" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the lastapp matches this value: </TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__skip_lastapp" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where max_callers is less than or equal to this value: </TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__skip_max_callers" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for calls between numbers belonging to the same customer</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__skip_same_customer" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Calculate usage based on the duration field instead of the billsec field</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__use_duration" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Rewrite these (comma-separated) destination numbers to 411 for rating purposes (also ignore any carrierid check): </TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__411_rewrite" VALUE=""></TD></TR><TR><TD ALIGN="right">CDR display format for invoices</TD><TD> + <SELECT NAME="voip_tiered__output_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic">Basic<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="default">Default<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="simple">Simple<OPTION VALUE="simple2">Simple with source<OPTION VALUE="source_default">Default with source<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix</SELECT></TD></TR><TR><TD ALIGN="right">CDR display format for selfservice</TD><TD> + <SELECT NAME="voip_tiered__selfservice_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic">Basic<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="default">Default<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="simple">Simple<OPTION VALUE="simple2">Simple with source<OPTION VALUE="source_default">Default with source<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix</SELECT></TD></TR><TR><TD ALIGN="right">Inbound CDR display format for selfservice</TD><TD> + <SELECT NAME="voip_tiered__selfservice_inbound_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic">Basic<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="default">Default<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="simple">Simple<OPTION VALUE="simple2">Simple with source<OPTION VALUE="source_default">Default with source<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix</SELECT></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section. The section is defined in the next option.</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__usage_mandate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Section in which to place usage charges (whether separated or not): </TD><TD> + <INPUT TYPE="text" NAME="voip_tiered__usage_section" VALUE=""></TD></TR><TR><TD ALIGN="right">Include usage summary with recurring charges when usage is in separate section</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__summarize_usage" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show details for included / no-charge calls.</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__usage_showzero" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Generate an invoice immediately for every call (as well any setup fee, upon first payment). Useful for prepaid.</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__bill_every_call" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill for all phone numbers that were active during the billing period</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__bill_inactive_svcs" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Only bill CDRs with a date during the package billing period</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__bill_only_pkg_dates" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Consider for tax purposes the number of lines to be svc_phones that may be provisioned rather than those that actually are.</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__count_available_phones" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="voip_tiered__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "voip_tiered__OPTIONS" + ID = "voip_tiered__OPTIONS" + VALUE = "recur_temporality,recur_method,cutoff_day,prorate_defer_bill,prorate_round_day,add_full_period,prorate_verbose,cdr_svc_method,cdr_inout,tiernum,rounding,calls_included,min_included,sec_granularity,default_prefix,disable_src,use_amaflags,use_carrierid,use_cdrtypenum,ignore_cdrtypenum,use_calltypenum,ignore_calltypenum,ignore_disposition,disposition_in,skip_dcontext,skip_dst_prefix,skip_dstchannel_prefix,skip_src_length_more,accountcode_tollfree_field,skip_dst_length_less,skip_lastapp,skip_max_callers,skip_same_customer,use_duration,411_rewrite,output_format,selfservice_format,selfservice_inbound_format,usage_mandate,usage_section,summarize_usage,usage_showzero,bill_every_call,bill_inactive_svcs,bill_only_pkg_dates,count_available_phones,suspend_bill,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4412,7 +4864,28 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Charge recurring fee for period</TD><TD><SELECT NAME="cdr_termination__recur_temporality"><OPTION VALUE="upcoming">Upcoming (future)<OPTION VALUE="preceding">Preceding (past)</SELECT></TD></TR><TR><TD ALIGN="right">Recurring fee method</TD><TD><SELECT NAME="cdr_termination__recur_method"><OPTION VALUE="anniversary">Charge the recurring fee at the frequency specified above<OPTION VALUE="prorate">Charge a prorated fee the first time (selectable billing date)<OPTION VALUE="subscription">Charge the full fee for the first partial period (selectable billing date)</SELECT></TD></TR><TR><TD ALIGN="right">Billing Day (1 - 28) for prorating or subscription</TD><TD><INPUT TYPE="text" NAME="cdr_termination__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">When prorating, defer the first bill until the billing day</TD><TD><INPUT TYPE="checkbox" NAME="cdr_termination__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When prorating, round to the nearest full day</TD><TD><INPUT TYPE="checkbox" NAME="cdr_termination__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD><INPUT TYPE="checkbox" NAME="cdr_termination__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD><INPUT TYPE="checkbox" NAME="cdr_termination__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">CDR invoice display format</TD><TD><SELECT NAME="cdr_termination__output_format"><OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="default">Default<OPTION VALUE="simple2">Simple with source<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="source_default">Default with source<OPTION VALUE="basic">Basic<OPTION VALUE="simple">Simple<OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="sum_duration">Summary, one line per service</SELECT></TD></TR><TR><TD ALIGN="right">Section in which to place separate usage charges</TD><TD><INPUT TYPE="text" NAME="cdr_termination__usage_section" VALUE=""></TD></TR><TR><TD ALIGN="right">Include usage summary with recurring charges when usage is in separate section</TD><TD><INPUT TYPE="checkbox" NAME="cdr_termination__summarize_usage" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section</TD><TD><INPUT TYPE="checkbox" NAME="cdr_termination__usage_mandate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="cdr_termination__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="cdr_termination__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="cdr_termination__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="cdr_termination__OPTIONS" VALUE="recur_temporality,cutoff_day,prorate_defer_bill,recur_fee,a2billing_simultaccess,delay_cancel,a2billing_tariff,a2billing_carrer_initblock_offp,add_full_period,usage_mandate,recur_method,unused_credit_change,setup_fee,a2billing_retail_cost_min_offp,a2billing_carrier_increment_offp,prorate_verbose,a2billing_type,a2billing_retail_increment_offp,summarize_usage,a2billing_carrier_cost_min,usage_section,unused_credit_suspend,a2billing_retail_initblock_offp,prorate_round_day,unused_credit_cancel,output_format"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Charge recurring fee for period</TD><TD> + <SELECT NAME="cdr_termination__recur_temporality"><OPTION VALUE="upcoming">Upcoming (future)<OPTION VALUE="preceding">Preceding (past)</SELECT></TD></TR><TR><TD ALIGN="right">Recurring fee method</TD><TD> + <SELECT NAME="cdr_termination__recur_method"><OPTION VALUE="anniversary">Charge the recurring fee at the frequency specified above<OPTION VALUE="prorate">Charge a prorated fee the first time (selectable billing date)<OPTION VALUE="subscription">Charge the full fee for the first partial period (selectable billing date)</SELECT></TD></TR><TR><TD ALIGN="right">Billing Day (1 - 28) for prorating or subscription</TD><TD> + <INPUT TYPE="text" NAME="cdr_termination__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">When prorating, defer the first bill until the billing day</TD><TD> + <INPUT TYPE="checkbox" NAME="cdr_termination__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When prorating, round to the nearest full day</TD><TD> + <INPUT TYPE="checkbox" NAME="cdr_termination__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD> + <INPUT TYPE="checkbox" NAME="cdr_termination__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD> + <INPUT TYPE="checkbox" NAME="cdr_termination__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">CDR invoice display format</TD><TD> + <SELECT NAME="cdr_termination__output_format"><OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="basic">Basic<OPTION VALUE="default">Default<OPTION VALUE="source_default">Default with source<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="simple">Simple<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="simple2">Simple with source<OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="sum_duration">Summary, one line per service</SELECT></TD></TR><TR><TD ALIGN="right">Section in which to place separate usage charges</TD><TD> + <INPUT TYPE="text" NAME="cdr_termination__usage_section" VALUE=""></TD></TR><TR><TD ALIGN="right">Include usage summary with recurring charges when usage is in separate section</TD><TD> + <INPUT TYPE="checkbox" NAME="cdr_termination__summarize_usage" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section</TD><TD> + <INPUT TYPE="checkbox" NAME="cdr_termination__usage_mandate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="cdr_termination__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="cdr_termination__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="cdr_termination__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "cdr_termination__OPTIONS" + ID = "cdr_termination__OPTIONS" + VALUE = "recur_temporality,recur_method,cutoff_day,prorate_defer_bill,prorate_round_day,add_full_period,prorate_verbose,output_format,usage_section,summarize_usage,usage_mandate,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4421,7 +4894,14 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Nibble rate</TD><TD><INPUT TYPE="text" NAME="prepaid_nibblebill__nibble_rate" VALUE=""></TD></TR></TABLE><INPUT TYPE="hidden" NAME="prepaid_nibblebill__OPTIONS" VALUE="nibble_rate,recur_fee,setup_fee"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Nibble rate</TD><TD> + <INPUT TYPE="text" NAME="prepaid_nibblebill__nibble_rate" VALUE=""></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "prepaid_nibblebill__OPTIONS" + ID = "prepaid_nibblebill__OPTIONS" + VALUE = "setup_fee,recur_fee,nibble_rate" +> + + </DIV> @@ -4430,7 +4910,21 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Setup fee for each new service</TD><TD><INPUT TYPE="text" NAME="bulk_simple__svc_setup_fee" VALUE="0"></TD></TR><TR><TD ALIGN="right">Recurring fee for each service</TD><TD><INPUT TYPE="text" NAME="bulk_simple__svc_recur_fee" VALUE="0"></TD></TR><TR><TD ALIGN="right">Only charge fees for these services</TD><TD><SELECT MULTIPLE NAME="bulk_simple__only_svcs"><OPTION VALUE="1">Domain<OPTION VALUE="2">Test svc_acct<OPTION VALUE="3">Test svc_domain<OPTION VALUE="4">Test svc_broadband<OPTION VALUE="5">Test svc_phone</SELECT></TD></TR><TR><TD ALIGN="right">Show a count of services on the invoice, instead of a detailed list</TD><TD><INPUT TYPE="checkbox" NAME="bulk_simple__summarize_svcs" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="bulk_simple__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="bulk_simple__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="bulk_simple__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="bulk_simple__OPTIONS" VALUE="svc_setup_fee,a2billing_simultaccess,recur_fee,delay_cancel,a2billing_tariff,a2billing_carrer_initblock_offp,setup_fee,svc_recur_fee,unused_credit_change,a2billing_type,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_increment_offp,summarize_svcs,unused_credit_suspend,a2billing_carrier_cost_min,a2billing_retail_initblock_offp,only_svcs,unused_credit_cancel"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Setup fee for each new service</TD><TD> + <INPUT TYPE="text" NAME="bulk_simple__svc_setup_fee" VALUE="0"></TD></TR><TR><TD ALIGN="right">Recurring fee for each service</TD><TD> + <INPUT TYPE="text" NAME="bulk_simple__svc_recur_fee" VALUE="0"></TD></TR><TR><TD ALIGN="right">Only charge fees for these services</TD><TD> + <SELECT MULTIPLE NAME="bulk_simple__only_svcs"><OPTION VALUE="1">Domain<OPTION VALUE="2">Test svc_acct<OPTION VALUE="3">Test svc_domain<OPTION VALUE="4">Test svc_broadband<OPTION VALUE="5">Test svc_phone</SELECT></TD></TR><TR><TD ALIGN="right">Show a count of services on the invoice, instead of a detailed list</TD><TD> + <INPUT TYPE="checkbox" NAME="bulk_simple__summarize_svcs" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="bulk_simple__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="bulk_simple__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="bulk_simple__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "bulk_simple__OPTIONS" + ID = "bulk_simple__OPTIONS" + VALUE = "svc_setup_fee,svc_recur_fee,only_svcs,summarize_svcs,no_prorate,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4439,7 +4933,22 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Don't prorate recurring fees on services active for a partial month</TD><TD><INPUT TYPE="checkbox" NAME="bulk__no_prorate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Setup fee for each new service</TD><TD><INPUT TYPE="text" NAME="bulk__svc_setup_fee" VALUE="0"></TD></TR><TR><TD ALIGN="right">Recurring fee for each service</TD><TD><INPUT TYPE="text" NAME="bulk__svc_recur_fee" VALUE="0"></TD></TR><TR><TD ALIGN="right">Only charge fees for these services</TD><TD><SELECT MULTIPLE NAME="bulk__only_svcs"><OPTION VALUE="1">Domain<OPTION VALUE="2">Test svc_acct<OPTION VALUE="3">Test svc_domain<OPTION VALUE="4">Test svc_broadband<OPTION VALUE="5">Test svc_phone</SELECT></TD></TR><TR><TD ALIGN="right">Show a count of services on the invoice, instead of a detailed list</TD><TD><INPUT TYPE="checkbox" NAME="bulk__summarize_svcs" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="bulk__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="bulk__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="bulk__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="bulk__OPTIONS" VALUE="a2billing_type,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_increment_offp,summarize_svcs,unused_credit_suspend,a2billing_carrier_cost_min,a2billing_retail_initblock_offp,only_svcs,unused_credit_cancel,svc_setup_fee,no_prorate,a2billing_simultaccess,recur_fee,delay_cancel,a2billing_tariff,a2billing_carrer_initblock_offp,setup_fee,svc_recur_fee,unused_credit_change"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Don't prorate recurring fees on services active for a partial month</TD><TD> + <INPUT TYPE="checkbox" NAME="bulk__no_prorate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Setup fee for each new service</TD><TD> + <INPUT TYPE="text" NAME="bulk__svc_setup_fee" VALUE="0"></TD></TR><TR><TD ALIGN="right">Recurring fee for each service</TD><TD> + <INPUT TYPE="text" NAME="bulk__svc_recur_fee" VALUE="0"></TD></TR><TR><TD ALIGN="right">Only charge fees for these services</TD><TD> + <SELECT MULTIPLE NAME="bulk__only_svcs"><OPTION VALUE="1">Domain<OPTION VALUE="2">Test svc_acct<OPTION VALUE="3">Test svc_domain<OPTION VALUE="4">Test svc_broadband<OPTION VALUE="5">Test svc_phone</SELECT></TD></TR><TR><TD ALIGN="right">Show a count of services on the invoice, instead of a detailed list</TD><TD> + <INPUT TYPE="checkbox" NAME="bulk__summarize_svcs" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="bulk__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="bulk__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="bulk__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "bulk__OPTIONS" + ID = "bulk__OPTIONS" + VALUE = "no_prorate,svc_setup_fee,svc_recur_fee,only_svcs,summarize_svcs,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4448,7 +4957,25 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Billing Day (1 - 28)</TD><TD><INPUT TYPE="text" NAME="agent__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD><INPUT TYPE="checkbox" NAME="agent__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Disable prorating bulk packages (charge full price for packages active only a portion of the month)</TD><TD><INPUT TYPE="checkbox" NAME="agent__no_pkg_prorate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Separate customer from package display on invoices</TD><TD><INPUT TYPE="checkbox" NAME="agent__display_separate_cust" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill wholesale on cost only, disabling the price fallback</TD><TD><INPUT TYPE="checkbox" NAME="agent__cost_only" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Defer the first bill until the billing day</TD><TD><INPUT TYPE="checkbox" NAME="agent__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Round the prorated period to the nearest full day</TD><TD><INPUT TYPE="checkbox" NAME="agent__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD><INPUT TYPE="checkbox" NAME="agent__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="agent__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="agent__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="agent__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="agent__OPTIONS" VALUE="recur_fee,a2billing_simultaccess,delay_cancel,a2billing_tariff,cost_only,no_pkg_prorate,prorate_defer_bill,cutoff_day,recur_temporality,unused_credit_change,setup_fee,a2billing_carrer_initblock_offp,add_full_period,a2billing_carrier_cost_min,unused_credit_suspend,a2billing_retail_cost_min_offp,a2billing_carrier_increment_offp,prorate_verbose,a2billing_type,a2billing_retail_increment_offp,display_separate_cust,unused_credit_cancel,sync_bill_date,a2billing_retail_initblock_offp,prorate_round_day"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Billing Day (1 - 28)</TD><TD> + <INPUT TYPE="text" NAME="agent__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD> + <INPUT TYPE="checkbox" NAME="agent__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Disable prorating bulk packages (charge full price for packages active only a portion of the month)</TD><TD> + <INPUT TYPE="checkbox" NAME="agent__no_pkg_prorate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Separate customer from package display on invoices</TD><TD> + <INPUT TYPE="checkbox" NAME="agent__display_separate_cust" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill wholesale on cost only, disabling the price fallback</TD><TD> + <INPUT TYPE="checkbox" NAME="agent__cost_only" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Defer the first bill until the billing day</TD><TD> + <INPUT TYPE="checkbox" NAME="agent__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Round the prorated period to the nearest full day</TD><TD> + <INPUT TYPE="checkbox" NAME="agent__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD> + <INPUT TYPE="checkbox" NAME="agent__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="agent__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="agent__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="agent__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "agent__OPTIONS" + ID = "agent__OPTIONS" + VALUE = "cutoff_day,add_full_period,no_pkg_prorate,display_separate_cust,cost_only,prorate_defer_bill,prorate_round_day,prorate_verbose,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4457,7 +4984,28 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Charge recurring fee for period</TD><TD><SELECT NAME="agent_cdr__recur_temporality"><OPTION VALUE="upcoming">Upcoming (future)<OPTION VALUE="preceding">Preceding (past)</SELECT></TD></TR><TR><TD ALIGN="right">Recurring fee method</TD><TD><SELECT NAME="agent_cdr__recur_method"><OPTION VALUE="anniversary">Charge the recurring fee at the frequency specified above<OPTION VALUE="prorate">Charge a prorated fee the first time (selectable billing date)<OPTION VALUE="subscription">Charge the full fee for the first partial period (selectable billing date)</SELECT></TD></TR><TR><TD ALIGN="right">Billing Day (1 - 28) for prorating or subscription</TD><TD><INPUT TYPE="text" NAME="agent_cdr__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">When prorating, defer the first bill until the billing day</TD><TD><INPUT TYPE="checkbox" NAME="agent_cdr__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When prorating, round to the nearest full day</TD><TD><INPUT TYPE="checkbox" NAME="agent_cdr__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD><INPUT TYPE="checkbox" NAME="agent_cdr__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD><INPUT TYPE="checkbox" NAME="agent_cdr__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">CDR invoice display format</TD><TD><SELECT NAME="agent_cdr__output_format"><OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="default">Default<OPTION VALUE="simple2">Simple with source<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="source_default">Default with source<OPTION VALUE="basic">Basic<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="simple">Simple<OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name</SELECT></TD></TR><TR><TD ALIGN="right">Section in which to place separate usage charges</TD><TD><INPUT TYPE="text" NAME="agent_cdr__usage_section" VALUE=""></TD></TR><TR><TD ALIGN="right">Include usage summary with recurring charges when usage is in separate section</TD><TD><INPUT TYPE="checkbox" NAME="agent_cdr__summarize_usage" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section</TD><TD><INPUT TYPE="checkbox" NAME="agent_cdr__usage_mandate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="agent_cdr__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="agent_cdr__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="agent_cdr__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="agent_cdr__OPTIONS" VALUE="add_full_period,a2billing_carrer_initblock_offp,setup_fee,unused_credit_change,recur_method,usage_mandate,cutoff_day,prorate_defer_bill,recur_temporality,a2billing_tariff,delay_cancel,a2billing_simultaccess,recur_fee,prorate_round_day,a2billing_retail_initblock_offp,output_format,unused_credit_cancel,a2billing_retail_increment_offp,a2billing_type,prorate_verbose,a2billing_retail_cost_min_offp,a2billing_carrier_increment_offp,usage_section,unused_credit_suspend,a2billing_carrier_cost_min,summarize_usage"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Charge recurring fee for period</TD><TD> + <SELECT NAME="agent_cdr__recur_temporality"><OPTION VALUE="upcoming">Upcoming (future)<OPTION VALUE="preceding">Preceding (past)</SELECT></TD></TR><TR><TD ALIGN="right">Recurring fee method</TD><TD> + <SELECT NAME="agent_cdr__recur_method"><OPTION VALUE="anniversary">Charge the recurring fee at the frequency specified above<OPTION VALUE="prorate">Charge a prorated fee the first time (selectable billing date)<OPTION VALUE="subscription">Charge the full fee for the first partial period (selectable billing date)</SELECT></TD></TR><TR><TD ALIGN="right">Billing Day (1 - 28) for prorating or subscription</TD><TD> + <INPUT TYPE="text" NAME="agent_cdr__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">When prorating, defer the first bill until the billing day</TD><TD> + <INPUT TYPE="checkbox" NAME="agent_cdr__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When prorating, round to the nearest full day</TD><TD> + <INPUT TYPE="checkbox" NAME="agent_cdr__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD> + <INPUT TYPE="checkbox" NAME="agent_cdr__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD> + <INPUT TYPE="checkbox" NAME="agent_cdr__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">CDR invoice display format</TD><TD> + <SELECT NAME="agent_cdr__output_format"><OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="simple">Simple<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="basic">Basic<OPTION VALUE="default">Default<OPTION VALUE="source_default">Default with source<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="simple2">Simple with source<OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name</SELECT></TD></TR><TR><TD ALIGN="right">Section in which to place separate usage charges</TD><TD> + <INPUT TYPE="text" NAME="agent_cdr__usage_section" VALUE=""></TD></TR><TR><TD ALIGN="right">Include usage summary with recurring charges when usage is in separate section</TD><TD> + <INPUT TYPE="checkbox" NAME="agent_cdr__summarize_usage" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section</TD><TD> + <INPUT TYPE="checkbox" NAME="agent_cdr__usage_mandate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="agent_cdr__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="agent_cdr__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="agent_cdr__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "agent_cdr__OPTIONS" + ID = "agent_cdr__OPTIONS" + VALUE = "recur_temporality,recur_method,cutoff_day,prorate_defer_bill,prorate_round_day,add_full_period,prorate_verbose,output_format,usage_section,summarize_usage,usage_mandate,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4466,7 +5014,27 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Included megabytes/sec (95th percentile)</TD><TD><INPUT TYPE="text" NAME="torrus_bw_percentile__base_mbps" VALUE="0"></TD></TR><TR><TD ALIGN="right">Charge per megabyte/sec (95th percentile)</TD><TD><INPUT TYPE="text" NAME="torrus_bw_percentile__mbps_rate" VALUE="0"></TD></TR><TR><TD ALIGN="right">Auto-add a start date to the 1st, ignoring the current month.</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_percentile__start_1st" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When synchronizing, defer the bill until the customer's next bill date</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_percentile__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When synchronizing, round the prorated period to the nearest full day</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_percentile__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_percentile__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Adjust next bill date forward when unsuspending</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_percentile__unsuspend_adjust_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill the last period on cancellation</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_percentile__bill_recur_on_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill immediately upon suspension</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_percentile__bill_suspend_as_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Optional External ID</TD><TD><INPUT TYPE="text" NAME="torrus_bw_percentile__externalid" VALUE=""></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_percentile__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_percentile__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_percentile__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="torrus_bw_percentile__OPTIONS" VALUE="cutoff_day,recur_temporality,prorate_defer_bill,unsuspend_adjust_bill,externalid,a2billing_tariff,delay_cancel,a2billing_simultaccess,recur_fee,add_full_period,a2billing_carrer_initblock_offp,setup_fee,base_mbps,unused_credit_change,a2billing_retail_increment_offp,a2billing_type,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,unused_credit_suspend,a2billing_carrier_cost_min,mbps_rate,bill_recur_on_cancel,prorate_round_day,a2billing_retail_initblock_offp,start_1st,suspend_bill,sync_bill_date,unused_credit_cancel,bill_suspend_as_cancel"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Included megabytes/sec (95th percentile)</TD><TD> + <INPUT TYPE="text" NAME="torrus_bw_percentile__base_mbps" VALUE="0"></TD></TR><TR><TD ALIGN="right">Charge per megabyte/sec (95th percentile)</TD><TD> + <INPUT TYPE="text" NAME="torrus_bw_percentile__mbps_rate" VALUE="0"></TD></TR><TR><TD ALIGN="right">Auto-add a start date to the 1st, ignoring the current month.</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_percentile__start_1st" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When synchronizing, defer the bill until the customer's next bill date</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_percentile__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When synchronizing, round the prorated period to the nearest full day</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_percentile__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_percentile__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Adjust next bill date forward when unsuspending</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_percentile__unsuspend_adjust_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill the last period on cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_percentile__bill_recur_on_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill immediately upon suspension</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_percentile__bill_suspend_as_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Optional External ID</TD><TD> + <INPUT TYPE="text" NAME="torrus_bw_percentile__externalid" VALUE=""></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_percentile__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_percentile__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_percentile__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "torrus_bw_percentile__OPTIONS" + ID = "torrus_bw_percentile__OPTIONS" + VALUE = "base_mbps,mbps_rate,start_1st,prorate_defer_bill,prorate_round_day,suspend_bill,unsuspend_adjust_bill,bill_recur_on_cancel,bill_suspend_as_cancel,externalid,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4475,7 +5043,27 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Included gigabytes</TD><TD><INPUT TYPE="text" NAME="torrus_bw_usage__base_gb" VALUE="0"></TD></TR><TR><TD ALIGN="right">Charge per gigabyte</TD><TD><INPUT TYPE="text" NAME="torrus_bw_usage__gb_rate" VALUE="0"></TD></TR><TR><TD ALIGN="right">Auto-add a start date to the 1st, ignoring the current month.</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_usage__start_1st" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When synchronizing, defer the bill until the customer's next bill date</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_usage__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When synchronizing, round the prorated period to the nearest full day</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_usage__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_usage__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Adjust next bill date forward when unsuspending</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_usage__unsuspend_adjust_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill the last period on cancellation</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_usage__bill_recur_on_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill immediately upon suspension</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_usage__bill_suspend_as_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Optional External ID</TD><TD><INPUT TYPE="text" NAME="torrus_bw_usage__externalid" VALUE=""></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_usage__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_usage__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="torrus_bw_usage__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="torrus_bw_usage__OPTIONS" VALUE="sync_bill_date,bill_suspend_as_cancel,unused_credit_cancel,prorate_round_day,start_1st,a2billing_retail_initblock_offp,suspend_bill,unused_credit_suspend,a2billing_carrier_cost_min,bill_recur_on_cancel,a2billing_retail_increment_offp,a2billing_type,a2billing_retail_cost_min_offp,a2billing_carrier_increment_offp,setup_fee,unused_credit_change,add_full_period,a2billing_carrer_initblock_offp,externalid,a2billing_tariff,delay_cancel,a2billing_simultaccess,recur_fee,base_gb,prorate_defer_bill,recur_temporality,cutoff_day,unsuspend_adjust_bill,gb_rate"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Included gigabytes</TD><TD> + <INPUT TYPE="text" NAME="torrus_bw_usage__base_gb" VALUE="0"></TD></TR><TR><TD ALIGN="right">Charge per gigabyte</TD><TD> + <INPUT TYPE="text" NAME="torrus_bw_usage__gb_rate" VALUE="0"></TD></TR><TR><TD ALIGN="right">Auto-add a start date to the 1st, ignoring the current month.</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_usage__start_1st" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When synchronizing, defer the bill until the customer's next bill date</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_usage__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When synchronizing, round the prorated period to the nearest full day</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_usage__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Continue recurring billing while suspended</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_usage__suspend_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Adjust next bill date forward when unsuspending</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_usage__unsuspend_adjust_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill the last period on cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_usage__bill_recur_on_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Bill immediately upon suspension</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_usage__bill_suspend_as_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Optional External ID</TD><TD> + <INPUT TYPE="text" NAME="torrus_bw_usage__externalid" VALUE=""></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_usage__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_usage__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="torrus_bw_usage__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "torrus_bw_usage__OPTIONS" + ID = "torrus_bw_usage__OPTIONS" + VALUE = "base_gb,gb_rate,start_1st,prorate_defer_bill,prorate_round_day,suspend_bill,unsuspend_adjust_bill,bill_recur_on_cancel,bill_suspend_as_cancel,externalid,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4484,7 +5072,23 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Units included</TD><TD><INPUT TYPE="text" NAME="sql_generic__recur_included" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per unit</TD><TD><INPUT TYPE="text" NAME="sql_generic__recur_unit_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">DBI data source</TD><TD><INPUT TYPE="text" NAME="sql_generic__datasrc" VALUE=""></TD></TR><TR><TD ALIGN="right">Database username</TD><TD><INPUT TYPE="text" NAME="sql_generic__db_username" VALUE=""></TD></TR><TR><TD ALIGN="right">Database username</TD><TD><INPUT TYPE="text" NAME="sql_generic__db_password" VALUE=""></TD></TR><TR><TD ALIGN="right">SQL query</TD><TD><INPUT TYPE="text" NAME="sql_generic__query" VALUE=""></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="sql_generic__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="sql_generic__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="sql_generic__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="sql_generic__OPTIONS" VALUE="delay_cancel,a2billing_tariff,recur_fee,a2billing_simultaccess,a2billing_carrer_initblock_offp,unused_credit_change,setup_fee,a2billing_retail_increment_offp,recur_unit_charge,a2billing_retail_cost_min_offp,a2billing_carrier_increment_offp,a2billing_type,a2billing_carrier_cost_min,unused_credit_suspend,db_username,a2billing_retail_initblock_offp,datasrc,query,recur_included,unused_credit_cancel,db_password"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Units included</TD><TD> + <INPUT TYPE="text" NAME="sql_generic__recur_included" VALUE="0"></TD></TR><TR><TD ALIGN="right">Additional charge per unit</TD><TD> + <INPUT TYPE="text" NAME="sql_generic__recur_unit_charge" VALUE="0"></TD></TR><TR><TD ALIGN="right">DBI data source</TD><TD> + <INPUT TYPE="text" NAME="sql_generic__datasrc" VALUE=""></TD></TR><TR><TD ALIGN="right">Database username</TD><TD> + <INPUT TYPE="text" NAME="sql_generic__db_username" VALUE=""></TD></TR><TR><TD ALIGN="right">Database username</TD><TD> + <INPUT TYPE="text" NAME="sql_generic__db_password" VALUE=""></TD></TR><TR><TD ALIGN="right">SQL query</TD><TD> + <INPUT TYPE="text" NAME="sql_generic__query" VALUE=""></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="sql_generic__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="sql_generic__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="sql_generic__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "sql_generic__OPTIONS" + ID = "sql_generic__OPTIONS" + VALUE = "recur_included,recur_unit_charge,datasrc,db_username,db_password,query,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4493,7 +5097,27 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Recurring fee method</TD><TD><SELECT NAME="sql_external__recur_method"><OPTION VALUE="anniversary">Charge the recurring fee at the frequency specified above<OPTION VALUE="prorate">Charge a prorated fee the first time (selectable billing date)<OPTION VALUE="subscription">Charge the full fee for the first partial period (selectable billing date)</SELECT></TD></TR><TR><TD ALIGN="right">Billing Day (1 - 28) for prorating or subscription</TD><TD><INPUT TYPE="text" NAME="sql_external__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">When prorating, defer the first bill until the billing day</TD><TD><INPUT TYPE="checkbox" NAME="sql_external__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When prorating, round to the nearest full day</TD><TD><INPUT TYPE="checkbox" NAME="sql_external__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD><INPUT TYPE="checkbox" NAME="sql_external__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD><INPUT TYPE="checkbox" NAME="sql_external__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">DBI data source</TD><TD><INPUT TYPE="text" NAME="sql_external__datasrc" VALUE=""></TD></TR><TR><TD ALIGN="right">Database username</TD><TD><INPUT TYPE="text" NAME="sql_external__db_username" VALUE=""></TD></TR><TR><TD ALIGN="right">Database password</TD><TD><INPUT TYPE="text" NAME="sql_external__db_password" VALUE=""></TD></TR><TR><TD ALIGN="right">SQL query</TD><TD><INPUT TYPE="text" NAME="sql_external__query" VALUE=""></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="sql_external__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="sql_external__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="sql_external__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="sql_external__OPTIONS" VALUE="cutoff_day,prorate_defer_bill,recur_fee,a2billing_simultaccess,a2billing_tariff,delay_cancel,a2billing_carrer_initblock_offp,add_full_period,unused_credit_change,recur_method,setup_fee,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,prorate_verbose,a2billing_type,a2billing_retail_increment_offp,a2billing_carrier_cost_min,unused_credit_suspend,db_username,a2billing_retail_initblock_offp,datasrc,prorate_round_day,unused_credit_cancel,db_password,query"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Recurring fee method</TD><TD> + <SELECT NAME="sql_external__recur_method"><OPTION VALUE="anniversary">Charge the recurring fee at the frequency specified above<OPTION VALUE="prorate">Charge a prorated fee the first time (selectable billing date)<OPTION VALUE="subscription">Charge the full fee for the first partial period (selectable billing date)</SELECT></TD></TR><TR><TD ALIGN="right">Billing Day (1 - 28) for prorating or subscription</TD><TD> + <INPUT TYPE="text" NAME="sql_external__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">When prorating, defer the first bill until the billing day</TD><TD> + <INPUT TYPE="checkbox" NAME="sql_external__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When prorating, round to the nearest full day</TD><TD> + <INPUT TYPE="checkbox" NAME="sql_external__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD> + <INPUT TYPE="checkbox" NAME="sql_external__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD> + <INPUT TYPE="checkbox" NAME="sql_external__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">DBI data source</TD><TD> + <INPUT TYPE="text" NAME="sql_external__datasrc" VALUE=""></TD></TR><TR><TD ALIGN="right">Database username</TD><TD> + <INPUT TYPE="text" NAME="sql_external__db_username" VALUE=""></TD></TR><TR><TD ALIGN="right">Database password</TD><TD> + <INPUT TYPE="text" NAME="sql_external__db_password" VALUE=""></TD></TR><TR><TD ALIGN="right">SQL query</TD><TD> + <INPUT TYPE="text" NAME="sql_external__query" VALUE=""></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="sql_external__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="sql_external__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="sql_external__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "sql_external__OPTIONS" + ID = "sql_external__OPTIONS" + VALUE = "recur_method,cutoff_day,prorate_defer_bill,prorate_round_day,add_full_period,prorate_verbose,datasrc,db_username,db_password,query,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4502,7 +5126,23 @@ spawn_supp_dst_pkgpart(this);" STYLE="display: none; z-index: 0" > - <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Recurring fee method</TD><TD><SELECT NAME="currency_fixed__recur_method"><OPTION VALUE="anniversary">Charge the recurring fee at the frequency specified above<OPTION VALUE="prorate">Charge a prorated fee the first time (selectable billing date)<OPTION VALUE="subscription">Charge the full fee for the first partial period (selectable billing date)</SELECT></TD></TR><TR><TD ALIGN="right">Billing Day (1 - 28) for prorating or subscription</TD><TD><INPUT TYPE="text" NAME="currency_fixed__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">When prorating, defer the first bill until the billing day</TD><TD><INPUT TYPE="checkbox" NAME="currency_fixed__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When prorating, round to the nearest full day</TD><TD><INPUT TYPE="checkbox" NAME="currency_fixed__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD><INPUT TYPE="checkbox" NAME="currency_fixed__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD><INPUT TYPE="checkbox" NAME="currency_fixed__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD><INPUT TYPE="checkbox" NAME="currency_fixed__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD><span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD><INPUT TYPE="checkbox" NAME="currency_fixed__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD><INPUT TYPE="checkbox" NAME="currency_fixed__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE="hidden" NAME="currency_fixed__OPTIONS" VALUE="add_full_period,a2billing_carrer_initblock_offp,setup_fee,unused_credit_change,recur_method,cutoff_day,prorate_defer_bill,delay_cancel,a2billing_tariff,a2billing_simultaccess,recur_fee,prorate_round_day,a2billing_retail_initblock_offp,unused_credit_cancel,a2billing_retail_increment_offp,prorate_verbose,a2billing_type,a2billing_retail_cost_min_offp,a2billing_carrier_increment_offp,unused_credit_suspend,a2billing_carrier_cost_min"> + <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2><TR><TD ALIGN="right">Recurring fee method</TD><TD> + <SELECT NAME="currency_fixed__recur_method"><OPTION VALUE="anniversary">Charge the recurring fee at the frequency specified above<OPTION VALUE="prorate">Charge a prorated fee the first time (selectable billing date)<OPTION VALUE="subscription">Charge the full fee for the first partial period (selectable billing date)</SELECT></TD></TR><TR><TD ALIGN="right">Billing Day (1 - 28) for prorating or subscription</TD><TD> + <INPUT TYPE="text" NAME="currency_fixed__cutoff_day" VALUE="1"></TD></TR><TR><TD ALIGN="right">When prorating, defer the first bill until the billing day</TD><TD> + <INPUT TYPE="checkbox" NAME="currency_fixed__prorate_defer_bill" VALUE=1 ></TD></TR><TR><TD ALIGN="right">When prorating, round to the nearest full day</TD><TD> + <INPUT TYPE="checkbox" NAME="currency_fixed__prorate_round_day" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD> + <INPUT TYPE="checkbox" NAME="currency_fixed__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD> + <INPUT TYPE="checkbox" NAME="currency_fixed__prorate_verbose" VALUE=1 CHECKED></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD> + <INPUT TYPE="checkbox" NAME="currency_fixed__unused_credit_cancel" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when suspending</TD><TD> + <span title="You must set the 'suspend_credit_type' option in Configuration->Settings to gain access to this option.">N/A</span></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service when changing packages</TD><TD> + <INPUT TYPE="checkbox" NAME="currency_fixed__unused_credit_change" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Automatically suspend for one day before cancelling</TD><TD> + <INPUT TYPE="checkbox" NAME="currency_fixed__delay_cancel" VALUE=1 ></TD></TR></TABLE><INPUT TYPE = "hidden" + NAME = "currency_fixed__OPTIONS" + ID = "currency_fixed__OPTIONS" + VALUE = "recur_method,cutoff_day,prorate_defer_bill,prorate_round_day,add_full_period,prorate_verbose,setup_fee,recur_fee,unused_credit_cancel,unused_credit_suspend,unused_credit_change,delay_cancel,a2billing_tariff,a2billing_type,a2billing_simultaccess,a2billing_carrier_cost_min,a2billing_carrer_initblock_offp,a2billing_carrier_increment_offp,a2billing_retail_cost_min_offp,a2billing_retail_initblock_offp,a2billing_retail_increment_offp" +> + + </DIV> @@ -4521,12 +5161,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -4574,12 +5214,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -4627,12 +5267,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat').style.zIndex = 0; document.getElementById('plandflat_delayed').style.display = "none"; document.getElementById('plandflat_delayed').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -4674,7 +5314,7 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_introrate').style.zIndex = 1; } - if (planlayer == "prorate_calendar" ) { + if (planlayer == "prorate" ) { document.getElementById('plandflat').style.display = "none"; document.getElementById('plandflat').style.zIndex = 0; @@ -4682,10 +5322,10 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate').style.display = "none"; - document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -4723,11 +5363,11 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandcurrency_fixed').style.display = "none"; document.getElementById('plandcurrency_fixed').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = ""; - document.getElementById('plandprorate_calendar').style.zIndex = 1; + document.getElementById('plandprorate').style.display = ""; + document.getElementById('plandprorate').style.zIndex = 1; } - if (planlayer == "prorate" ) { + if (planlayer == "prorate_delayed" ) { document.getElementById('plandflat').style.display = "none"; document.getElementById('plandflat').style.zIndex = 0; @@ -4735,10 +5375,10 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; + document.getElementById('plandprorate').style.display = "none"; + document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_calendar').style.display = "none"; document.getElementById('plandprorate_calendar').style.zIndex = 0; - document.getElementById('plandprorate_delayed').style.display = "none"; - document.getElementById('plandprorate_delayed').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -4776,11 +5416,11 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandcurrency_fixed').style.display = "none"; document.getElementById('plandcurrency_fixed').style.zIndex = 0; - document.getElementById('plandprorate').style.display = ""; - document.getElementById('plandprorate').style.zIndex = 1; + document.getElementById('plandprorate_delayed').style.display = ""; + document.getElementById('plandprorate_delayed').style.zIndex = 1; } - if (planlayer == "prorate_delayed" ) { + if (planlayer == "prorate_calendar" ) { document.getElementById('plandflat').style.display = "none"; document.getElementById('plandflat').style.zIndex = 0; @@ -4788,10 +5428,10 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; + document.getElementById('plandprorate_delayed').style.display = "none"; + document.getElementById('plandprorate_delayed').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -4829,8 +5469,8 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandcurrency_fixed').style.display = "none"; document.getElementById('plandcurrency_fixed').style.zIndex = 0; - document.getElementById('plandprorate_delayed').style.display = ""; - document.getElementById('plandprorate_delayed').style.zIndex = 1; + document.getElementById('plandprorate_calendar').style.display = ""; + document.getElementById('plandprorate_calendar').style.zIndex = 1; } if (planlayer == "prepaid" ) { @@ -4841,12 +5481,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; document.getElementById('plandsubscription').style.zIndex = 0; document.getElementById('plandsqlradacct_hour').style.display = "none"; @@ -4894,12 +5534,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsqlradacct_hour').style.display = "none"; @@ -4947,12 +5587,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -5000,12 +5640,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -5053,12 +5693,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -5106,12 +5746,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -5159,12 +5799,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -5212,12 +5852,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -5265,12 +5905,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -5318,12 +5958,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -5371,12 +6011,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -5424,12 +6064,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -5477,12 +6117,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -5530,12 +6170,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -5583,12 +6223,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -5636,12 +6276,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -5689,12 +6329,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; @@ -5742,12 +6382,12 @@ spawn_supp_dst_pkgpart(this);" document.getElementById('plandflat_delayed').style.zIndex = 0; document.getElementById('plandflat_introrate').style.display = "none"; document.getElementById('plandflat_introrate').style.zIndex = 0; - document.getElementById('plandprorate_calendar').style.display = "none"; - document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprorate').style.display = "none"; document.getElementById('plandprorate').style.zIndex = 0; document.getElementById('plandprorate_delayed').style.display = "none"; document.getElementById('plandprorate_delayed').style.zIndex = 0; + document.getElementById('plandprorate_calendar').style.display = "none"; + document.getElementById('plandprorate_calendar').style.zIndex = 0; document.getElementById('plandprepaid').style.display = "none"; document.getElementById('plandprepaid').style.zIndex = 0; document.getElementById('plandsubscription').style.display = "none"; diff --git a/FS-Test/share/output/edit/process/quick-charge.cgi/amount=100.00:custnum=2:pkg=Test%20one-time%20charge:quantity=1:bill_now=1 b/FS-Test/share/output/edit/process/quick-charge.cgi/amount=100.00:custnum=2:pkg=Test%20one-time%20charge:quantity=1:bill_now=1 index 038dde819..22d8b4224 100644 --- a/FS-Test/share/output/edit/process/quick-charge.cgi/amount=100.00:custnum=2:pkg=Test%20one-time%20charge:quantity=1:bill_now=1 +++ b/FS-Test/share/output/edit/process/quick-charge.cgi/amount=100.00:custnum=2:pkg=Test%20one-time%20charge:quantity=1:bill_now=1 @@ -1,328 +1,19 @@ - - - -<html><body> - -<p align="center"><font face="Verdana, Arial, Helvetica, sans-serif"><b>System error</b></font></p> -<table border="0" cellspacing="0" cellpadding="1"> - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>error:</b> </font></td> - <td align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2">Error during compilation of /var/www/html/freeside/edit/process/quick-charge.cgi:<br>syntax error at /var/www/html/freeside/edit/process/quick-charge.cgi line 126, near ")<br> ( "<br>Global symbol "$amount" requires explicit package name at /var/www/html/freeside/edit/process/quick-charge.cgi line 132.<br>Global symbol "$setup_cost" requires explicit package name at /var/www/html/freeside/edit/process/quick-charge.cgi line 133.<br>Global symbol "$quantity" requires explicit package name at /var/www/html/freeside/edit/process/quick-charge.cgi line 134.<br>Global symbol "$override" requires explicit package name at /var/www/html/freeside/edit/process/quick-charge.cgi line 147.<br>syntax error at /var/www/html/freeside/edit/process/quick-charge.cgi line 1, near "if"<br>Global symbol "$error" requires explicit package name at /var/www/html/freeside/edit/process/quick-charge.cgi line 1.<br>Global symbol "$error" requires explicit package name at /var/www/html/freeside/edit/process/quick-charge.cgi line 2.<br>syntax error at /var/www/html/freeside/edit/process/quick-charge.cgi line 4, near "}"<br> (Might be a runaway multi-line '' string starting on line 3)<br>Global symbol "$message" requires explicit package name at /var/www/html/freeside/edit/process/quick-charge.cgi line 5.<br>syntax error at /var/www/html/freeside/edit/process/quick-charge.cgi line 10, near "}"<br> (Might be a runaway multi-line '' string starting on line 5)<br>/var/www/html/freeside/edit/process/quick-charge.cgi has too many errors.<br></font></td> - </tr> - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>context:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> - <table border="0" cellpadding="0" cellspacing="0"> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>1:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><font color=red>% if ( $error ) {</font></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>2:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><font color=red>% $cgi->param('error', $error );</font></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>3:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><% $cgi->redirect($p.'quick-charge.html?'. $cgi->query_string) %></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>4:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><font color=red>% } else {</font></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>5:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><font color=red><% header(emt($message)) %></font></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>6:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> <SCRIPT TYPE="text/javascript"></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>7:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> window.top.location.reload();</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>8:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> </SCRIPT></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>9:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> </BODY></HTML></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>10:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><font color=red>% }</font></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>11:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><%init></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>12:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>13:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2">my $curuser = $FS::CurrentUser::CurrentUser;</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>14:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2">die "access denied"</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>...</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>122:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>123:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> if ( $param->{'taxclass'} eq '(select)' ) {</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>124:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> $error .= "Must select a tax class. "</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>125:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> unless ($conf->config('tax_data_vendor'))</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>126:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><font color=red> ( $override || $param->{taxproductnum} )</font></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>127:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> );</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>128:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> $cgi->param('taxclass', '');</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>129:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> }</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>130:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>131:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> my %charge = (</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>132:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><font color=red> 'amount' => $amount,</font></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>133:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><font color=red> 'setup_cost' => $setup_cost,</font></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>134:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><font color=red> 'quantity' => $quantity,</font></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>135:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> 'bill_now' => scalar($cgi->param('bill_now')),</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>136:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> 'invoice_terms' => scalar($cgi->param('invoice_terms')),</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>137:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> 'start_date' => ( scalar($cgi->param('start_date'))</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>138:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> ? parse_datetime($cgi->param('start_date'))</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>...</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>143:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> 'pkg' => scalar($cgi->param('pkg')),</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>144:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> 'setuptax' => scalar($cgi->param('setuptax')),</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>145:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> 'taxclass' => scalar($cgi->param('taxclass')),</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>146:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> 'taxproductnum' => scalar($cgi->param('taxproductnum')),</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>147:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><font color=red> 'tax_override' => $override,</font></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>148:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> 'classnum' => scalar($cgi->param('classnum')),</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>149:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> 'additional' => \@description,</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>150:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> );</font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>151:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"></font></td> - </tr> - - <tr> - <td nowrap="nowrap" align="left" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>...</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"></font></td> - </tr> - - - </table> - </font></td> - </tr> - <tr> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"><b>code stack:</b> </font></td> - <td align="left" valign="top" nowrap="nowrap"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2"> - /usr/share/perl5/HTML/Mason/Interp.pm:453<br> - /usr/share/perl5/HTML/Mason/Request.pm:252<br> - /usr/share/perl5/HTML/Mason/Request.pm:215<br> - /usr/share/perl5/HTML/Mason/ApacheHandler.pm:94<br> - /usr/local/share/perl/5.20.2/FS/Mason/Request.pm:37<br> - /usr/share/perl5/Class/Container.pm:275<br> - /usr/share/perl5/Class/Container.pm:353<br> - /usr/share/perl5/HTML/Mason/Interp.pm:351<br> - /usr/share/perl5/HTML/Mason/ApacheHandler.pm:874<br> - /usr/share/perl5/HTML/Mason/ApacheHandler.pm:828<br> - /usr/local/etc/freeside/handler.pl:144<br> - -e:0<br> - </font></td> - </tr> -</table> - -<a href="#raw">raw error</a><br> - -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> -<br> - - -<a name="raw"></a> - -<pre>Error during compilation of /var/www/html/freeside/edit/process/quick-charge.cgi: -syntax error at /var/www/html/freeside/edit/process/quick-charge.cgi line 126, near ") - ( " -Global symbol "$amount" requires explicit package name at /var/www/html/freeside/edit/process/quick-charge.cgi line 132. -Global symbol "$setup_cost" requires explicit package name at /var/www/html/freeside/edit/process/quick-charge.cgi line 133. -Global symbol "$quantity" requires explicit package name at /var/www/html/freeside/edit/process/quick-charge.cgi line 134. -Global symbol "$override" requires explicit package name at /var/www/html/freeside/edit/process/quick-charge.cgi line 147. -syntax error at /var/www/html/freeside/edit/process/quick-charge.cgi line 1, near "if" -Global symbol "$error" requires explicit package name at /var/www/html/freeside/edit/process/quick-charge.cgi line 1. -Global symbol "$error" requires explicit package name at /var/www/html/freeside/edit/process/quick-charge.cgi line 2. -syntax error at /var/www/html/freeside/edit/process/quick-charge.cgi line 4, near "}" - (Might be a runaway multi-line '' string starting on line 3) -Global symbol "$message" requires explicit package name at /var/www/html/freeside/edit/process/quick-charge.cgi line 5. -syntax error at /var/www/html/freeside/edit/process/quick-charge.cgi line 10, near "}" - (Might be a runaway multi-line '' string starting on line 5) -/var/www/html/freeside/edit/process/quick-charge.cgi has too many errors. - - -Trace begun at /usr/share/perl5/HTML/Mason/Interp.pm line 854 -HTML::Mason::Interp::_compilation_error('HTML::Mason::Interp=HASH(0x7fbd843931b8)', '/var/www/html/freeside/edit/process/quick-charge.cgi', 'HTML::Mason::Exception::Compilation=HASH(0x7fbd8b2466a0)') called at /usr/share/perl5/HTML/Mason/Interp.pm line 453 -HTML::Mason::Interp::load('HTML::Mason::Interp=HASH(0x7fbd843931b8)', '/edit/process/quick-charge.cgi') called at /usr/share/perl5/HTML/Mason/Request.pm line 252 -eval {...} at /usr/share/perl5/HTML/Mason/Request.pm line 235 -HTML::Mason::Request::_initialize('FS::Mason::Request=HASH(0x7fbd8af54d08)') called at /usr/share/perl5/HTML/Mason/Request.pm line 215 -HTML::Mason::Request::new('FS::Mason::Request', 'error_mode', 'output', 'error_format', 'html', 'interp', 'HTML::Mason::Interp=HASH(0x7fbd843931b8)', 'comp', '/edit/process/quick-charge.cgi', 'args', 'ARRAY(0x7fbd8ba9b970)', 'ah', 'HTML::Mason::ApacheHandler=HASH(0x7fbd843be610)', 'apache_req', 'Apache2::RequestRec=SCALAR(0x7fbd8b414c40)', 'container', 'HASH(0x7fbd8ba9c9b8)') called at /usr/share/perl5/HTML/Mason/ApacheHandler.pm line 94 -HTML::Mason::Request::ApacheHandler::new('FS::Mason::Request', 'error_mode', 'output', 'error_format', 'html', 'interp', 'HTML::Mason::Interp=HASH(0x7fbd843931b8)', 'comp', '/edit/process/quick-charge.cgi', 'args', 'ARRAY(0x7fbd8ba9b970)', 'ah', 'HTML::Mason::ApacheHandler=HASH(0x7fbd843be610)', 'apache_req', 'Apache2::RequestRec=SCALAR(0x7fbd8b414c40)', 'container', 'HASH(0x7fbd8ba9c9b8)') called at /usr/local/share/perl/5.20.2/FS/Mason/Request.pm line 37 -FS::Mason::Request::new('FS::Mason::Request', 'error_mode', 'output', 'error_format', 'html', 'interp', 'HTML::Mason::Interp=HASH(0x7fbd843931b8)', 'comp', '/edit/process/quick-charge.cgi', 'args', 'ARRAY(0x7fbd8ba9b970)', 'ah', 'HTML::Mason::ApacheHandler=HASH(0x7fbd843be610)', 'apache_req', 'Apache2::RequestRec=SCALAR(0x7fbd8b414c40)', 'container', 'HASH(0x7fbd8ba9c9b8)') called at /usr/share/perl5/Class/Container.pm line 275 -Class::Container::call_method('HTML::Mason::Interp=HASH(0x7fbd843931b8)', 'request', 'new', 'interp', 'HTML::Mason::Interp=HASH(0x7fbd843931b8)', 'comp', '/edit/process/quick-charge.cgi', 'args', 'ARRAY(0x7fbd8ba9b970)', 'ah', 'HTML::Mason::ApacheHandler=HASH(0x7fbd843be610)', 'apache_req', 'Apache2::RequestRec=SCALAR(0x7fbd8b414c40)', 'container', 'HASH(0x7fbd8ba9c9b8)') called at /usr/share/perl5/Class/Container.pm line 353 -Class::Container::create_delayed_object('interp', 'HTML::Mason::Interp=HASH(0x7fbd843931b8)', 'comp', '/edit/process/quick-charge.cgi', 'args', 'ARRAY(0x7fbd8ba9b970)', 'ah', 'HTML::Mason::ApacheHandler=HASH(0x7fbd843be610)', 'apache_req', 'Apache2::RequestRec=SCALAR(0x7fbd8b414c40)', 'container', 'HASH(0x7fbd8ba9c9b8)') called at /usr/share/perl5/HTML/Mason/Interp.pm line 351 -HTML::Mason::Interp::make_request('HTML::Mason::Interp=HASH(0x7fbd843931b8)', 'comp', '/edit/process/quick-charge.cgi', 'args', 'ARRAY(0x7fbd8ba9b970)', 'ah', 'HTML::Mason::ApacheHandler=HASH(0x7fbd843be610)', 'apache_req', 'Apache2::RequestRec=SCALAR(0x7fbd8b414c40)') called at /usr/share/perl5/HTML/Mason/ApacheHandler.pm line 874 -eval {...} at /usr/share/perl5/HTML/Mason/ApacheHandler.pm line 873 -HTML::Mason::ApacheHandler::prepare_request('HTML::Mason::ApacheHandler=HASH(0x7fbd843be610)', 'Apache2::RequestRec=SCALAR(0x7fbd8b414c40)') called at /usr/share/perl5/HTML/Mason/ApacheHandler.pm line 828 -HTML::Mason::ApacheHandler::handle_request('HTML::Mason::ApacheHandler=HASH(0x7fbd843be610)', 'Apache2::RequestRec=SCALAR(0x7fbd8b414c40)') called at /usr/local/etc/freeside/handler.pl line 144 -eval {...} at /usr/local/etc/freeside/handler.pl line 144 -HTML::Mason::handler('Apache2::RequestRec=SCALAR(0x7fbd8b414c40)') called at -e line 0 -eval {...} at -e line 0 -</pre> - -</body></html> + <HTML> + <HEAD> + <TITLE> + One-time charge added + </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"> + <FONT SIZE=6> + <CENTER>One-time charge added</CENTER> + </FONT> + <BR><!--<BR>--> + + <SCRIPT TYPE="text/javascript"> + window.top.location.reload(); + </SCRIPT> + </BODY></HTML> diff --git a/FS-Test/share/output/graph/cust_bill_pkg.cgi/start_month=4:start_year=2015:end_month=3:end_year=2016:agentnum=1:cust_classnum=:refnum=1:class_mode=pkg:classnum=0:classnum=1:report_optionnum=0:class_agg_break=aggregate:use_setup=1:use_usage=0:use_discount=1 b/FS-Test/share/output/graph/cust_bill_pkg.cgi/start_month=4:start_year=2015:end_month=3:end_year=2016:agentnum=1:cust_classnum=:refnum=1:class_mode=pkg:classnum=0:classnum=1:report_optionnum=0:class_agg_break=aggregate:use_setup=1:use_usage=0:use_discount=1 index 0cd3f850c..e61ca51a1 100644 --- a/FS-Test/share/output/graph/cust_bill_pkg.cgi/start_month=4:start_year=2015:end_month=3:end_year=2016:agentnum=1:cust_classnum=:refnum=1:class_mode=pkg:classnum=0:classnum=1:report_optionnum=0:class_agg_break=aggregate:use_setup=1:use_usage=0:use_discount=1 +++ b/FS-Test/share/output/graph/cust_bill_pkg.cgi/start_month=4:start_year=2015:end_month=3:end_year=2016:agentnum=1:cust_classnum=:refnum=1:class_mode=pkg:classnum=0:classnum=1:report_optionnum=0:class_agg_break=aggregate:use_setup=1:use_usage=0:use_discount=1 @@ -617,7 +617,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/graph/cust_pkg.html/start_month=4:start_year=2015:end_month=3:end_year=2016 b/FS-Test/share/output/graph/cust_pkg.html/start_month=4:start_year=2015:end_month=3:end_year=2016 index 6d2242390..24ef4580a 100644 --- a/FS-Test/share/output/graph/cust_pkg.html/start_month=4:start_year=2015:end_month=3:end_year=2016 +++ b/FS-Test/share/output/graph/cust_pkg.html/start_month=4:start_year=2015:end_month=3:end_year=2016 @@ -617,7 +617,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/graph/money_time.cgi/start_month=4:start_year=2015:end_month=3:end_year=2016:agentnum=1:cust_classnum=:refnum=1 b/FS-Test/share/output/graph/money_time.cgi/start_month=4:start_year=2015:end_month=3:end_year=2016:agentnum=1:cust_classnum=:refnum=1 index 9ed8214dd..106bad477 100644 --- a/FS-Test/share/output/graph/money_time.cgi/start_month=4:start_year=2015:end_month=3:end_year=2016:agentnum=1:cust_classnum=:refnum=1 +++ b/FS-Test/share/output/graph/money_time.cgi/start_month=4:start_year=2015:end_month=3:end_year=2016:agentnum=1:cust_classnum=:refnum=1 @@ -617,7 +617,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/graph/money_time_daily.cgi/beginning=01%2F01%2F2016:ending=02%2F28%2F2016:agentnum=1 b/FS-Test/share/output/graph/money_time_daily.cgi/beginning=01%2F01%2F2016:ending=02%2F28%2F2016:agentnum=1 index bc1f09d27..9a0954667 100644 --- a/FS-Test/share/output/graph/money_time_daily.cgi/beginning=01%2F01%2F2016:ending=02%2F28%2F2016:agentnum=1 +++ b/FS-Test/share/output/graph/money_time_daily.cgi/beginning=01%2F01%2F2016:ending=02%2F28%2F2016:agentnum=1 @@ -617,7 +617,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/search/cust_bill.html/OPEN90_date b/FS-Test/share/output/search/cust_bill.html/keywords=OPEN90_date:order_by=invnum index bf1c2dd46..cb6d637f3 100644 --- a/FS-Test/share/output/search/cust_bill.html/OPEN90_date +++ b/FS-Test/share/output/search/cust_bill.html/keywords=OPEN90_date:order_by=invnum @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -973,7 +973,7 @@ function print_process () { var fieldName; for (var i = 0; i<document.print_form.elements.length; i++) { field = document.print_form.elements[i]; - if ( (field.name.indexOf('days') > -1) || (field.name.indexOf('charged') > -1) || (field.name.indexOf('order_by') > -1) || (field.name.indexOf('open') > -1) || (field.name.indexOf('owed') > -1) + if ( (field.name.indexOf('charged') > -1) || (field.name.indexOf('owed') > -1) ) { if ( field.type == 'select-multiple' ) { @@ -1018,9 +1018,6 @@ function print_myCallback( jobnum ) { <FORM NAME="print_form"> -<INPUT TYPE="hidden" NAME="days" VALUE="90"> -<INPUT TYPE="hidden" NAME="order_by" VALUE="cust_bill._date"> -<INPUT TYPE="hidden" NAME="open" VALUE="1"> </FORM> @@ -1131,7 +1128,7 @@ function email_process () { var fieldName; for (var i = 0; i<document.email_form.elements.length; i++) { field = document.email_form.elements[i]; - if ( (field.name.indexOf('days') > -1) || (field.name.indexOf('charged') > -1) || (field.name.indexOf('order_by') > -1) || (field.name.indexOf('open') > -1) || (field.name.indexOf('owed') > -1) + if ( (field.name.indexOf('charged') > -1) || (field.name.indexOf('owed') > -1) ) { if ( field.type == 'select-multiple' ) { @@ -1176,9 +1173,6 @@ function email_myCallback( jobnum ) { <FORM NAME="email_form"> -<INPUT TYPE="hidden" NAME="days" VALUE="90"> -<INPUT TYPE="hidden" NAME="order_by" VALUE="cust_bill._date"> -<INPUT TYPE="hidden" NAME="open" VALUE="1"> </FORM> @@ -1289,7 +1283,7 @@ function fax_process () { var fieldName; for (var i = 0; i<document.fax_form.elements.length; i++) { field = document.fax_form.elements[i]; - if ( (field.name.indexOf('days') > -1) || (field.name.indexOf('charged') > -1) || (field.name.indexOf('order_by') > -1) || (field.name.indexOf('open') > -1) || (field.name.indexOf('owed') > -1) + if ( (field.name.indexOf('charged') > -1) || (field.name.indexOf('owed') > -1) ) { if ( field.type == 'select-multiple' ) { @@ -1334,9 +1328,6 @@ function fax_myCallback( jobnum ) { <FORM NAME="fax_form"> -<INPUT TYPE="hidden" NAME="days" VALUE="90"> -<INPUT TYPE="hidden" NAME="order_by" VALUE="cust_bill._date"> -<INPUT TYPE="hidden" NAME="open" VALUE="1"> </FORM> @@ -1447,7 +1438,7 @@ function ftp_process () { var fieldName; for (var i = 0; i<document.ftp_form.elements.length; i++) { field = document.ftp_form.elements[i]; - if ( (field.name.indexOf('days') > -1) || (field.name.indexOf('charged') > -1) || (field.name.indexOf('order_by') > -1) || (field.name.indexOf('open') > -1) || (field.name.indexOf('owed') > -1) + if ( (field.name.indexOf('charged') > -1) || (field.name.indexOf('owed') > -1) ) { if ( field.type == 'select-multiple' ) { @@ -1492,9 +1483,6 @@ function ftp_myCallback( jobnum ) { <FORM NAME="ftp_form"> -<INPUT TYPE="hidden" NAME="days" VALUE="90"> -<INPUT TYPE="hidden" NAME="order_by" VALUE="cust_bill._date"> -<INPUT TYPE="hidden" NAME="open" VALUE="1"> </FORM> @@ -1605,7 +1593,7 @@ function spool_process () { var fieldName; for (var i = 0; i<document.spool_form.elements.length; i++) { field = document.spool_form.elements[i]; - if ( (field.name.indexOf('days') > -1) || (field.name.indexOf('charged') > -1) || (field.name.indexOf('order_by') > -1) || (field.name.indexOf('open') > -1) || (field.name.indexOf('owed') > -1) + if ( (field.name.indexOf('charged') > -1) || (field.name.indexOf('owed') > -1) ) { if ( field.type == 'select-multiple' ) { @@ -1650,9 +1638,6 @@ function spool_myCallback( jobnum ) { <FORM NAME="spool_form"> -<INPUT TYPE="hidden" NAME="days" VALUE="90"> -<INPUT TYPE="hidden" NAME="order_by" VALUE="cust_bill._date"> -<INPUT TYPE="hidden" NAME="open" VALUE="1"> </FORM><SCRIPT TYPE="text/javascript"> function confirm_print_process() { @@ -1697,10 +1682,10 @@ function confirm_spool_process() { <FORM> - 219 total invoices + 1584 total invoices - ( show <SELECT NAME="maxrecords" onChange="window.location = 'http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=' + this.options[this.selectedIndex].value;"> + ( show <SELECT NAME="maxrecords" onChange="window.location = 'http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=' + this.options[this.selectedIndex].value;"> <OPTION VALUE="100" SELECTED>100</OPTION> <OPTION VALUE="500" >500</OPTION> @@ -1712,11 +1697,11 @@ function confirm_spool_process() { <BR> - $20769.29 gross sales<BR> + $141620.74 gross sales<BR> − $0.00 discounted<BR> − $0.00 credited<BR> - = $20769.29 net sales<BR> - $20769.29 outstanding balance<BR> + = $141620.74 net sales<BR> + $48352.49 outstanding balance<BR> </FORM> </TD> @@ -1726,12 +1711,12 @@ function confirm_spool_process() { Download full results<BR> - as <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=100;_type=invoices.xls">Excel spreadsheet</A><BR> + as <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=invoices.xls">Excel spreadsheet</A><BR> - as <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=100;_type=csv">CSV file</A><BR> + as <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=csv">CSV file</A><BR> - as <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=100;_type=html-print">printable copy</A> + as <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html-print">printable copy</A> </TD> @@ -1744,12 +1729,45 @@ function confirm_spool_process() { <FONT SIZE="+2">1</FONT> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=100;_type=html;offset=100">2</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=100">2</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=100;_type=html;offset=200">3</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=200">3</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=100;_type=html;offset=100"><B><FONT SIZE="+1">Next</FONT></B></A> + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=300">4</A> + + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=400">5</A> + + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=500">6</A> + + ... + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=700">8</A> + + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=800">9</A> + + ... + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1000">11</A> + + ... + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1200">13</A> + + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1300">14</A> + + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1400">15</A> + + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1500">16</A> + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=100"><B><FONT SIZE="+1">Next</FONT></B></A> @@ -1772,7 +1790,7 @@ function confirm_spool_process() { > - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=COALESCE%28%20agent_invid%2C%20invnum%20%29">Invoice #</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=COALESCE%28%20agent_invid%2C%20invnum%20%29">Invoice #</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -1781,7 +1799,7 @@ function confirm_spool_process() { > - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=gross">Gross Amount</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=gross">Gross Amount</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -1790,7 +1808,7 @@ function confirm_spool_process() { > - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=discounted">Discount</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=discounted">Discount</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -1799,7 +1817,7 @@ function confirm_spool_process() { > - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=credited">Credits</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=credited">Credits</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -1808,7 +1826,7 @@ function confirm_spool_process() { > - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=net">Net Amount</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=net">Net Amount</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -1817,7 +1835,7 @@ function confirm_spool_process() { > - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=owed">Balance</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=owed">Balance</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -1826,7 +1844,7 @@ function confirm_spool_process() { > - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=_date">Date</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=_date">Date</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -1899,31 +1917,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?4">4</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?3">3</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?4">$191.77</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?3">$194.68</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?4">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?3">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?4">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?3">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?4">$191.77</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?3">$194.68</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?4">$191.77</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?3">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?4">Aug 09 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?3">Aug 08 2015</A></TD> @@ -1931,7 +1949,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?119">Runolfsson, Roob and Hoppe (Bergstrom, Esteban)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?103">Roberts-Schinner (Flatley, Amelia)</A></TD> </TR> @@ -1940,31 +1958,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?10">10</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?2">2</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?10">$143.07</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?2">$177.91</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?10">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?2">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?10">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?2">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?10">$143.07</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?2">$177.91</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?10">$143.07</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?2">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?10">Aug 17 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?2">Aug 08 2015</A></TD> @@ -1972,7 +1990,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?74">Boyer, Lamont</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?18">Zemlak, Asia</A></TD> </TR> @@ -1981,31 +1999,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?12">12</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?4">4</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?12">$165.65</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?4">$191.77</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?12">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?4">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?12">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?4">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?12">$165.65</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?4">$191.77</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?12">$165.65</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?4">$191.77</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?12">Aug 18 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?4">Aug 09 2015</A></TD> @@ -2013,7 +2031,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?83">Jacobson-Gorczany (Vandervort, Kiley)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?119">Runolfsson, Roob and Hoppe (Bergstrom, Esteban)</A></TD> </TR> @@ -2022,31 +2040,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?19">19</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?5">5</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?19">$158.71</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?5">$162.41</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?19">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?5">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?19">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?5">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?19">$158.71</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?5">$162.41</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?19">$158.71</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?5">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?19">Aug 22 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?5">Aug 12 2015</A></TD> @@ -2054,7 +2072,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?29">Lehner-Klein (Smitham, Pansy)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?46">Steuber, Ryley</A></TD> </TR> @@ -2063,31 +2081,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?20">20</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?6">6</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?20">$108.23</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?6">$158.55</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?20">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?6">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?20">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?6">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?20">$108.23</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?6">$158.55</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?20">$108.23</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?6">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?20">Aug 26 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?6">Aug 13 2015</A></TD> @@ -2095,7 +2113,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?38">Christiansen, Leone</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?138">Leuschke, Edd</A></TD> </TR> @@ -2104,31 +2122,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">23</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?7">7</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$105.97</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?7">$154.68</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?7">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?7">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$105.97</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?7">$154.68</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$105.97</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?7">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">Aug 31 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?7">Aug 14 2015</A></TD> @@ -2136,7 +2154,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?176">Waters, Godfrey</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?10">Grady, Aniya</A></TD> </TR> @@ -2145,31 +2163,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">35</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?8">8</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?8">$189.68</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?8">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?8">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?8">$189.68</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?8">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?8">Aug 14 2015</A></TD> @@ -2177,7 +2195,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?83">Jacobson-Gorczany (Vandervort, Kiley)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?157">Weimann Inc (Cartwright, Judah)</A></TD> </TR> @@ -2186,31 +2204,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">33</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?9">9</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?9">$174.35</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?9">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?9">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?9">$174.35</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?9">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?9">Aug 15 2015</A></TD> @@ -2218,7 +2236,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?74">Boyer, Lamont</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?87">Kozey and Sons (Vandervort, Harmon)</A></TD> </TR> @@ -2227,31 +2245,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?39">39</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?10">10</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?39">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?10">$143.07</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?39">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?10">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?39">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?10">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?39">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?10">$143.07</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?39">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?10">$143.07</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?39">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?10">Aug 17 2015</A></TD> @@ -2259,7 +2277,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?92">Ruecker, Lucious</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?74">Boyer, Lamont</A></TD> </TR> @@ -2268,31 +2286,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">46</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?11">11</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?11">$143.07</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?11">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?11">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?11">$143.07</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?11">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?11">Aug 17 2015</A></TD> @@ -2300,7 +2318,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?176">Waters, Godfrey</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?114">Donnelly, Raleigh</A></TD> </TR> @@ -2309,31 +2327,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">26</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?13">13</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?13">$174.20</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?13">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?13">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?13">$174.20</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?13">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?13">Aug 18 2015</A></TD> @@ -2341,7 +2359,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?29">Lehner-Klein (Smitham, Pansy)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?97">Braun, Rath and Gutkowski (Wilderman, Reyes)</A></TD> </TR> @@ -2350,31 +2368,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">29</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?12">12</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?12">$165.65</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?12">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?12">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?12">$165.65</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?12">$165.65</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?12">Aug 18 2015</A></TD> @@ -2382,7 +2400,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?38">Christiansen, Leone</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?83">Jacobson-Gorczany (Vandervort, Kiley)</A></TD> </TR> @@ -2391,31 +2409,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">43</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">16</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">$162.74</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">$162.74</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">Aug 19 2015</A></TD> @@ -2423,7 +2441,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?119">Runolfsson, Roob and Hoppe (Bergstrom, Esteban)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?91">Fay and Sons (Gerhold, Thora)</A></TD> </TR> @@ -2432,31 +2450,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?54">54</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">14</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?54">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">$170.32</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?54">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?54">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?54">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">$170.32</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?54">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?54">Sep 07 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">Aug 19 2015</A></TD> @@ -2464,7 +2482,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?92">Ruecker, Lucious</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?25">Kuhlman-Huels (Parisian, Cristopher)</A></TD> </TR> @@ -2473,31 +2491,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?55">55</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">15</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?55">$212.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">$135.32</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?55">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?55">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?55">$212.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">$135.32</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?55">$212.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?55">Sep 08 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">Aug 19 2015</A></TD> @@ -2505,7 +2523,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?65">O'Reilly-Mraz (Pagac, Kennedi)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?70">Brown, Danial</A></TD> </TR> @@ -2514,31 +2532,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?57">57</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?17">17</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?57">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?17">$159.84</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?57">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?17">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?57">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?17">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?57">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?17">$159.84</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?57">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?17">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?57">Sep 09 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?17">Aug 20 2015</A></TD> @@ -2546,7 +2564,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?119">Runolfsson, Roob and Hoppe (Bergstrom, Esteban)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?43">Leannon-Pfannerstill (O'Keefe, Bernie)</A></TD> </TR> @@ -2555,31 +2573,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?59">59</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?18">18</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?59">$182.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?18">$156.94</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?59">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?18">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?59">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?18">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?59">$182.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?18">$156.94</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?59">$182.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?18">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?59">Sep 12 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?18">Aug 21 2015</A></TD> @@ -2587,7 +2605,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?59">Simonis Inc (Runolfsson, Kareem)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?51">Medhurst Group (Medhurst, Rafaela)</A></TD> </TR> @@ -2596,31 +2614,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?60">60</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?19">19</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?60">$179.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?19">$158.71</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?60">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?19">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?60">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?19">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?60">$179.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?19">$158.71</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?60">$179.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?19">$158.71</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?60">Sep 13 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?19">Aug 22 2015</A></TD> @@ -2628,7 +2646,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?179">Conn-McLaughlin (O'Connell, Gayle)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?29">Lehner-Klein (Smitham, Pansy)</A></TD> </TR> @@ -2637,31 +2655,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?63">63</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?20">20</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?63">$188.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?20">$108.23</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?63">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?20">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?63">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?20">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?63">$188.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?20">$108.23</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?63">$188.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?20">$108.23</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?63">Sep 14 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?20">Aug 26 2015</A></TD> @@ -2669,7 +2687,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?149">O'Keefe Inc (Schamberger, Felix)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?38">Christiansen, Leone</A></TD> </TR> @@ -2678,31 +2696,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">65</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?21">21</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?21">$92.75</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?21">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?21">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?21">$92.75</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?21">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">Sep 18 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?21">Aug 30 2015</A></TD> @@ -2710,7 +2728,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?83">Jacobson-Gorczany (Vandervort, Kiley)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?82">Kessler, Dana</A></TD> </TR> @@ -2719,31 +2737,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?69">69</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">22</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?69">$161.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">$88.87</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?69">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?69">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?69">$161.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">$88.87</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?69">$161.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?69">Sep 19 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">Aug 31 2015</A></TD> @@ -2751,7 +2769,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?155">Boyle-Schmeler (Maggio, Fay)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?58">Schultz, Colten</A></TD> </TR> @@ -2760,31 +2778,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?74">74</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">23</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?74">$129.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$105.97</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?74">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?74">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?74">$129.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$105.97</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?74">$129.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$105.97</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?74">Sep 20 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">Aug 31 2015</A></TD> @@ -2792,7 +2810,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?134">Stokes, Janelle</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?176">Waters, Godfrey</A></TD> </TR> @@ -2801,31 +2819,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?73">73</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?25">25</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?73">$164.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?25">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?73">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?25">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?73">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?25">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?73">$164.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?25">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?73">$164.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?25">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?73">Sep 20 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?25">Sep 01 2015</A></TD> @@ -2833,7 +2851,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?101">Flatley, Yundt and Pacocha (Volkman, Tabitha)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?18">Zemlak, Asia</A></TD> </TR> @@ -2842,31 +2860,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?72">72</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">33</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?72">$164.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?72">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?72">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?72">$164.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?72">$164.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$120.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?72">Sep 20 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">Sep 01 2015</A></TD> @@ -2874,7 +2892,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?53">Balistreri-Schoen (Schultz, Jaylan)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?74">Boyer, Lamont</A></TD> </TR> @@ -2883,31 +2901,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">75</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">36</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$115.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$115.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$115.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">Sep 21 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">Sep 01 2015</A></TD> @@ -2915,7 +2933,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?32">Swaniawski, Adrienne</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?82">Kessler, Dana</A></TD> </TR> @@ -2924,31 +2942,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?79">79</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">45</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?79">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?79">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?79">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?79">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?79">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?79">Sep 22 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">Sep 01 2015</A></TD> @@ -2956,7 +2974,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?29">Lehner-Klein (Smitham, Pansy)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?157">Weimann Inc (Cartwright, Judah)</A></TD> </TR> @@ -2965,31 +2983,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?81">81</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">35</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?81">$113.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?81">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?81">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?81">$113.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?81">$113.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$90.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?81">Sep 23 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">Sep 01 2015</A></TD> @@ -2997,7 +3015,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?164">Bernhard, Kris</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?83">Jacobson-Gorczany (Vandervort, Kiley)</A></TD> </TR> @@ -3006,31 +3024,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?83">83</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">24</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?83">$143.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?83">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?83">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?83">$143.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?83">$143.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?83">Sep 25 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">Sep 01 2015</A></TD> @@ -3038,7 +3056,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?95">Wolff Inc (Hessel, Brianne)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?10">Grady, Aniya</A></TD> </TR> @@ -3047,31 +3065,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">86</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">43</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$101.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$101.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$101.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$90.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">Sep 27 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">Sep 01 2015</A></TD> @@ -3079,7 +3097,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?98">Gleichner, Delmer</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?119">Runolfsson, Roob and Hoppe (Bergstrom, Esteban)</A></TD> </TR> @@ -3088,31 +3106,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">88</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">26</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$108.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$108.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$108.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$120.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">Sep 28 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">Sep 01 2015</A></TD> @@ -3120,7 +3138,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?8">Douglas, Willow</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?29">Lehner-Klein (Smitham, Pansy)</A></TD> </TR> @@ -3129,31 +3147,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?92">92</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">42</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?92">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?92">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?92">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?92">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?92">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?92">Sep 28 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">Sep 01 2015</A></TD> @@ -3161,7 +3179,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?176">Waters, Godfrey</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?114">Donnelly, Raleigh</A></TD> </TR> @@ -3170,31 +3188,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?94">94</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">29</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?94">$131.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?94">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?94">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?94">$131.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?94">$131.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$120.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?94">Sep 29 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">Sep 01 2015</A></TD> @@ -3202,7 +3220,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?47">Bernhard-Treutel (Shanahan, Kevin)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?38">Christiansen, Leone</A></TD> </TR> @@ -3211,31 +3229,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?96">96</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">27</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?96">$128.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?96">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?96">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?96">$128.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?96">$128.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?96">Sep 30 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">Sep 01 2015</A></TD> @@ -3243,7 +3261,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?11">Torp, Sawayn and Friesen (Pollich, Maritza)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?25">Kuhlman-Huels (Parisian, Cristopher)</A></TD> </TR> @@ -3252,31 +3270,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?122">122</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">38</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?122">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?122">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?122">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?122">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?122">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?122">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">Sep 01 2015</A></TD> @@ -3284,7 +3302,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?74">Boyer, Lamont</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?91">Fay and Sons (Gerhold, Thora)</A></TD> </TR> @@ -3293,31 +3311,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?104">104</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">32</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?104">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?104">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?104">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?104">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?104">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?104">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">Sep 01 2015</A></TD> @@ -3325,7 +3343,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?29">Lehner-Klein (Smitham, Pansy)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?58">Schultz, Colten</A></TD> </TR> @@ -3334,31 +3352,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?110">110</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">37</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?110">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?110">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?110">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?110">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?110">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?110">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">Sep 01 2015</A></TD> @@ -3366,7 +3384,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?47">Bernhard-Treutel (Shanahan, Kevin)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?87">Kozey and Sons (Vandervort, Harmon)</A></TD> </TR> @@ -3375,31 +3393,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">124</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">40</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">Sep 01 2015</A></TD> @@ -3407,7 +3425,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?83">Jacobson-Gorczany (Vandervort, Kiley)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?97">Braun, Rath and Gutkowski (Wilderman, Reyes)</A></TD> </TR> @@ -3416,31 +3434,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?150">150</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">34</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?150">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?150">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?150">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?150">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?150">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?150">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">Sep 01 2015</A></TD> @@ -3448,7 +3466,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?164">Bernhard, Kris</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?70">Brown, Danial</A></TD> </TR> @@ -3457,31 +3475,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?100">100</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">46</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?100">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$30.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?100">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?100">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?100">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$30.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?100">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$30.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?100">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">Sep 01 2015</A></TD> @@ -3489,7 +3507,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?11">Torp, Sawayn and Friesen (Pollich, Maritza)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?176">Waters, Godfrey</A></TD> </TR> @@ -3498,31 +3516,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?105">105</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">30</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?105">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?105">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?105">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?105">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?105">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?105">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">Sep 01 2015</A></TD> @@ -3530,7 +3548,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?32">Swaniawski, Adrienne</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?46">Steuber, Ryley</A></TD> </TR> @@ -3539,31 +3557,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?137">137</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?31">31</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?137">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?31">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?137">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?31">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?137">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?31">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?137">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?31">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?137">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?31">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?137">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?31">Sep 01 2015</A></TD> @@ -3571,7 +3589,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?119">Runolfsson, Roob and Hoppe (Bergstrom, Esteban)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?51">Medhurst Group (Medhurst, Rafaela)</A></TD> </TR> @@ -3580,31 +3598,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?117">117</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?39">39</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?117">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?39">$30.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?117">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?39">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?117">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?39">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?117">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?39">$30.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?117">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?39">$30.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?117">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?39">Sep 01 2015</A></TD> @@ -3612,7 +3630,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?65">O'Reilly-Mraz (Pagac, Kennedi)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?92">Ruecker, Lucious</A></TD> </TR> @@ -3621,31 +3639,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?143">143</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">44</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?143">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?143">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?143">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?143">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?143">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?143">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">Sep 01 2015</A></TD> @@ -3653,7 +3671,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?134">Stokes, Janelle</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?138">Leuschke, Edd</A></TD> </TR> @@ -3662,31 +3680,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?134">134</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">28</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?134">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?134">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?134">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?134">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?134">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?134">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">Sep 01 2015</A></TD> @@ -3694,7 +3712,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?101">Flatley, Yundt and Pacocha (Volkman, Tabitha)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?43">Leannon-Pfannerstill (O'Keefe, Bernie)</A></TD> </TR> @@ -3703,31 +3721,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?115">115</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">41</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?115">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?115">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?115">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?115">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?115">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?115">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">Sep 01 2015</A></TD> @@ -3735,7 +3753,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?59">Simonis Inc (Runolfsson, Kareem)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?103">Roberts-Schinner (Flatley, Amelia)</A></TD> </TR> @@ -3744,31 +3762,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?108">108</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?47">47</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?108">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?47">$236.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?108">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?47">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?108">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?47">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?108">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?47">$236.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?108">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?47">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?108">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?47">Sep 02 2015</A></TD> @@ -3776,7 +3794,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?38">Christiansen, Leone</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?69">Moore-Cummerata (DuBuque, Russ)</A></TD> </TR> @@ -3785,31 +3803,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?127">127</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?49">49</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?127">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?49">$212.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?127">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?49">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?127">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?49">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?127">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?49">$212.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?127">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?49">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?127">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?49">Sep 02 2015</A></TD> @@ -3817,7 +3835,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?92">Ruecker, Lucious</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?171">Mante LLC (Kessler, Enid)</A></TD> </TR> @@ -3826,31 +3844,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">151</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?48">48</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?48">$212.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?48">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?48">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?48">$212.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?48">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?48">Sep 02 2015</A></TD> @@ -3858,7 +3876,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?176">Waters, Godfrey</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?99">Luettgen-Jacobs (Hintz, Junior)</A></TD> </TR> @@ -3867,31 +3885,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?98">98</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?50">50</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?98">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?50">$209.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?98">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?50">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?98">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?50">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?98">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?50">$209.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?98">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?50">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?98">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?50">Sep 03 2015</A></TD> @@ -3899,7 +3917,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?8">Douglas, Willow</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?75">Hoeger-Brown (Shields, Serenity)</A></TD> </TR> @@ -3908,31 +3926,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">153</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?51">51</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?51">$228.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?51">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?51">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?51">$228.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?51">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?51">Sep 04 2015</A></TD> @@ -3940,7 +3958,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?179">Conn-McLaughlin (O'Connell, Gayle)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?109">Lind-Bahringer (Ratke, Roma)</A></TD> </TR> @@ -3949,31 +3967,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?114">114</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?53">53</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?114">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?53">$200.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?114">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?53">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?114">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?53">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?114">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?53">$200.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?114">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?53">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?114">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?53">Sep 06 2015</A></TD> @@ -3981,7 +3999,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?53">Balistreri-Schoen (Schultz, Jaylan)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?147">Pfeffer, Shanahan and Cruickshank (Kutch, Rosario)</A></TD> </TR> @@ -3990,31 +4008,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?131">131</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?52">52</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?131">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?52">$185.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?131">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?52">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?131">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?52">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?131">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?52">$185.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?131">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?52">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?131">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?52">Sep 06 2015</A></TD> @@ -4022,7 +4040,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?98">Gleichner, Delmer</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?94">McKenzie, Kareem</A></TD> </TR> @@ -4031,31 +4049,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?129">129</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?54">54</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?129">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?54">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?129">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?54">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?129">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?54">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?129">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?54">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?129">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?54">$60.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?129">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?54">Sep 07 2015</A></TD> @@ -4063,7 +4081,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?95">Wolff Inc (Hessel, Brianne)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?92">Ruecker, Lucious</A></TD> </TR> @@ -4072,31 +4090,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?147">147</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?56">56</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?147">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?56">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?147">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?56">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?147">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?56">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?147">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?56">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?147">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?56">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?147">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?56">Sep 08 2015</A></TD> @@ -4104,7 +4122,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?155">Boyle-Schmeler (Maggio, Fay)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?103">Roberts-Schinner (Flatley, Amelia)</A></TD> </TR> @@ -4113,31 +4131,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?146">146</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?55">55</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?146">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?55">$212.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?146">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?55">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?146">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?55">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?146">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?55">$212.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?146">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?55">$212.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?146">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?55">Sep 08 2015</A></TD> @@ -4145,7 +4163,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?149">O'Keefe Inc (Schamberger, Felix)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?65">O'Reilly-Mraz (Pagac, Kennedi)</A></TD> </TR> @@ -4154,31 +4172,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?161">161</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?57">57</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?161">$236.13</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?57">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?161">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?57">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?161">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?57">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?161">$236.13</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?57">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?161">$236.13</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?57">$60.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?161">Oct 02 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?57">Sep 09 2015</A></TD> @@ -4186,7 +4204,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?185">Christiansen LLC (Howe, Luis)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?119">Runolfsson, Roob and Hoppe (Bergstrom, Esteban)</A></TD> </TR> @@ -4195,31 +4213,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?165">165</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?58">58</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?165">$209.19</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?58">$188.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?165">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?58">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?165">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?58">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?165">$209.19</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?58">$188.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?165">$209.19</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?58">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?165">Oct 03 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?58">Sep 10 2015</A></TD> @@ -4227,7 +4245,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?131">Wolff and Sons (Heller, Dagmar)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?3">Flatley-Hagenes (Donnelly, Odessa)</A></TD> </TR> @@ -4236,31 +4254,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?167">167</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?59">59</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?167">$185.64</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?59">$182.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?167">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?59">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?167">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?59">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?167">$185.64</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?59">$182.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?167">$185.64</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?59">$182.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?167">Oct 06 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?59">Sep 12 2015</A></TD> @@ -4268,7 +4286,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?26">Romaguera, Tianna</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?59">Simonis Inc (Runolfsson, Kareem)</A></TD> </TR> @@ -4277,31 +4295,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?171">171</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?60">60</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?171">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?60">$179.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?171">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?60">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?171">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?60">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?171">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?60">$179.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?171">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?60">$179.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?171">Oct 07 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?60">Sep 13 2015</A></TD> @@ -4309,7 +4327,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?92">Ruecker, Lucious</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?179">Conn-McLaughlin (O'Connell, Gayle)</A></TD> </TR> @@ -4318,31 +4336,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?175">175</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?61">61</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?175">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?61">$153.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?175">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?61">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?175">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?61">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?175">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?61">$153.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?175">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?61">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?175">Oct 08 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?61">Sep 14 2015</A></TD> @@ -4350,7 +4368,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?65">O'Reilly-Mraz (Pagac, Kennedi)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?34">Kunde, Noemi</A></TD> </TR> @@ -4359,31 +4377,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?178">178</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?63">63</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?178">$128.23</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?63">$188.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?178">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?63">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?178">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?63">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?178">$128.23</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?63">$188.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?178">$128.23</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?63">$188.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?178">Oct 08 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?63">Sep 14 2015</A></TD> @@ -4391,7 +4409,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?128">Powlowski, Veda</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?149">O'Keefe Inc (Schamberger, Felix)</A></TD> </TR> @@ -4400,31 +4418,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?181">181</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?62">62</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?181">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?62">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?181">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?62">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?181">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?62">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?181">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?62">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?181">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?62">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?181">Oct 09 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?62">Sep 14 2015</A></TD> @@ -4432,7 +4450,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?119">Runolfsson, Roob and Hoppe (Bergstrom, Esteban)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?157">Weimann Inc (Cartwright, Judah)</A></TD> </TR> @@ -4441,31 +4459,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?180">180</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?64">64</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?180">$174.03</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?64">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?180">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?64">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?180">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?64">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?180">$174.03</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?64">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?180">$174.03</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?64">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?180">Oct 09 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?64">Sep 15 2015</A></TD> @@ -4473,7 +4491,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?2">Schowalter, Oswald</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?87">Kozey and Sons (Vandervort, Harmon)</A></TD> </TR> @@ -4482,31 +4500,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?184">184</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">65</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?184">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?184">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?184">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?184">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?184">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$60.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?184">Oct 12 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">Sep 18 2015</A></TD> @@ -4514,7 +4532,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?59">Simonis Inc (Runolfsson, Kareem)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?83">Jacobson-Gorczany (Vandervort, Kiley)</A></TD> </TR> @@ -4523,31 +4541,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?188">188</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">66</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?188">$123.39</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?188">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?188">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?188">$123.39</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?188">$123.39</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?188">Oct 13 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">Sep 18 2015</A></TD> @@ -4555,7 +4573,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?80">Jakubowski, Jarrell</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?97">Braun, Rath and Gutkowski (Wilderman, Reyes)</A></TD> </TR> @@ -4564,31 +4582,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?189">189</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?70">70</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?189">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?70">$117.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?189">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?70">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?189">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?70">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?189">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?70">$117.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?189">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?70">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?189">Oct 13 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?70">Sep 19 2015</A></TD> @@ -4596,7 +4614,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?179">Conn-McLaughlin (O'Connell, Gayle)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?196">Turcotte, Janessa</A></TD> </TR> @@ -4605,31 +4623,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?191">191</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?69">69</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?191">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?69">$161.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?191">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?69">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?191">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?69">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?191">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?69">$161.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?191">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?69">$161.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?191">Oct 14 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?69">Sep 19 2015</A></TD> @@ -4637,7 +4655,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?149">O'Keefe Inc (Schamberger, Felix)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?155">Boyle-Schmeler (Maggio, Fay)</A></TD> </TR> @@ -4646,31 +4664,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?190">190</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?67">67</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?190">$154.68</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?67">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?190">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?67">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?190">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?67">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?190">$154.68</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?67">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?190">$154.68</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?67">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?190">Oct 14 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?67">Sep 19 2015</A></TD> @@ -4678,7 +4696,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?50">Marquardt, Abbey</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?25">Kuhlman-Huels (Parisian, Cristopher)</A></TD> </TR> @@ -4687,31 +4705,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?193">193</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?68">68</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?193">$154.68</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?68">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?193">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?68">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?193">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?68">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?193">$154.68</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?68">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?193">$154.68</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?68">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?193">Oct 14 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?68">Sep 19 2015</A></TD> @@ -4719,7 +4737,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?170">Wilderman, Annalise</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?91">Fay and Sons (Gerhold, Thora)</A></TD> </TR> @@ -4728,31 +4746,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?195">195</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?71">71</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?195">$171.45</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?71">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?195">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?71">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?195">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?71">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?195">$171.45</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?71">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?195">$171.45</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?71">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?195">Oct 16 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?71">Sep 20 2015</A></TD> @@ -4760,7 +4778,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?35">Bahringer LLC (Frami, Roslyn)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?43">Leannon-Pfannerstill (O'Keefe, Bernie)</A></TD> </TR> @@ -4769,31 +4787,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?198">198</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?74">74</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?198">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?74">$129.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?198">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?74">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?198">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?74">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?198">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?74">$129.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?198">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?74">$129.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?198">Oct 18 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?74">Sep 20 2015</A></TD> @@ -4801,7 +4819,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?83">Jacobson-Gorczany (Vandervort, Kiley)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?134">Stokes, Janelle</A></TD> </TR> @@ -4810,31 +4828,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?200">200</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?72">72</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?200">$118.55</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?72">$164.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?200">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?72">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?200">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?72">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?200">$118.55</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?72">$164.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?200">$118.55</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?72">$164.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?200">Oct 18 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?72">Sep 20 2015</A></TD> @@ -4842,7 +4860,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?116">Konopelski, Barry</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?53">Balistreri-Schoen (Schultz, Jaylan)</A></TD> </TR> @@ -4851,31 +4869,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?206">206</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?73">73</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?206">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?73">$164.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?206">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?73">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?206">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?73">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?206">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?73">$164.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?206">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?73">$164.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?206">Oct 19 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?73">Sep 20 2015</A></TD> @@ -4883,7 +4901,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?155">Boyle-Schmeler (Maggio, Fay)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?101">Flatley, Yundt and Pacocha (Volkman, Tabitha)</A></TD> </TR> @@ -4892,31 +4910,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?204">204</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">76</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?204">$117.58</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?204">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?204">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?204">$117.58</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?204">$117.58</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?204">Oct 19 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">Sep 21 2015</A></TD> @@ -4924,7 +4942,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?20">Weber, Aliza</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?51">Medhurst Group (Medhurst, Rafaela)</A></TD> </TR> @@ -4933,31 +4951,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?210">210</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">75</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?210">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$115.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?210">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?210">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?210">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$115.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?210">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$115.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?210">Oct 20 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">Sep 21 2015</A></TD> @@ -4965,7 +4983,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?101">Flatley, Yundt and Pacocha (Volkman, Tabitha)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?32">Swaniawski, Adrienne</A></TD> </TR> @@ -4974,31 +4992,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?208">208</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">78</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?208">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">$155.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?208">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?208">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?208">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">$155.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?208">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?208">Oct 20 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">Sep 21 2015</A></TD> @@ -5006,7 +5024,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?53">Balistreri-Schoen (Schultz, Jaylan)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?159">McLaughlin-Luettgen (Berge, Houston)</A></TD> </TR> @@ -5015,31 +5033,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?212">212</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">77</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?212">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">$115.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?212">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?212">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?212">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">$115.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?212">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?212">Oct 21 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">Sep 21 2015</A></TD> @@ -5047,7 +5065,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?32">Swaniawski, Adrienne</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?52">Frami, Gayle</A></TD> </TR> @@ -5056,31 +5074,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?216">216</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?79">79</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?216">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?79">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?216">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?79">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?216">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?79">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?216">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?79">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?216">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?79">$60.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?216">Oct 22 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?79">Sep 22 2015</A></TD> @@ -5097,31 +5115,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?219">219</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?80">80</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?219">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?80">$114.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?219">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?80">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?219">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?80">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?219">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?80">$114.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?219">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?80">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?219">Oct 23 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?80">Sep 22 2015</A></TD> @@ -5129,7 +5147,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?164">Bernhard, Kris</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?112">Gleason, Ahmed</A></TD> </TR> @@ -5138,31 +5156,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?220">220</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?81">81</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?220">$148.23</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?81">$113.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?220">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?81">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?220">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?81">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?220">$148.23</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?81">$113.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?220">$148.23</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?81">$113.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?220">Oct 24 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?81">Sep 23 2015</A></TD> @@ -5170,7 +5188,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?23">DuBuque Inc (King, Thomas)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?164">Bernhard, Kris</A></TD> </TR> @@ -5179,31 +5197,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?223">223</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?82">82</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?223">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?82">$113.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?223">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?82">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?223">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?82">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?223">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?82">$113.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?223">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?82">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?223">Oct 25 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?82">Sep 24 2015</A></TD> @@ -5211,7 +5229,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?95">Wolff Inc (Hessel, Brianne)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?66">Abbott, Addison</A></TD> </TR> @@ -5220,31 +5238,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?228">228</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?83">83</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?228">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?83">$143.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?228">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?83">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?228">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?83">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?228">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?83">$143.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?228">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?83">$143.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?228">Oct 28 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?83">Sep 25 2015</A></TD> @@ -5252,7 +5270,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?8">Douglas, Willow</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?95">Wolff Inc (Hessel, Brianne)</A></TD> </TR> @@ -5261,31 +5279,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?227">227</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?85">85</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?227">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?85">$110.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?227">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?85">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?227">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?85">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?227">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?85">$110.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?227">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?85">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?227">Oct 28 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?85">Sep 26 2015</A></TD> @@ -5293,7 +5311,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?11">Torp, Sawayn and Friesen (Pollich, Maritza)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?172">Rowe, Amara</A></TD> </TR> @@ -5302,31 +5320,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?233">233</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?84">84</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?233">$135.48</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?84">$105.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?233">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?84">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?233">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?84">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?233">$135.48</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?84">$105.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?233">$135.48</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?84">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?233">Oct 28 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?84">Sep 26 2015</A></TD> @@ -5334,7 +5352,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?137">Kohler Group (Bechtelar, Leopoldo)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?130">Carter, Cathy</A></TD> </TR> @@ -5343,31 +5361,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?234">234</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">87</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?234">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">$136.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?234">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?234">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?234">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">$136.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?234">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?234">Oct 28 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">Sep 27 2015</A></TD> @@ -5375,7 +5393,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?176">Waters, Godfrey</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?189">Rodriguez-Ebert (Bergstrom, Cecilia)</A></TD> </TR> @@ -5384,31 +5402,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?230">230</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">86</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?230">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$101.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?230">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?230">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?230">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$101.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?230">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$101.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?230">Oct 28 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">Sep 27 2015</A></TD> @@ -5416,7 +5434,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?47">Bernhard-Treutel (Shanahan, Kevin)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?98">Gleichner, Delmer</A></TD> </TR> @@ -5425,31 +5443,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?235">235</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?92">92</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?235">$106.94</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?92">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?235">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?92">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?235">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?92">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?235">$106.94</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?92">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?235">$106.94</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?92">$60.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?235">Oct 30 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?92">Sep 28 2015</A></TD> @@ -5457,7 +5475,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?188">Prohaska, Ellis</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?176">Waters, Godfrey</A></TD> </TR> @@ -5466,31 +5484,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?236">236</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">89</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?236">$105.97</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">$97.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?236">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?236">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?236">$105.97</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">$97.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?236">$105.97</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?236">Oct 31 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">Sep 28 2015</A></TD> @@ -5498,7 +5516,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?56">Morar, Braulio</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?30">Toy, Bethany</A></TD> </TR> @@ -5507,31 +5525,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?320">320</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">88</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?320">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$108.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?320">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?320">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?320">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$108.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?320">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$108.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?320">Nov 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">Sep 28 2015</A></TD> @@ -5539,7 +5557,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?164">Bernhard, Kris</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?8">Douglas, Willow</A></TD> </TR> @@ -5548,31 +5566,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?313">313</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?90">90</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?313">$215.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?90">$132.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?313">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?90">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?313">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?90">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?313">$215.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?90">$132.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?313">$215.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?90">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?313">Nov 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?90">Sep 28 2015</A></TD> @@ -5580,7 +5598,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?143">Mann, Wilderman and Stiedemann (Maggio, Remington)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?129">Quitzon Group (Davis, Jeffery)</A></TD> </TR> @@ -5589,31 +5607,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?304">304</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?91">91</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?304">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?91">$97.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?304">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?91">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?304">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?91">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?304">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?91">$97.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?304">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?91">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?304">Nov 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?91">Sep 28 2015</A></TD> @@ -5621,7 +5639,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?128">Powlowski, Veda</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?126">Kunze, Michale</A></TD> </TR> @@ -5630,31 +5648,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?238">238</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?95">95</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?238">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?95">$128.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?238">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?95">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?238">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?95">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?238">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?95">$128.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?238">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?95">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?238">Nov 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?95">Sep 29 2015</A></TD> @@ -5662,7 +5680,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?2">Schowalter, Oswald</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?121">Cole, Graham and Towne (Hickle, Javier)</A></TD> </TR> @@ -5671,31 +5689,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?268">268</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?93">93</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?268">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?93">$131.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?268">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?93">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?268">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?93">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?268">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?93">$131.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?268">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?93">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?268">Nov 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?93">Sep 29 2015</A></TD> @@ -5703,7 +5721,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?53">Balistreri-Schoen (Schultz, Jaylan)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?19">Toy-Gerlach (Zulauf, Sharon)</A></TD> </TR> @@ -5712,31 +5730,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?239">239</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?94">94</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?239">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?94">$131.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?239">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?94">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?239">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?94">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?239">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?94">$131.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?239">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?94">$131.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?239">Nov 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?94">Sep 29 2015</A></TD> @@ -5744,7 +5762,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?8">Douglas, Willow</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?47">Bernhard-Treutel (Shanahan, Kevin)</A></TD> </TR> @@ -5753,31 +5771,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?297">297</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?96">96</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?297">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?96">$128.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?297">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?96">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?297">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?96">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?297">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?96">$128.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?297">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?96">$128.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?297">Nov 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?96">Sep 30 2015</A></TD> @@ -5785,7 +5803,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?116">Konopelski, Barry</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?11">Torp, Sawayn and Friesen (Pollich, Maritza)</A></TD> </TR> @@ -5794,31 +5812,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?314">314</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">153</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?314">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?314">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?314">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?314">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?314">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$90.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?314">Nov 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">Oct 01 2015</A></TD> @@ -5826,7 +5844,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?149">O'Keefe Inc (Schamberger, Felix)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?179">Conn-McLaughlin (O'Connell, Gayle)</A></TD> </TR> @@ -5835,31 +5853,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?266">266</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">151</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?266">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">$30.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?266">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?266">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?266">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">$30.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?266">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">$30.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?266">Nov 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">Oct 01 2015</A></TD> @@ -5867,7 +5885,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?50">Marquardt, Abbey</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?176">Waters, Godfrey</A></TD> </TR> @@ -5876,31 +5894,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?330">330</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">124</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?330">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?330">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?330">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?330">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?330">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$90.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?330">Nov 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">Oct 01 2015</A></TD> @@ -5908,7 +5926,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?188">Prohaska, Ellis</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?83">Jacobson-Gorczany (Vandervort, Kiley)</A></TD> </TR> @@ -5917,31 +5935,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?285">285</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">121</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?285">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?285">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?285">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?285">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?285">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?285">Nov 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">Oct 01 2015</A></TD> @@ -5949,7 +5967,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?95">Wolff Inc (Hessel, Brianne)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?69">Moore-Cummerata (DuBuque, Russ)</A></TD> </TR> @@ -5964,12 +5982,45 @@ function confirm_spool_process() { <FONT SIZE="+2">1</FONT> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=100;_type=html;offset=100">2</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=100">2</A> + + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=200">3</A> + + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=300">4</A> + + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=400">5</A> + + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=500">6</A> + + ... + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=700">8</A> + + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=800">9</A> + + ... + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1000">11</A> + + ... + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1200">13</A> + + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1300">14</A> + + + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1400">15</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=100;_type=html;offset=200">3</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1500">16</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date;_dummy=1;maxrecords=100;_type=html;offset=100"><B><FONT SIZE="+1">Next</FONT></B></A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=OPEN90_date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=100"><B><FONT SIZE="+1">Next</FONT></B></A> diff --git a/FS-Test/share/output/search/cust_bill.html/date b/FS-Test/share/output/search/cust_bill.html/keywords=date:order_by=invnum index 5681b4224..0fbf9aa3e 100644 --- a/FS-Test/share/output/search/cust_bill.html/date +++ b/FS-Test/share/output/search/cust_bill.html/keywords=date:order_by=invnum @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -973,7 +973,7 @@ function print_process () { var fieldName; for (var i = 0; i<document.print_form.elements.length; i++) { field = document.print_form.elements[i]; - if ( (field.name.indexOf('days') > -1) || (field.name.indexOf('charged') > -1) || (field.name.indexOf('order_by') > -1) || (field.name.indexOf('owed') > -1) + if ( (field.name.indexOf('charged') > -1) || (field.name.indexOf('owed') > -1) ) { if ( field.type == 'select-multiple' ) { @@ -1018,8 +1018,6 @@ function print_myCallback( jobnum ) { <FORM NAME="print_form"> -<INPUT TYPE="hidden" NAME="days" VALUE=""> -<INPUT TYPE="hidden" NAME="order_by" VALUE="cust_bill._date"> </FORM> @@ -1130,7 +1128,7 @@ function email_process () { var fieldName; for (var i = 0; i<document.email_form.elements.length; i++) { field = document.email_form.elements[i]; - if ( (field.name.indexOf('days') > -1) || (field.name.indexOf('charged') > -1) || (field.name.indexOf('order_by') > -1) || (field.name.indexOf('owed') > -1) + if ( (field.name.indexOf('charged') > -1) || (field.name.indexOf('owed') > -1) ) { if ( field.type == 'select-multiple' ) { @@ -1175,8 +1173,6 @@ function email_myCallback( jobnum ) { <FORM NAME="email_form"> -<INPUT TYPE="hidden" NAME="days" VALUE=""> -<INPUT TYPE="hidden" NAME="order_by" VALUE="cust_bill._date"> </FORM> @@ -1287,7 +1283,7 @@ function fax_process () { var fieldName; for (var i = 0; i<document.fax_form.elements.length; i++) { field = document.fax_form.elements[i]; - if ( (field.name.indexOf('days') > -1) || (field.name.indexOf('charged') > -1) || (field.name.indexOf('order_by') > -1) || (field.name.indexOf('owed') > -1) + if ( (field.name.indexOf('charged') > -1) || (field.name.indexOf('owed') > -1) ) { if ( field.type == 'select-multiple' ) { @@ -1332,8 +1328,6 @@ function fax_myCallback( jobnum ) { <FORM NAME="fax_form"> -<INPUT TYPE="hidden" NAME="days" VALUE=""> -<INPUT TYPE="hidden" NAME="order_by" VALUE="cust_bill._date"> </FORM> @@ -1444,7 +1438,7 @@ function ftp_process () { var fieldName; for (var i = 0; i<document.ftp_form.elements.length; i++) { field = document.ftp_form.elements[i]; - if ( (field.name.indexOf('days') > -1) || (field.name.indexOf('charged') > -1) || (field.name.indexOf('order_by') > -1) || (field.name.indexOf('owed') > -1) + if ( (field.name.indexOf('charged') > -1) || (field.name.indexOf('owed') > -1) ) { if ( field.type == 'select-multiple' ) { @@ -1489,8 +1483,6 @@ function ftp_myCallback( jobnum ) { <FORM NAME="ftp_form"> -<INPUT TYPE="hidden" NAME="days" VALUE=""> -<INPUT TYPE="hidden" NAME="order_by" VALUE="cust_bill._date"> </FORM> @@ -1601,7 +1593,7 @@ function spool_process () { var fieldName; for (var i = 0; i<document.spool_form.elements.length; i++) { field = document.spool_form.elements[i]; - if ( (field.name.indexOf('days') > -1) || (field.name.indexOf('charged') > -1) || (field.name.indexOf('order_by') > -1) || (field.name.indexOf('owed') > -1) + if ( (field.name.indexOf('charged') > -1) || (field.name.indexOf('owed') > -1) ) { if ( field.type == 'select-multiple' ) { @@ -1646,8 +1638,6 @@ function spool_myCallback( jobnum ) { <FORM NAME="spool_form"> -<INPUT TYPE="hidden" NAME="days" VALUE=""> -<INPUT TYPE="hidden" NAME="order_by" VALUE="cust_bill._date"> </FORM><SCRIPT TYPE="text/javascript"> function confirm_print_process() { @@ -1695,7 +1685,7 @@ function confirm_spool_process() { 1584 total invoices - ( show <SELECT NAME="maxrecords" onChange="window.location = 'http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=' + this.options[this.selectedIndex].value;"> + ( show <SELECT NAME="maxrecords" onChange="window.location = 'http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=' + this.options[this.selectedIndex].value;"> <OPTION VALUE="100" SELECTED>100</OPTION> <OPTION VALUE="500" >500</OPTION> @@ -1721,12 +1711,12 @@ function confirm_spool_process() { Download full results<BR> - as <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=invoices.xls">Excel spreadsheet</A><BR> + as <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=invoices.xls">Excel spreadsheet</A><BR> - as <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=csv">CSV file</A><BR> + as <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=csv">CSV file</A><BR> - as <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html-print">printable copy</A> + as <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html-print">printable copy</A> </TD> @@ -1739,45 +1729,45 @@ function confirm_spool_process() { <FONT SIZE="+2">1</FONT> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=100">2</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=100">2</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=200">3</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=200">3</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=300">4</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=300">4</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=400">5</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=400">5</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=500">6</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=500">6</A> ... - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=700">8</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=700">8</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=800">9</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=800">9</A> ... - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=1000">11</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1000">11</A> ... - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=1200">13</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1200">13</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=1300">14</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1300">14</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=1400">15</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1400">15</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=1500">16</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1500">16</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=100"><B><FONT SIZE="+1">Next</FONT></B></A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=100"><B><FONT SIZE="+1">Next</FONT></B></A> @@ -1800,7 +1790,7 @@ function confirm_spool_process() { > - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=COALESCE%28%20agent_invid%2C%20invnum%20%29">Invoice #</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=COALESCE%28%20agent_invid%2C%20invnum%20%29">Invoice #</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -1809,7 +1799,7 @@ function confirm_spool_process() { > - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=gross">Gross Amount</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=gross">Gross Amount</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -1818,7 +1808,7 @@ function confirm_spool_process() { > - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=discounted">Discount</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=discounted">Discount</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -1827,7 +1817,7 @@ function confirm_spool_process() { > - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=credited">Credits</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=credited">Credits</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -1836,7 +1826,7 @@ function confirm_spool_process() { > - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=net">Net Amount</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=net">Net Amount</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -1845,7 +1835,7 @@ function confirm_spool_process() { > - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=owed">Balance</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=owed">Balance</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -1854,7 +1844,7 @@ function confirm_spool_process() { > - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=_date">Date</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=_date">Date</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -2419,31 +2409,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">14</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">16</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">$170.32</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">$162.74</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">$170.32</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">$162.74</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">Aug 19 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">Aug 19 2015</A></TD> @@ -2451,7 +2441,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?25">Kuhlman-Huels (Parisian, Cristopher)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?91">Fay and Sons (Gerhold, Thora)</A></TD> </TR> @@ -2460,31 +2450,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">15</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">14</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">$135.32</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">$170.32</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">$135.32</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">$170.32</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">Aug 19 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?14">Aug 19 2015</A></TD> @@ -2492,7 +2482,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?70">Brown, Danial</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?25">Kuhlman-Huels (Parisian, Cristopher)</A></TD> </TR> @@ -2501,31 +2491,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">16</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">15</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">$162.74</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">$135.32</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">$162.74</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">$135.32</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?16">Aug 19 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?15">Aug 19 2015</A></TD> @@ -2533,7 +2523,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?91">Fay and Sons (Gerhold, Thora)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?70">Brown, Danial</A></TD> </TR> @@ -2747,31 +2737,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">23</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">22</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$105.97</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">$88.87</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$105.97</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">$88.87</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$105.97</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">Aug 31 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">Aug 31 2015</A></TD> @@ -2779,7 +2769,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?176">Waters, Godfrey</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?58">Schultz, Colten</A></TD> </TR> @@ -2788,31 +2778,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">22</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">23</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">$88.87</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$105.97</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">$88.87</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$105.97</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">$105.97</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?22">Aug 31 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?23">Aug 31 2015</A></TD> @@ -2820,7 +2810,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?58">Schultz, Colten</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?176">Waters, Godfrey</A></TD> </TR> @@ -2870,31 +2860,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">45</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">33</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$120.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">Sep 01 2015</A></TD> @@ -2902,7 +2892,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?157">Weimann Inc (Cartwright, Judah)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?74">Boyer, Lamont</A></TD> </TR> @@ -2911,31 +2901,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">28</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">36</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">Sep 01 2015</A></TD> @@ -2943,7 +2933,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?43">Leannon-Pfannerstill (O'Keefe, Bernie)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?82">Kessler, Dana</A></TD> </TR> @@ -2952,31 +2942,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">27</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">45</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?45">Sep 01 2015</A></TD> @@ -2984,7 +2974,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?25">Kuhlman-Huels (Parisian, Cristopher)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?157">Weimann Inc (Cartwright, Judah)</A></TD> </TR> @@ -2993,31 +2983,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">43</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">35</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$90.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">Sep 01 2015</A></TD> @@ -3025,7 +3015,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?119">Runolfsson, Roob and Hoppe (Bergstrom, Esteban)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?83">Jacobson-Gorczany (Vandervort, Kiley)</A></TD> </TR> @@ -3034,31 +3024,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">32</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">24</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">Sep 01 2015</A></TD> @@ -3066,7 +3056,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?58">Schultz, Colten</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?10">Grady, Aniya</A></TD> </TR> @@ -3075,31 +3065,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">26</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">43</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">$90.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?43">Sep 01 2015</A></TD> @@ -3107,7 +3097,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?29">Lehner-Klein (Smitham, Pansy)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?119">Runolfsson, Roob and Hoppe (Bergstrom, Esteban)</A></TD> </TR> @@ -3116,31 +3106,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">46</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">26</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$30.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">$120.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?26">Sep 01 2015</A></TD> @@ -3148,7 +3138,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?176">Waters, Godfrey</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?29">Lehner-Klein (Smitham, Pansy)</A></TD> </TR> @@ -3157,31 +3147,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">33</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">42</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?33">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">Sep 01 2015</A></TD> @@ -3189,7 +3179,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?74">Boyer, Lamont</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?114">Donnelly, Raleigh</A></TD> </TR> @@ -3198,31 +3188,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">35</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">29</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$120.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?35">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">Sep 01 2015</A></TD> @@ -3230,7 +3220,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?83">Jacobson-Gorczany (Vandervort, Kiley)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?38">Christiansen, Leone</A></TD> </TR> @@ -3239,31 +3229,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">30</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">27</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?27">Sep 01 2015</A></TD> @@ -3271,7 +3261,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?46">Steuber, Ryley</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?25">Kuhlman-Huels (Parisian, Cristopher)</A></TD> </TR> @@ -3280,31 +3270,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">37</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">38</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">Sep 01 2015</A></TD> @@ -3312,7 +3302,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?87">Kozey and Sons (Vandervort, Harmon)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?91">Fay and Sons (Gerhold, Thora)</A></TD> </TR> @@ -3321,31 +3311,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">44</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">32</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?32">Sep 01 2015</A></TD> @@ -3353,7 +3343,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?138">Leuschke, Edd</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?58">Schultz, Colten</A></TD> </TR> @@ -3362,31 +3352,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">34</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">37</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?37">Sep 01 2015</A></TD> @@ -3394,7 +3384,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?70">Brown, Danial</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?87">Kozey and Sons (Vandervort, Harmon)</A></TD> </TR> @@ -3403,31 +3393,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">38</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">40</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?38">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">Sep 01 2015</A></TD> @@ -3435,7 +3425,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?91">Fay and Sons (Gerhold, Thora)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?97">Braun, Rath and Gutkowski (Wilderman, Reyes)</A></TD> </TR> @@ -3444,31 +3434,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">40</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">34</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?40">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?34">Sep 01 2015</A></TD> @@ -3476,7 +3466,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?97">Braun, Rath and Gutkowski (Wilderman, Reyes)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?70">Brown, Danial</A></TD> </TR> @@ -3485,31 +3475,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">41</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">46</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$30.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$30.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">$30.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?46">Sep 01 2015</A></TD> @@ -3517,7 +3507,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?103">Roberts-Schinner (Flatley, Amelia)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?176">Waters, Godfrey</A></TD> </TR> @@ -3526,31 +3516,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">29</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">30</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?29">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?30">Sep 01 2015</A></TD> @@ -3558,7 +3548,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?38">Christiansen, Leone</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?46">Steuber, Ryley</A></TD> </TR> @@ -3649,31 +3639,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">36</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">44</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?36">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?44">Sep 01 2015</A></TD> @@ -3681,7 +3671,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?82">Kessler, Dana</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?138">Leuschke, Edd</A></TD> </TR> @@ -3690,31 +3680,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">24</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">28</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?24">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?28">Sep 01 2015</A></TD> @@ -3722,7 +3712,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?10">Grady, Aniya</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?43">Leannon-Pfannerstill (O'Keefe, Bernie)</A></TD> </TR> @@ -3731,31 +3721,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">42</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">41</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?42">Sep 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?41">Sep 01 2015</A></TD> @@ -3763,7 +3753,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?114">Donnelly, Raleigh</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?103">Roberts-Schinner (Flatley, Amelia)</A></TD> </TR> @@ -4510,31 +4500,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">66</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">65</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$60.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">Sep 18 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">Sep 18 2015</A></TD> @@ -4542,7 +4532,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?97">Braun, Rath and Gutkowski (Wilderman, Reyes)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?83">Jacobson-Gorczany (Vandervort, Kiley)</A></TD> </TR> @@ -4551,31 +4541,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">65</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">66</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?65">Sep 18 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?66">Sep 18 2015</A></TD> @@ -4583,7 +4573,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?83">Jacobson-Gorczany (Vandervort, Kiley)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?97">Braun, Rath and Gutkowski (Wilderman, Reyes)</A></TD> </TR> @@ -4920,31 +4910,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">75</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">76</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$115.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$115.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">$60.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$115.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">Sep 21 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">Sep 21 2015</A></TD> @@ -4952,7 +4942,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?32">Swaniawski, Adrienne</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?51">Medhurst Group (Medhurst, Rafaela)</A></TD> </TR> @@ -4961,31 +4951,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">78</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">75</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">$155.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$115.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">$155.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$115.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">$115.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">Sep 21 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?75">Sep 21 2015</A></TD> @@ -4993,7 +4983,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?159">McLaughlin-Luettgen (Berge, Houston)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?32">Swaniawski, Adrienne</A></TD> </TR> @@ -5002,31 +4992,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">77</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">78</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">$115.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">$155.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">$115.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">$155.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">Sep 21 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?78">Sep 21 2015</A></TD> @@ -5034,7 +5024,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?52">Frami, Gayle</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?159">McLaughlin-Luettgen (Berge, Houston)</A></TD> </TR> @@ -5043,31 +5033,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">76</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">77</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">$115.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">$60.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">$115.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?76">Sep 21 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?77">Sep 21 2015</A></TD> @@ -5075,7 +5065,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?51">Medhurst Group (Medhurst, Rafaela)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?52">Frami, Gayle</A></TD> </TR> @@ -5371,31 +5361,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">86</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">87</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$101.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">$136.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$101.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">$136.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$101.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">Sep 27 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">Sep 27 2015</A></TD> @@ -5403,7 +5393,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?98">Gleichner, Delmer</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?189">Rodriguez-Ebert (Bergstrom, Cecilia)</A></TD> </TR> @@ -5412,31 +5402,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">87</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">86</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">$136.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$101.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">$136.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$101.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">$101.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?87">Sep 27 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?86">Sep 27 2015</A></TD> @@ -5444,7 +5434,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?189">Rodriguez-Ebert (Bergstrom, Cecilia)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?98">Gleichner, Delmer</A></TD> </TR> @@ -5494,31 +5484,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">88</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">89</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$108.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">$97.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$108.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">$97.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$108.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">Sep 28 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">Sep 28 2015</A></TD> @@ -5526,7 +5516,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?8">Douglas, Willow</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?30">Toy, Bethany</A></TD> </TR> @@ -5535,31 +5525,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">89</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">88</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">$97.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$108.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">$97.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$108.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">$108.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?89">Sep 28 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?88">Sep 28 2015</A></TD> @@ -5567,7 +5557,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?30">Toy, Bethany</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?8">Douglas, Willow</A></TD> </TR> @@ -5822,31 +5812,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">121</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">153</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">$120.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$90.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">Oct 01 2015</A></TD> @@ -5854,7 +5844,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?69">Moore-Cummerata (DuBuque, Russ)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?179">Conn-McLaughlin (O'Connell, Gayle)</A></TD> </TR> @@ -5863,31 +5853,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">124</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">151</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">$30.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">$30.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">$30.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?151">Oct 01 2015</A></TD> @@ -5895,7 +5885,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?83">Jacobson-Gorczany (Vandervort, Kiley)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?176">Waters, Godfrey</A></TD> </TR> @@ -5904,31 +5894,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?147">147</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">124</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?147">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?147">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?147">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?147">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$90.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?147">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">$90.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?147">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?124">Oct 01 2015</A></TD> @@ -5936,7 +5926,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?155">Boyle-Schmeler (Maggio, Fay)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?83">Jacobson-Gorczany (Vandervort, Kiley)</A></TD> </TR> @@ -5945,31 +5935,31 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">153</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">121</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$0.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">$0.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">$120.00</A></TD> - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">$90.00</A></TD> + <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">$0.00</A></TD> - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?153">Oct 01 2015</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_bill.cgi?121">Oct 01 2015</A></TD> @@ -5977,7 +5967,7 @@ function confirm_spool_process() { - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?179">Conn-McLaughlin (O'Connell, Gayle)</A></TD> + <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?69">Moore-Cummerata (DuBuque, Russ)</A></TD> </TR> @@ -5992,45 +5982,45 @@ function confirm_spool_process() { <FONT SIZE="+2">1</FONT> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=100">2</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=100">2</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=200">3</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=200">3</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=300">4</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=300">4</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=400">5</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=400">5</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=500">6</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=500">6</A> ... - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=700">8</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=700">8</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=800">9</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=800">9</A> ... - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=1000">11</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1000">11</A> ... - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=1200">13</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1200">13</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=1300">14</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1300">14</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=1400">15</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1400">15</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=1500">16</A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=1500">16</A> - <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date;_dummy=1;maxrecords=100;_type=html;offset=100"><B><FONT SIZE="+1">Next</FONT></B></A> + <A HREF="http://localhost/freeside/search/cust_bill.html?keywords=date%3Aorder_by%3Dinvnum;_dummy=1;maxrecords=100;_type=html;offset=100"><B><FONT SIZE="+1">Next</FONT></B></A> diff --git a/FS-Test/share/output/search/cust_bill.html/magic=_date:agentnum=1:beginning=:ending=10%2F01%2F2015:charged_lt=:charged_gt=200.00:owed_lt=:owed_gt=:open=1 b/FS-Test/share/output/search/cust_bill.html/magic=_date:agentnum=1:beginning=:ending=10%2F01%2F2015:charged_lt=:charged_gt=200.00:owed_lt=:owed_gt=:open=1 index 0b7e3f23f..b040cdc17 100644 --- a/FS-Test/share/output/search/cust_bill.html/magic=_date:agentnum=1:beginning=:ending=10%2F01%2F2015:charged_lt=:charged_gt=200.00:owed_lt=:owed_gt=:open=1 +++ b/FS-Test/share/output/search/cust_bill.html/magic=_date:agentnum=1:beginning=:ending=10%2F01%2F2015:charged_lt=:charged_gt=200.00:owed_lt=:owed_gt=:open=1 @@ -617,7 +617,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/search/cust_bill_pkg.cgi/agentnum=1:status=:cust_classnum=:beginning=01%2F01%2F2016:ending=01%2F31%2F2016 b/FS-Test/share/output/search/cust_bill_pkg.cgi/agentnum=1:status=:cust_classnum=:beginning=01%2F01%2F2016:ending=01%2F31%2F2016 index f5274253f..ecff0d1aa 100644 --- a/FS-Test/share/output/search/cust_bill_pkg.cgi/agentnum=1:status=:cust_classnum=:beginning=01%2F01%2F2016:ending=01%2F31%2F2016 +++ b/FS-Test/share/output/search/cust_bill_pkg.cgi/agentnum=1:status=:cust_classnum=:beginning=01%2F01%2F2016:ending=01%2F31%2F2016 @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -1002,7 +1002,7 @@ myMenu68.width = 256; > - Paid + <A HREF="http://localhost/freeside/search/cust_bill_pkg.cgi?agentnum=1;status=;cust_classnum=;beginning=01%2F01%2F2016;ending=01%2F31%2F2016;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=pay_amount">Paid</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -1011,7 +1011,7 @@ myMenu68.width = 256; > - Credited + <A HREF="http://localhost/freeside/search/cust_bill_pkg.cgi?agentnum=1;status=;cust_classnum=;beginning=01%2F01%2F2016;ending=01%2F31%2F2016;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=credit_amount">Credited</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" diff --git a/FS-Test/share/output/search/cust_bill_pkg.cgi/nottax=1:agentnum=1:refnum=1:classnum=0:classnum=1:begin=1438412400:end=1441090800 b/FS-Test/share/output/search/cust_bill_pkg.cgi/nottax=1:agentnum=1:refnum=1:classnum=0:classnum=1:begin=1438412400:end=1441090800 index 17a7ecbbe..75e4a4bb7 100644 --- a/FS-Test/share/output/search/cust_bill_pkg.cgi/nottax=1:agentnum=1:refnum=1:classnum=0:classnum=1:begin=1438412400:end=1441090800 +++ b/FS-Test/share/output/search/cust_bill_pkg.cgi/nottax=1:agentnum=1:refnum=1:classnum=0:classnum=1:begin=1438412400:end=1441090800 @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -988,7 +988,7 @@ myMenu68.width = 256; > - Paid + <A HREF="http://localhost/freeside/search/cust_bill_pkg.cgi?nottax=1;agentnum=1;refnum=1;classnum=0;classnum=1;begin=1438412400;end=1441090800;_type=html;order_by=pay_amount">Paid</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -997,7 +997,7 @@ myMenu68.width = 256; > - Credited + <A HREF="http://localhost/freeside/search/cust_bill_pkg.cgi?nottax=1;agentnum=1;refnum=1;classnum=0;classnum=1;begin=1438412400;end=1441090800;_type=html;order_by=credit_amount">Credited</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" diff --git a/FS-Test/share/output/search/cust_bill_pkg.cgi/nottax=1:charges=RU:distribute=0:agentnum=1:refnum=1:use_override=0:classnum=0:classnum=1:begin=1438412400:end=1441090800 b/FS-Test/share/output/search/cust_bill_pkg.cgi/nottax=1:charges=RU:distribute=0:agentnum=1:refnum=1:use_override=0:classnum=0:classnum=1:begin=1438412400:end=1441090800 index 70d7c33ed..ced2a5b3f 100644 --- a/FS-Test/share/output/search/cust_bill_pkg.cgi/nottax=1:charges=RU:distribute=0:agentnum=1:refnum=1:use_override=0:classnum=0:classnum=1:begin=1438412400:end=1441090800 +++ b/FS-Test/share/output/search/cust_bill_pkg.cgi/nottax=1:charges=RU:distribute=0:agentnum=1:refnum=1:use_override=0:classnum=0:classnum=1:begin=1438412400:end=1441090800 @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -977,7 +977,7 @@ myMenu68.width = 256; > - Paid + <A HREF="http://localhost/freeside/search/cust_bill_pkg.cgi?nottax=1;charges=RU;distribute=0;agentnum=1;refnum=1;use_override=0;classnum=0;classnum=1;begin=1438412400;end=1441090800;_type=html;order_by=pay_amount">Paid</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -986,7 +986,7 @@ myMenu68.width = 256; > - Credited + <A HREF="http://localhost/freeside/search/cust_bill_pkg.cgi?nottax=1;charges=RU;distribute=0;agentnum=1;refnum=1;use_override=0;classnum=0;classnum=1;begin=1438412400;end=1441090800;_type=html;order_by=credit_amount">Credited</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" diff --git a/FS-Test/share/output/search/cust_bill_pkg.cgi/nottax=1:charges=S:distribute=0:agentnum=1:refnum=1:use_override=0:classnum=0:classnum=1:begin=1438412400:end=1441090800 b/FS-Test/share/output/search/cust_bill_pkg.cgi/nottax=1:charges=S:distribute=0:agentnum=1:refnum=1:use_override=0:classnum=0:classnum=1:begin=1438412400:end=1441090800 index 250d050cf..1cd761673 100644 --- a/FS-Test/share/output/search/cust_bill_pkg.cgi/nottax=1:charges=S:distribute=0:agentnum=1:refnum=1:use_override=0:classnum=0:classnum=1:begin=1438412400:end=1441090800 +++ b/FS-Test/share/output/search/cust_bill_pkg.cgi/nottax=1:charges=S:distribute=0:agentnum=1:refnum=1:use_override=0:classnum=0:classnum=1:begin=1438412400:end=1441090800 @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -977,7 +977,7 @@ myMenu68.width = 256; > - Paid + <A HREF="http://localhost/freeside/search/cust_bill_pkg.cgi?nottax=1;charges=S;distribute=0;agentnum=1;refnum=1;use_override=0;classnum=0;classnum=1;begin=1438412400;end=1441090800;_type=html;order_by=pay_amount">Paid</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" @@ -986,7 +986,7 @@ myMenu68.width = 256; > - Credited + <A HREF="http://localhost/freeside/search/cust_bill_pkg.cgi?nottax=1;charges=S;distribute=0;agentnum=1;refnum=1;use_override=0;classnum=0;classnum=1;begin=1438412400;end=1441090800;_type=html;order_by=credit_amount">Credited</A> </TH> <TH CLASS = "grid" BGCOLOR = "#cccccc" diff --git a/FS-Test/share/output/search/cust_main.cgi/browse=last b/FS-Test/share/output/search/cust_main.cgi/browse=last index ecac7e268..9a7af33ff 100644 --- a/FS-Test/share/output/search/cust_main.cgi/browse=last +++ b/FS-Test/share/output/search/cust_main.cgi/browse=last @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/search/cust_pay.html/magic=_date:unapplied=0:beginning=01%2F01%2F2016:agentnum=1:order_by=paynum b/FS-Test/share/output/search/cust_pay.html/magic=_date:unapplied=0:beginning=01%2F01%2F2016:agentnum=1:order_by=paynum index 44c3de1f0..10fa46a2d 100644 --- a/FS-Test/share/output/search/cust_pay.html/magic=_date:unapplied=0:beginning=01%2F01%2F2016:agentnum=1:order_by=paynum +++ b/FS-Test/share/output/search/cust_pay.html/magic=_date:unapplied=0:beginning=01%2F01%2F2016:agentnum=1:order_by=paynum @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/search/cust_pkg.cgi/keywords=pkgnum:order_by=pkgnum b/FS-Test/share/output/search/cust_pkg.cgi/keywords=pkgnum:order_by=pkgnum index 160b6e72e..7aeefea33 100644 --- a/FS-Test/share/output/search/cust_pkg.cgi/keywords=pkgnum:order_by=pkgnum +++ b/FS-Test/share/output/search/cust_pkg.cgi/keywords=pkgnum:order_by=pkgnum @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -1274,7 +1274,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?1">example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?1">example.com</A></td></tr></table></TD> </TR> @@ -1375,7 +1375,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?2">berta@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?2">berta@example.com</A></td></tr></table></TD> </TR> @@ -1476,7 +1476,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?3">IP:10.212.50.247, MAC:0000911C4815</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?3">IP:10.212.50.247, MAC:0000911C4815</A></td></tr></table></TD> </TR> @@ -1577,7 +1577,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?4">waters-turner.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?4">waters-turner.com</A></td></tr></table></TD> </TR> @@ -1678,7 +1678,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?5">IP:10.127.31.117, MAC:0000A3E013D7</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?5">IP:10.127.31.117, MAC:0000A3E013D7</A></td></tr></table></TD> </TR> @@ -1779,7 +1779,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?6">ziemann-dietrich.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?6">ziemann-dietrich.com</A></td></tr></table></TD> </TR> @@ -1880,7 +1880,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?7">19671718037</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?7">19671718037</A></td></tr></table></TD> </TR> @@ -1981,7 +1981,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?8">watsica-llc.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?8">watsica-llc.com</A></td></tr></table></TD> </TR> @@ -2082,7 +2082,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?9">337448915280026</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?9">337448915280026</A></td></tr></table></TD> </TR> @@ -2183,7 +2183,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?10">sherwood@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?10">sherwood@example.com</A></td></tr></table></TD> </TR> @@ -2284,7 +2284,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?11">7941182146</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?11">7941182146</A></td></tr></table></TD> </TR> @@ -2385,7 +2385,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?12">rashad@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?12">rashad@example.com</A></td></tr></table></TD> </TR> @@ -2486,7 +2486,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?13">IP:10.4.160.230, MAC:0000D12765F4</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?13">IP:10.4.160.230, MAC:0000D12765F4</A></td></tr></table></TD> </TR> @@ -2587,7 +2587,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?14">doris@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?14">doris@example.com</A></td></tr></table></TD> </TR> @@ -2688,7 +2688,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?15">IP:10.203.139.97, MAC:0000FA2C8FB1</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?15">IP:10.203.139.97, MAC:0000FA2C8FB1</A></td></tr></table></TD> </TR> @@ -2789,7 +2789,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?16">hane-llc.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?16">hane-llc.com</A></td></tr></table></TD> </TR> @@ -2890,7 +2890,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?17">IP:10.75.143.4, MAC:0000EE773AA3</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?17">IP:10.75.143.4, MAC:0000EE773AA3</A></td></tr></table></TD> </TR> @@ -2991,7 +2991,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?18">will-schmitt-and-buckridge.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?18">will-schmitt-and-buckridge.com</A></td></tr></table></TD> </TR> @@ -3092,7 +3092,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?19">507789172836615</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?19">507789172836615</A></td></tr></table></TD> </TR> @@ -3193,7 +3193,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?20">hagenes-mclaughlin-and-fadel.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?20">hagenes-mclaughlin-and-fadel.com</A></td></tr></table></TD> </TR> @@ -3294,7 +3294,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?21">402545251883238</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?21">402545251883238</A></td></tr></table></TD> </TR> @@ -3395,7 +3395,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?22">hilario@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?22">hilario@example.com</A></td></tr></table></TD> </TR> @@ -3496,7 +3496,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?23">5204979036</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?23">5204979036</A></td></tr></table></TD> </TR> @@ -3597,7 +3597,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?24">lennie@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?24">lennie@example.com</A></td></tr></table></TD> </TR> @@ -3698,7 +3698,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?25">IP:10.2.159.93, MAC:0000BEEA3257</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?25">IP:10.2.159.93, MAC:0000BEEA3257</A></td></tr></table></TD> </TR> @@ -3799,7 +3799,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?26">travis@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?26">travis@example.com</A></td></tr></table></TD> </TR> @@ -3900,7 +3900,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?27">IP:10.147.177.86, MAC:0000E5156362</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?27">IP:10.147.177.86, MAC:0000E5156362</A></td></tr></table></TD> </TR> @@ -4001,7 +4001,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?28">watsica-sauer-and-braun.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?28">watsica-sauer-and-braun.com</A></td></tr></table></TD> </TR> @@ -4102,7 +4102,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?29">IP:10.61.84.169, MAC:000069394AF2</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?29">IP:10.61.84.169, MAC:000069394AF2</A></td></tr></table></TD> </TR> @@ -4203,7 +4203,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?30">greenholt-parisian.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?30">greenholt-parisian.com</A></td></tr></table></TD> </TR> @@ -4304,7 +4304,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?31">2103459718</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?31">2103459718</A></td></tr></table></TD> </TR> @@ -4405,7 +4405,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?32">corkery-hackett-and-franecki.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?32">corkery-hackett-and-franecki.com</A></td></tr></table></TD> </TR> @@ -4506,7 +4506,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?33">14745441565</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?33">14745441565</A></td></tr></table></TD> </TR> @@ -4607,7 +4607,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?34">william@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?34">william@example.com</A></td></tr></table></TD> </TR> @@ -4708,7 +4708,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?35">4609716945803</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?35">4609716945803</A></td></tr></table></TD> </TR> @@ -4809,7 +4809,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?36">richmond@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?36">richmond@example.com</A></td></tr></table></TD> </TR> @@ -4910,7 +4910,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?37">IP:10.229.63.194, MAC:00004D3E8513</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?37">IP:10.229.63.194, MAC:00004D3E8513</A></td></tr></table></TD> </TR> @@ -5011,7 +5011,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?38">samir@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?38">samir@example.com</A></td></tr></table></TD> </TR> @@ -5112,7 +5112,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?39">IP:10.188.48.84, MAC:000036BEDE13</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?39">IP:10.188.48.84, MAC:000036BEDE13</A></td></tr></table></TD> </TR> @@ -5213,7 +5213,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?40">ullrich-kilback.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?40">ullrich-kilback.com</A></td></tr></table></TD> </TR> @@ -5314,7 +5314,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?41">IP:10.225.235.123, MAC:00003C2A1764</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?41">IP:10.225.235.123, MAC:00003C2A1764</A></td></tr></table></TD> </TR> @@ -5415,7 +5415,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?42">crooks-collins.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?42">crooks-collins.com</A></td></tr></table></TD> </TR> @@ -5516,7 +5516,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?43">7315522562</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?43">7315522562</A></td></tr></table></TD> </TR> @@ -5617,7 +5617,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?44">kuhn-llc.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?44">kuhn-llc.com</A></td></tr></table></TD> </TR> @@ -5718,7 +5718,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?45">5473351513</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?45">5473351513</A></td></tr></table></TD> </TR> @@ -5819,7 +5819,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?46">walton@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?46">walton@example.com</A></td></tr></table></TD> </TR> @@ -5920,7 +5920,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?47">580124349433539</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?47">580124349433539</A></td></tr></table></TD> </TR> @@ -6021,7 +6021,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?48">nigel@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?48">nigel@example.com</A></td></tr></table></TD> </TR> @@ -6122,7 +6122,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?49">IP:10.189.193.93, MAC:000043D6F9E3</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?49">IP:10.189.193.93, MAC:000043D6F9E3</A></td></tr></table></TD> </TR> @@ -6223,7 +6223,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?50">sammy@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?50">sammy@example.com</A></td></tr></table></TD> </TR> @@ -6324,7 +6324,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?51">IP:10.44.211.87, MAC:00008BCF4552</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?51">IP:10.44.211.87, MAC:00008BCF4552</A></td></tr></table></TD> </TR> @@ -6425,7 +6425,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?52">hansen-kilback.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?52">hansen-kilback.com</A></td></tr></table></TD> </TR> @@ -6526,7 +6526,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?53">IP:10.116.203.5, MAC:00005AFAF158</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?53">IP:10.116.203.5, MAC:00005AFAF158</A></td></tr></table></TD> </TR> @@ -6627,7 +6627,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?54">klocko-inc.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?54">klocko-inc.com</A></td></tr></table></TD> </TR> @@ -6728,7 +6728,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?55">47925781188566</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?55">47925781188566</A></td></tr></table></TD> </TR> @@ -6829,7 +6829,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?56">ward-murphy-and-wisozk.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?56">ward-murphy-and-wisozk.com</A></td></tr></table></TD> </TR> @@ -6930,7 +6930,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?57">215984572910627</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?57">215984572910627</A></td></tr></table></TD> </TR> @@ -7031,7 +7031,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?58">linwood@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?58">linwood@example.com</A></td></tr></table></TD> </TR> @@ -7132,7 +7132,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?59">5055483796977</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?59">5055483796977</A></td></tr></table></TD> </TR> @@ -7233,7 +7233,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?60">esperanza@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?60">esperanza@example.com</A></td></tr></table></TD> </TR> @@ -7334,7 +7334,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?61">IP:10.178.209.2, MAC:00009245E1CE</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?61">IP:10.178.209.2, MAC:00009245E1CE</A></td></tr></table></TD> </TR> @@ -7435,7 +7435,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?62">branson@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?62">branson@example.com</A></td></tr></table></TD> </TR> @@ -7536,7 +7536,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?63">IP:10.86.8.116, MAC:00009D2D385F</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?63">IP:10.86.8.116, MAC:00009D2D385F</A></td></tr></table></TD> </TR> @@ -7637,7 +7637,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?64">okeefe-stracke.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?64">okeefe-stracke.com</A></td></tr></table></TD> </TR> @@ -7738,7 +7738,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?65">IP:10.166.5.138, MAC:000020A5C9AB</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?65">IP:10.166.5.138, MAC:000020A5C9AB</A></td></tr></table></TD> </TR> @@ -7839,7 +7839,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?66">murazik-padberg-and-dibbert.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?66">murazik-padberg-and-dibbert.com</A></td></tr></table></TD> </TR> @@ -7940,7 +7940,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?67">510207687452209</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?67">510207687452209</A></td></tr></table></TD> </TR> @@ -8041,7 +8041,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?68">rodriguez-llc.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?68">rodriguez-llc.com</A></td></tr></table></TD> </TR> @@ -8142,7 +8142,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?69">19732087174151</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?69">19732087174151</A></td></tr></table></TD> </TR> @@ -8243,7 +8243,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?70">victor@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?70">victor@example.com</A></td></tr></table></TD> </TR> @@ -8344,7 +8344,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?71">99158298078002</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?71">99158298078002</A></td></tr></table></TD> </TR> @@ -8445,7 +8445,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?72">ryleigh@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?72">ryleigh@example.com</A></td></tr></table></TD> </TR> @@ -8546,7 +8546,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?73">IP:10.223.20.110, MAC:0000B618A255</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?73">IP:10.223.20.110, MAC:0000B618A255</A></td></tr></table></TD> </TR> @@ -8647,7 +8647,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?74">citlalli@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?74">citlalli@example.com</A></td></tr></table></TD> </TR> @@ -8748,7 +8748,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?75">IP:10.181.162.31, MAC:0000A7F64E79</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?75">IP:10.181.162.31, MAC:0000A7F64E79</A></td></tr></table></TD> </TR> @@ -8849,7 +8849,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?76">gorczany-weimann.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?76">gorczany-weimann.com</A></td></tr></table></TD> </TR> @@ -8950,7 +8950,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?77">IP:10.30.204.50, MAC:000097EB747A</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?77">IP:10.30.204.50, MAC:000097EB747A</A></td></tr></table></TD> </TR> @@ -9051,7 +9051,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?78">ward-buckridge.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?78">ward-buckridge.com</A></td></tr></table></TD> </TR> @@ -9152,7 +9152,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?79">8935173249</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?79">8935173249</A></td></tr></table></TD> </TR> @@ -9253,7 +9253,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?80">treutel-llc.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?80">treutel-llc.com</A></td></tr></table></TD> </TR> @@ -9354,7 +9354,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?81">152553597965486</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?81">152553597965486</A></td></tr></table></TD> </TR> @@ -9455,7 +9455,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?82">lenora@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?82">lenora@example.com</A></td></tr></table></TD> </TR> @@ -9556,7 +9556,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?83">114180154577357</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?83">114180154577357</A></td></tr></table></TD> </TR> @@ -9657,7 +9657,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?84">nyasia@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?84">nyasia@example.com</A></td></tr></table></TD> </TR> @@ -9758,7 +9758,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?85">IP:10.171.182.118, MAC:00003EE1A6D7</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?85">IP:10.171.182.118, MAC:00003EE1A6D7</A></td></tr></table></TD> </TR> @@ -9859,7 +9859,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?86">alden@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?86">alden@example.com</A></td></tr></table></TD> </TR> @@ -9960,7 +9960,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?87">IP:10.79.94.0, MAC:00008A11465E</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?87">IP:10.79.94.0, MAC:00008A11465E</A></td></tr></table></TD> </TR> @@ -10061,7 +10061,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?88">baumbach-llc.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?88">baumbach-llc.com</A></td></tr></table></TD> </TR> @@ -10162,7 +10162,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?89">IP:10.74.128.210, MAC:00009E471138</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?89">IP:10.74.128.210, MAC:00009E471138</A></td></tr></table></TD> </TR> @@ -10263,7 +10263,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?90">kessler-larson-and-bauch.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?90">kessler-larson-and-bauch.com</A></td></tr></table></TD> </TR> @@ -10364,7 +10364,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?91">1535633738761521</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?91">1535633738761521</A></td></tr></table></TD> </TR> @@ -10465,7 +10465,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?92">moen-kovacek.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?92">moen-kovacek.com</A></td></tr></table></TD> </TR> @@ -10566,7 +10566,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?93">7091741436337</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?93">7091741436337</A></td></tr></table></TD> </TR> @@ -10667,7 +10667,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?94">sally@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?94">sally@example.com</A></td></tr></table></TD> </TR> @@ -10768,7 +10768,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?95">1076194311</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?95">1076194311</A></td></tr></table></TD> </TR> @@ -10869,7 +10869,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?96">drew@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?96">drew@example.com</A></td></tr></table></TD> </TR> @@ -10970,7 +10970,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?97">IP:10.72.141.97, MAC:000086A32C19</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?97">IP:10.72.141.97, MAC:000086A32C19</A></td></tr></table></TD> </TR> @@ -11071,7 +11071,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?98">nils@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?98">nils@example.com</A></td></tr></table></TD> </TR> @@ -11172,7 +11172,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?99">IP:10.229.201.34, MAC:0000494CF06C</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?99">IP:10.229.201.34, MAC:0000494CF06C</A></td></tr></table></TD> </TR> @@ -11273,7 +11273,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?100">marvin-and-sons.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?100">marvin-and-sons.com</A></td></tr></table></TD> </TR> diff --git a/FS-Test/share/output/search/cust_pkg.cgi/magic=bill:classnum=0:setup_ending=10%2F31%2F2015:pkgpart=5:pkgpart=2:order_by=pkgnum b/FS-Test/share/output/search/cust_pkg.cgi/magic=bill:classnum=0:setup_ending=10%2F31%2F2015:pkgpart=5:pkgpart=2:order_by=pkgnum index fc43d4200..8a748b993 100644 --- a/FS-Test/share/output/search/cust_pkg.cgi/magic=bill:classnum=0:setup_ending=10%2F31%2F2015:pkgpart=5:pkgpart=2:order_by=pkgnum +++ b/FS-Test/share/output/search/cust_pkg.cgi/magic=bill:classnum=0:setup_ending=10%2F31%2F2015:pkgpart=5:pkgpart=2:order_by=pkgnum @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -866,7 +866,7 @@ myMenu68.width = 256; ->Change these packages</A><BR><A HREF="http://localhost/freeside/misc/email-customers.html?table=cust_pkg&agent_virt_agentnum=&classnum=0&query=0&magic=bill&setup=0&setup=1446361199&pkgpart=5&pkgpart=2">Email a notice to these customers</A> +>Change these packages</A><BR><A HREF="http://localhost/freeside/misc/email-customers.html?table=cust_pkg&agent_virt_agentnum=&classnum=0&magic=bill&pkgpart=5&pkgpart=2&query=0&setup=0&setup=1446361199">Email a notice to these customers</A> <BR><BR> @@ -1259,7 +1259,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?2">berta@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?2">berta@example.com</A></td></tr></table></TD> </TR> @@ -1360,7 +1360,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?7">19671718037</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?7">19671718037</A></td></tr></table></TD> </TR> @@ -1461,7 +1461,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?21">402545251883238</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?21">402545251883238</A></td></tr></table></TD> </TR> @@ -1562,7 +1562,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?22">hilario@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?22">hilario@example.com</A></td></tr></table></TD> </TR> @@ -1663,7 +1663,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?23">5204979036</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?23">5204979036</A></td></tr></table></TD> </TR> @@ -1764,7 +1764,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?24">lennie@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?24">lennie@example.com</A></td></tr></table></TD> </TR> @@ -1865,7 +1865,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?26">travis@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?26">travis@example.com</A></td></tr></table></TD> </TR> @@ -1966,7 +1966,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?31">2103459718</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?31">2103459718</A></td></tr></table></TD> </TR> @@ -2067,7 +2067,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?35">4609716945803</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?35">4609716945803</A></td></tr></table></TD> </TR> @@ -2168,7 +2168,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?36">richmond@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?36">richmond@example.com</A></td></tr></table></TD> </TR> @@ -2269,7 +2269,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?43">7315522562</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?43">7315522562</A></td></tr></table></TD> </TR> @@ -2370,7 +2370,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?50">sammy@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?50">sammy@example.com</A></td></tr></table></TD> </TR> @@ -2471,7 +2471,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?55">47925781188566</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?55">47925781188566</A></td></tr></table></TD> </TR> @@ -2572,7 +2572,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?57">215984572910627</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?57">215984572910627</A></td></tr></table></TD> </TR> @@ -2673,7 +2673,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?58">linwood@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?58">linwood@example.com</A></td></tr></table></TD> </TR> @@ -2774,7 +2774,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?67">510207687452209</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?67">510207687452209</A></td></tr></table></TD> </TR> @@ -2875,7 +2875,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?71">99158298078002</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?71">99158298078002</A></td></tr></table></TD> </TR> @@ -2976,7 +2976,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?72">ryleigh@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?72">ryleigh@example.com</A></td></tr></table></TD> </TR> @@ -3077,7 +3077,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?74">citlalli@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?74">citlalli@example.com</A></td></tr></table></TD> </TR> @@ -3178,7 +3178,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?81">152553597965486</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?81">152553597965486</A></td></tr></table></TD> </TR> @@ -3279,7 +3279,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?82">lenora@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?82">lenora@example.com</A></td></tr></table></TD> </TR> @@ -3380,7 +3380,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?83">114180154577357</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?83">114180154577357</A></td></tr></table></TD> </TR> @@ -3481,7 +3481,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?84">nyasia@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?84">nyasia@example.com</A></td></tr></table></TD> </TR> @@ -3582,7 +3582,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?86">alden@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?86">alden@example.com</A></td></tr></table></TD> </TR> @@ -3683,7 +3683,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?93">7091741436337</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?93">7091741436337</A></td></tr></table></TD> </TR> @@ -3784,7 +3784,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?94">sally@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?94">sally@example.com</A></td></tr></table></TD> </TR> @@ -3885,7 +3885,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?98">nils@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?98">nils@example.com</A></td></tr></table></TD> </TR> @@ -3986,7 +3986,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?103">19242934458</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?103">19242934458</A></td></tr></table></TD> </TR> @@ -4087,7 +4087,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?107">6941312477183</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?107">6941312477183</A></td></tr></table></TD> </TR> @@ -4188,7 +4188,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?108">kolby@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?108">kolby@example.com</A></td></tr></table></TD> </TR> @@ -4289,7 +4289,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?110">donato@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?110">donato@example.com</A></td></tr></table></TD> </TR> @@ -4390,7 +4390,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?117">158607899401245</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?117">158607899401245</A></td></tr></table></TD> </TR> @@ -4491,7 +4491,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?118">hardy@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?118">hardy@example.com</A></td></tr></table></TD> </TR> @@ -4592,7 +4592,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?127">5260896063</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?127">5260896063</A></td></tr></table></TD> </TR> @@ -4693,7 +4693,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?134">hilbert@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?134">hilbert@example.com</A></td></tr></table></TD> </TR> @@ -4794,7 +4794,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?139">71877083088273</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?139">71877083088273</A></td></tr></table></TD> </TR> @@ -4895,7 +4895,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?143">95994707748468</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?143">95994707748468</A></td></tr></table></TD> </TR> @@ -4996,7 +4996,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?144">ebony@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?144">ebony@example.com</A></td></tr></table></TD> </TR> @@ -5097,7 +5097,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?146">edd@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?146">edd@example.com</A></td></tr></table></TD> </TR> @@ -5198,7 +5198,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?151">7511349049</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?151">7511349049</A></td></tr></table></TD> </TR> @@ -5299,7 +5299,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?153">0465059470</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?153">0465059470</A></td></tr></table></TD> </TR> @@ -5400,7 +5400,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?154">ettie@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?154">ettie@example.com</A></td></tr></table></TD> </TR> @@ -5501,7 +5501,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?155">261457560511658</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?155">261457560511658</A></td></tr></table></TD> </TR> @@ -5602,7 +5602,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?156">haley@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?156">haley@example.com</A></td></tr></table></TD> </TR> @@ -5703,7 +5703,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?165">1906003499937</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?165">1906003499937</A></td></tr></table></TD> </TR> @@ -5804,7 +5804,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?166">rodolfo@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?166">rodolfo@example.com</A></td></tr></table></TD> </TR> @@ -5905,7 +5905,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?170">anika@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?170">anika@example.com</A></td></tr></table></TD> </TR> @@ -6006,7 +6006,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?175">6741985321</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?175">6741985321</A></td></tr></table></TD> </TR> @@ -6107,7 +6107,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?191">078151255309299</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?191">078151255309299</A></td></tr></table></TD> </TR> @@ -6208,7 +6208,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?192">kaitlyn@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?192">kaitlyn@example.com</A></td></tr></table></TD> </TR> @@ -6309,7 +6309,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?194">marian@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?194">marian@example.com</A></td></tr></table></TD> </TR> @@ -6410,7 +6410,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?203">8632406717</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?203">8632406717</A></td></tr></table></TD> </TR> @@ -6511,7 +6511,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?204">kacey@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?204">kacey@example.com</A></td></tr></table></TD> </TR> @@ -6612,7 +6612,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?206">kyla@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?206">kyla@example.com</A></td></tr></table></TD> </TR> @@ -6713,7 +6713,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?213">2636239939</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?213">2636239939</A></td></tr></table></TD> </TR> @@ -6814,7 +6814,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?214">jacky@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?214">jacky@example.com</A></td></tr></table></TD> </TR> @@ -6915,7 +6915,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?218">horace@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?218">horace@example.com</A></td></tr></table></TD> </TR> @@ -7016,7 +7016,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?223">68981950057600</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?223">68981950057600</A></td></tr></table></TD> </TR> @@ -7117,7 +7117,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?225">31674614863771</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?225">31674614863771</A></td></tr></table></TD> </TR> @@ -7218,7 +7218,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?226">alexa@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?226">alexa@example.com</A></td></tr></table></TD> </TR> @@ -7319,7 +7319,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?237">10163759294554</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?237">10163759294554</A></td></tr></table></TD> </TR> @@ -7420,7 +7420,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?238">lexie@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?238">lexie@example.com</A></td></tr></table></TD> </TR> @@ -7521,7 +7521,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?242">cleo@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?242">cleo@example.com</A></td></tr></table></TD> </TR> @@ -7622,7 +7622,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?247">2749371736</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?247">2749371736</A></td></tr></table></TD> </TR> @@ -7723,7 +7723,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?251">70045317269958</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?251">70045317269958</A></td></tr></table></TD> </TR> @@ -7824,7 +7824,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?252">clinton@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?252">clinton@example.com</A></td></tr></table></TD> </TR> @@ -7925,7 +7925,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?259">106766405260980</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?259">106766405260980</A></td></tr></table></TD> </TR> @@ -8026,7 +8026,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?271">9519625792</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?271">9519625792</A></td></tr></table></TD> </TR> @@ -8127,7 +8127,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?273">16095013569</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?273">16095013569</A></td></tr></table></TD> </TR> @@ -8228,7 +8228,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?274">karen@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?274">karen@example.com</A></td></tr></table></TD> </TR> @@ -8329,7 +8329,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?275">1732869050</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?275">1732869050</A></td></tr></table></TD> </TR> @@ -8430,7 +8430,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?276">antwan@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?276">antwan@example.com</A></td></tr></table></TD> </TR> @@ -8531,7 +8531,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?278">mitchell@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?278">mitchell@example.com</A></td></tr></table></TD> </TR> @@ -8632,7 +8632,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?283">5866817423</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?283">5866817423</A></td></tr></table></TD> </TR> @@ -8733,7 +8733,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?285">3521080416</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?285">3521080416</A></td></tr></table></TD> </TR> @@ -8834,7 +8834,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?286">rebeca@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?286">rebeca@example.com</A></td></tr></table></TD> </TR> @@ -8935,7 +8935,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?287">183790150181541</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?287">183790150181541</A></td></tr></table></TD> </TR> @@ -9036,7 +9036,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?288">ibrahim@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?288">ibrahim@example.com</A></td></tr></table></TD> </TR> @@ -9137,7 +9137,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?290">jadon@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?290">jadon@example.com</A></td></tr></table></TD> </TR> @@ -9238,7 +9238,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?295">14991580189167</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?295">14991580189167</A></td></tr></table></TD> </TR> @@ -9339,7 +9339,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?299">2964457155392</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?299">2964457155392</A></td></tr></table></TD> </TR> @@ -9440,7 +9440,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?300">coby@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?300">coby@example.com</A></td></tr></table></TD> </TR> @@ -9541,7 +9541,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?307">4593519604</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?307">4593519604</A></td></tr></table></TD> </TR> @@ -9642,7 +9642,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?323">4989851645</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?323">4989851645</A></td></tr></table></TD> </TR> @@ -9743,7 +9743,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?324">stanton@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?324">stanton@example.com</A></td></tr></table></TD> </TR> @@ -9844,7 +9844,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?333">3337658056</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?333">3337658056</A></td></tr></table></TD> </TR> @@ -9945,7 +9945,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?334">clarabelle@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?334">clarabelle@example.com</A></td></tr></table></TD> </TR> @@ -10046,7 +10046,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?338">stan@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?338">stan@example.com</A></td></tr></table></TD> </TR> @@ -10147,7 +10147,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?345">0783009535773</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?345">0783009535773</A></td></tr></table></TD> </TR> @@ -10248,7 +10248,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?346">marc@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?346">marc@example.com</A></td></tr></table></TD> </TR> @@ -10349,7 +10349,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?347">1894866195856273</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?347">1894866195856273</A></td></tr></table></TD> </TR> @@ -10450,7 +10450,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?348">newell@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?348">newell@example.com</A></td></tr></table></TD> </TR> @@ -10551,7 +10551,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?355">15790441533145</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?355">15790441533145</A></td></tr></table></TD> </TR> @@ -10652,7 +10652,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?359">3724022714296</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?359">3724022714296</A></td></tr></table></TD> </TR> @@ -10753,7 +10753,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?360">therese@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?360">therese@example.com</A></td></tr></table></TD> </TR> @@ -10854,7 +10854,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?367">4942001551</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?367">4942001551</A></td></tr></table></TD> </TR> @@ -10955,7 +10955,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?374">maida@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?374">maida@example.com</A></td></tr></table></TD> </TR> @@ -11056,7 +11056,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?381">3911632965</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?381">3911632965</A></td></tr></table></TD> </TR> @@ -11157,7 +11157,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_acct.cgi?382">eldridge@example.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_acct:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?382">eldridge@example.com</A></td></tr></table></TD> </TR> @@ -11258,7 +11258,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?383">150342529271096</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?383">150342529271096</A></td></tr></table></TD> </TR> diff --git a/FS-Test/share/output/search/cust_pkg.cgi/magic=bill:custnum=135 b/FS-Test/share/output/search/cust_pkg.cgi/magic=bill:custnum=135 index 2ccc71f9d..7963b90dd 100644 --- a/FS-Test/share/output/search/cust_pkg.cgi/magic=bill:custnum=135 +++ b/FS-Test/share/output/search/cust_pkg.cgi/magic=bill:custnum=135 @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -1242,7 +1242,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?403">152300260278657</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?403">152300260278657</A></td></tr></table></TD> </TR> @@ -1343,7 +1343,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_broadband.cgi?401">IP:10.98.22.188, MAC:00007E436BF5</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_broadband:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?401">IP:10.98.22.188, MAC:00007E436BF5</A></td></tr></table></TD> </TR> @@ -1444,7 +1444,7 @@ myMenu68.width = 256; - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_domain.cgi?402">botsford-mueller.com</A></td></tr></table></TD> + <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_domain:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/cust_svc.cgi?402">botsford-mueller.com</A></td></tr></table></TD> </TR> diff --git a/FS-Test/share/output/search/cust_pkg.cgi/pkgnum b/FS-Test/share/output/search/cust_pkg.cgi/pkgnum deleted file mode 100644 index 495e8089a..000000000 --- a/FS-Test/share/output/search/cust_pkg.cgi/pkgnum +++ /dev/null @@ -1,11329 +0,0 @@ - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<HTML> - <HEAD> - <TITLE> - Package Search Results - </TITLE> - <!-- per RT, to prevent IE compatibility mode --> - <meta http-equiv="X-UA-Compatible" content="IE=edge" /> - <!-- The X-UA-Compatible <meta> tag above must be very early in <head> --> - <META HTTP-Equiv="Cache-Control" Content="no-cache"> - <META HTTP-Equiv="Pragma" Content="no-cache"> - <META HTTP-Equiv="Expires" Content="0"> - - <script type="text/javascript" src="http://localhost/freeside/elements/cssexpr.js"></script> - - - <script type="text/javascript" src="http://localhost/freeside/elements/xmenu.top.js"></script> - <link href="http://localhost/freeside/elements/xmenu.top.css" type="text/css" rel="stylesheet"> - - - <link href="http://localhost/freeside/elements/freeside.css" type="text/css" rel="stylesheet"> - <link href="http://localhost/freeside/elements/freeside-print.css" type="text/css" rel="stylesheet" media="print"> -<link href="http://localhost/freeside/elements/freeside-menu.css" type="text/css" rel="stylesheet"> - -<SCRIPT TYPE="text/javascript"> - - function about_freeside() { - overlib( OLiframeContent('http://localhost/freeside/docs/about.html', 300, 375, 'popup-0000000000-0000-000000000.000000', 0, 'auto' ), CAPTION, 'About', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '#7e0079', CGCOLOR, '#7e0079', FGCOLOR, '#f8f8f8', CLOSETEXT, 'Close'); - } - - webfxMenuImagePath = "http://localhost/freeside/images/"; - webfxMenuUseHover = 1; - webfxMenuShowTime = 300; - webfxMenuHideTime = 500; - - var myBar = new WebFXMenuBar; - - - myBar.add(new WebFXMenuButton('Billing Main', "http://localhost/freeside/", 'Billing start page' )); - - - myBar.add(new WebFXMenuButton('Ticketing Main', "http://localhost/freeside/rt/", 'Ticketing start page' )); - - - myBar.add(new WebFXMenuButton('New prospect', "http://localhost/freeside/edit/prospect_main.html", 'Add a new prospect' )); - - - myBar.add(new WebFXMenuButton('New customer', "http://localhost/freeside/edit/cust_main.cgi", 'Add a new customer' )); - - - var myMenu0 = new WebFXMenu; -myMenu0.emptyText = ''; -var myMenu1 = new WebFXMenu; -myMenu1.emptyText = ''; -myMenu1.add(new WebFXMenuItem("List prospects", "http://localhost/freeside/search/prospect_main.html", "" )); -myMenu1.add(new WebFXMenuItem("Advanced prospect reports", "http://localhost/freeside/search/report_prospect_main.html", "" )); -myMenu1.add(new WebFXMenuSeparator()); -myMenu1.add(new WebFXMenuItem("Prospect contacts", "http://localhost/freeside/search/report_contact.html?link=prospect_main", "" )); -myMenu1.width = 256; - -myMenu0.add(new WebFXMenuItem("Prospects", null, "Prospect reports", myMenu1 )); -var myMenu2 = new WebFXMenu; -myMenu2.emptyText = ''; -myMenu2.add(new WebFXMenuItem("List quotations", "http://localhost/freeside/search/quotation.html", "" )); -myMenu2.add(new WebFXMenuItem("Advanced quotation reports", "http://localhost/freeside/search/report_quotation.html", "" )); -myMenu2.width = 256; - -myMenu0.add(new WebFXMenuItem("Quotations", null, "Quotation reports", myMenu2 )); -var myMenu3 = new WebFXMenu; -myMenu3.emptyText = ''; -var myMenu4 = new WebFXMenu; -myMenu4.emptyText = ''; -myMenu4.add(new WebFXMenuItem("by customer number", "http://localhost/freeside/search/cust_main.cgi?browse=custnum", "" )); -myMenu4.add(new WebFXMenuItem("by last name", "http://localhost/freeside/search/cust_main.cgi?browse=last", "" )); -myMenu4.add(new WebFXMenuItem("by company name", "http://localhost/freeside/search/cust_main.cgi?browse=company", "" )); -myMenu4.add(new WebFXMenuItem("by active trouble tickets", "http://localhost/freeside/search/cust_main.cgi?browse=tickets", "" )); -myMenu4.width = 256; - -myMenu3.add(new WebFXMenuItem("List customers", null, "List customers", myMenu4 )); -myMenu3.add(new WebFXMenuItem("Zip code distribution", "http://localhost/freeside/search/report_cust_main-zip.html", "Zip codes by number of customers" )); -myMenu3.add(new WebFXMenuItem("Customer signup report", "http://localhost/freeside/graph/report_cust_signup.html", "New customer signups by date" )); -myMenu3.add(new WebFXMenuItem("Customer churn report", "http://localhost/freeside/graph/report_cust_churn.html", "New customers, suspensions, and cancellations summary" )); -myMenu3.add(new WebFXMenuItem("Signup date report", "http://localhost/freeside/graph/report_signupdate.html", "Signup date report (by date of signup)" )); -myMenu3.add(new WebFXMenuItem("Advanced customer reports", "http://localhost/freeside/search/report_cust_main.html", "by status, signup date, agent, etc." )); -myMenu3.add(new WebFXMenuSeparator()); -myMenu3.add(new WebFXMenuItem("Customer contacts", "http://localhost/freeside/search/report_contact.html?link=cust_main", "" )); -myMenu3.add(new WebFXMenuItem("Customer stored payment information", "http://localhost/freeside/search/report_cust_payby.html", "" )); -myMenu3.width = 256; - -myMenu0.add(new WebFXMenuItem("Customers", null, "Customer reports", myMenu3 )); -var myMenu5 = new WebFXMenu; -myMenu5.emptyText = ''; -var myMenu6 = new WebFXMenu; -myMenu6.emptyText = ''; -myMenu6.add(new WebFXMenuItem("All open invoices", "http://localhost/freeside/search/cust_bill.html?OPEN_date", "All invoices with an unpaid balance" )); -myMenu6.add(new WebFXMenuItem("15 day open invoices", "http://localhost/freeside/search/cust_bill.html?OPEN15_date", "Invoices 15 days or older with an unpaid balance" )); -myMenu6.add(new WebFXMenuItem("30 day open invoices", "http://localhost/freeside/search/cust_bill.html?OPEN30_date", "Invoices 30 days or older with an unpaid balance" )); -myMenu6.add(new WebFXMenuItem("60 day open invoices", "http://localhost/freeside/search/cust_bill.html?OPEN60_date", "Invoices 60 days or older with an unpaid balance" )); -myMenu6.add(new WebFXMenuItem("90 day open invoices", "http://localhost/freeside/search/cust_bill.html?OPEN90_date", "Invoices 90 days or older with an unpaid balance" )); -myMenu6.add(new WebFXMenuItem("120 day open invoices", "http://localhost/freeside/search/cust_bill.html?OPEN120_date", "Invoices 120 days or older with an unpaid balance" )); -myMenu6.width = 256; - -myMenu5.add(new WebFXMenuItem("Open invoices", null, "Open invoices", myMenu6 )); -myMenu5.add(new WebFXMenuItem("All invoices", "http://localhost/freeside/search/cust_bill.html?date", "List all invoices" )); -myMenu5.add(new WebFXMenuItem("Advanced invoice reports", "http://localhost/freeside/search/report_cust_bill.html", "by agent, date range, etc." )); -myMenu5.add(new WebFXMenuSeparator()); -myMenu5.add(new WebFXMenuItem("Line items", "http://localhost/freeside/search/report_cust_bill_pkg.html", "Individual line item detail" )); -myMenu5.add(new WebFXMenuItem("Voided invoices", "http://localhost/freeside/search/report_cust_bill_void.html", "Search for voided invoices" )); -myMenu5.width = 256; - -myMenu0.add(new WebFXMenuItem("Invoices", null, "Invoice reports", myMenu5 )); -var myMenu7 = new WebFXMenu; -myMenu7.emptyText = ''; -myMenu7.add(new WebFXMenuItem("Discount graph", "http://localhost/freeside/graph/report_cust_bill_pkg_discount.html", "Discount overview per month" )); -myMenu7.add(new WebFXMenuItem("Discount detail", "http://localhost/freeside/search/report_cust_bill_pkg_discount.html", "Discount report (by employee and/or date range)" )); -myMenu7.add(new WebFXMenuItem("Package discounts", "http://localhost/freeside/search/report_cust_pkg_discount.html", "Active/inactive discounts by package" )); -myMenu7.width = 256; - -myMenu0.add(new WebFXMenuItem("Discounts", null, "Discount reports", myMenu7 )); -var myMenu8 = new WebFXMenu; -myMenu8.emptyText = ''; -myMenu8.add(new WebFXMenuItem("Payments", "http://localhost/freeside/search/report_cust_pay.html", "Payment report (by type and/or date range)" )); -myMenu8.add(new WebFXMenuItem("Payment application detail", "http://localhost/freeside/search/report_cust_bill_pay_pkg.html", "Line item application detail" )); -myMenu8.add(new WebFXMenuItem("Pending Payments", "http://localhost/freeside/search/cust_pay_pending.html?magic=_date;statusNOT=done", "Pending real-time payments" )); -myMenu8.add(new WebFXMenuItem("Unapplied Payments", "http://localhost/freeside/search/report_cust_pay.html?unapplied=1", "Unapplied payment report (by type and/or date range)" )); -myMenu8.add(new WebFXMenuItem("Voided Payments", "http://localhost/freeside/search/report_cust_pay.html?void=1", "Voided payment report (by type and/or date range)" )); -myMenu8.add(new WebFXMenuItem("Unapplied Payment Aging", "http://localhost/freeside/search/report_unapplied_cust_pay.html", "Unapplied payment aging report" )); -myMenu8.width = 256; - -myMenu0.add(new WebFXMenuItem("Payments", null, "Payment reports", myMenu8 )); -var myMenu9 = new WebFXMenu; -myMenu9.emptyText = ''; -myMenu9.add(new WebFXMenuItem("Package definitions (by # active)", "http://localhost/freeside/browse/part_pkg.cgi?active=1", "Package definitions by number of active packages" )); -myMenu9.add(new WebFXMenuItem("Package costs", "http://localhost/freeside/graph/report_cust_pkg_cost.html", "Package setup and recurring costs graph" )); -myMenu9.add(new WebFXMenuSeparator()); -myMenu9.add(new WebFXMenuItem("Package churn", "http://localhost/freeside/graph/report_cust_pkg.html", "Orders, suspensions and cancellations summary graph" )); -myMenu9.add(new WebFXMenuSeparator()); -myMenu9.add(new WebFXMenuItem("All customer packages", "http://localhost/freeside/search/cust_pkg.cgi?pkgnum", "List all customer packages" )); -myMenu9.add(new WebFXMenuItem("Package summary", "http://localhost/freeside/search/cust_pkg_summary.html", "Show package sales summary" )); -myMenu9.add(new WebFXMenuItem("Suspended customer packages", "http://localhost/freeside/search/cust_pkg.cgi?magic=suspended", "List suspended packages" )); -myMenu9.add(new WebFXMenuItem("Suspension summary", "http://localhost/freeside/search/cust_pkg_susp.html", "Show suspension activity" )); -myMenu9.add(new WebFXMenuItem("Customer packages with unconfigured services", "http://localhost/freeside/search/cust_pkg.cgi?APKG_pkgnum", "List packages which have provisionable services" )); -myMenu9.add(new WebFXMenuItem("Advanced package reports", "http://localhost/freeside/search/report_cust_pkg.html", "by agent, date range, status, package definition" )); -myMenu9.width = 256; - -myMenu0.add(new WebFXMenuItem("Packages", null, "Package reports", myMenu9 )); -var myMenu10 = new WebFXMenu; -myMenu10.emptyText = ''; -myMenu10.add(new WebFXMenuItem("Service definitions", "http://localhost/freeside/browse/part_svc.cgi?orderby=active", "Service definitions by number of active packages" )); -myMenu10.add(new WebFXMenuSeparator()); -myMenu10.add(new WebFXMenuItem("Unprovisioned services", "http://localhost/freeside/search/report_unprovisioned_services.html", "Unprovisioned services" )); -myMenu10.add(new WebFXMenuSeparator()); -var myMenu11 = new WebFXMenu; -myMenu11.emptyText = ''; -myMenu11.add(new WebFXMenuItem("All accounts by Username", "http://localhost/freeside/search/svc_acct.cgi?magic=all;sortby=username", "" )); -myMenu11.add(new WebFXMenuItem("All accounts by UID", "http://localhost/freeside/search/svc_acct.cgi?magic=all;sortby=uid", "" )); -myMenu11.add(new WebFXMenuItem("All accounts with Time Remaining", "http://localhost/freeside/search/svc_acct.cgi?magic=all;sortby=seconds", "" )); -myMenu11.add(new WebFXMenuItem("All accounts by Last login", "http://localhost/freeside/search/svc_acct.cgi?magic=all;sortby=last_login", "" )); -myMenu11.add(new WebFXMenuItem("All accounts never logged in", "http://localhost/freeside/search/svc_acct.cgi?magic=nologin;sortby=svcnum", "" )); -myMenu11.add(new WebFXMenuItem("Advanced account reports", "http://localhost/freeside/search/report_svc_acct.html", "" )); -myMenu11.width = 256; - -myMenu10.add(new WebFXMenuItem("Accounts", null, "Access accounts and mailboxes", myMenu11 )); -var myMenu12 = new WebFXMenu; -myMenu12.emptyText = ''; -myMenu12.add(new WebFXMenuItem("All domains", "http://localhost/freeside/search/svc_domain.cgi?magic=all;sortby=domain", "" )); -myMenu12.width = 256; - -myMenu10.add(new WebFXMenuItem("Domains", null, "Domains", myMenu12 )); -var myMenu13 = new WebFXMenu; -myMenu13.emptyText = ''; -myMenu13.add(new WebFXMenuItem("All certificates", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_cert;magic=all;sortby=svcnum", "" )); -myMenu13.width = 256; - -myMenu10.add(new WebFXMenuItem("Certificates", null, "Example services", myMenu13 )); -var myMenu14 = new WebFXMenu; -myMenu14.emptyText = ''; -myMenu14.add(new WebFXMenuItem("All mail forwards", "http://localhost/freeside/search/svc_forward.cgi?magic=all;sortby=svcnum", "" )); -myMenu14.width = 256; - -myMenu10.add(new WebFXMenuItem("Mail forwards", null, "Mail forwards", myMenu14 )); -var myMenu15 = new WebFXMenu; -myMenu15.emptyText = ''; -myMenu15.add(new WebFXMenuItem("All mailing lists", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_mailinglist;magic=all;sortby=svcnum", "" )); -myMenu15.width = 256; - -myMenu10.add(new WebFXMenuItem("Mailing lists", null, "Mailing lists", myMenu15 )); -var myMenu16 = new WebFXMenu; -myMenu16.emptyText = ''; -myMenu16.add(new WebFXMenuItem("All virtual hosting services", "http://localhost/freeside/search/svc_www.cgi?magic=all;sortby=svcnum", "" )); -myMenu16.width = 256; - -myMenu10.add(new WebFXMenuItem("Virtual hosting services", null, "Virtual hosting services", myMenu16 )); -var myMenu17 = new WebFXMenu; -myMenu17.emptyText = ''; -myMenu17.add(new WebFXMenuItem("All wireless broadband services", "http://localhost/freeside/search/svc_broadband.cgi?magic=all;sortby=svcnum", "" )); -myMenu17.add(new WebFXMenuItem("Advanced wireless broadband reports", "http://localhost/freeside/search/report_svc_broadband.html", "" )); -myMenu17.width = 256; - -myMenu10.add(new WebFXMenuItem("Wireless broadband services", null, "Fixed wireless broadband services", myMenu17 )); -var myMenu18 = new WebFXMenu; -myMenu18.emptyText = ''; -myMenu18.add(new WebFXMenuItem("All cable subscribers by Service", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_cable;magic=all;sortby=svcnum", "" )); -myMenu18.add(new WebFXMenuItem("All cable subscribers by Serial number", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_cable;magic=all;sortby=serialnum", "" )); -myMenu18.add(new WebFXMenuItem("All cable subscribers by MAC address", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_cable;magic=all;sortby=mac_addr", "" )); -myMenu18.width = 256; - -myMenu10.add(new WebFXMenuItem("Cable Subscribers", null, "Cable Subscribers", myMenu18 )); -var myMenu19 = new WebFXMenu; -myMenu19.emptyText = ''; -myMenu19.add(new WebFXMenuItem("All DSLs", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_dsl;magic=all;sortby=phonenum", "" )); -myMenu19.add(new WebFXMenuItem("Qualifications", "http://localhost/freeside/search/qual.cgi", "" )); -myMenu19.width = 256; - -myMenu10.add(new WebFXMenuItem("DSLs", null, "DSLs", myMenu19 )); -var myMenu20 = new WebFXMenu; -myMenu20.emptyText = ''; -myMenu20.add(new WebFXMenuItem("All dish services", "http://localhost/freeside/search/svc_dish.cgi?magic=all;sortby=svcnum", "" )); -myMenu20.width = 256; - -myMenu10.add(new WebFXMenuItem("Dish services", null, "Dish services", myMenu20 )); -var myMenu21 = new WebFXMenu; -myMenu21.emptyText = ''; -myMenu21.add(new WebFXMenuItem("All hardware", "http://localhost/freeside/search/svc_hardware.cgi?magic=all;sortby=svcnum", "" )); -myMenu21.add(new WebFXMenuItem("Advanced hardware reports", "http://localhost/freeside/search/report_svc_hardware.html", "" )); -myMenu21.width = 256; - -myMenu10.add(new WebFXMenuItem("Hardware", null, "Hardware", myMenu21 )); -var myMenu22 = new WebFXMenu; -myMenu22.emptyText = ''; -myMenu22.add(new WebFXMenuItem("All phone numbers", "http://localhost/freeside/search/svc_phone.cgi?magic=all;sortby=phonenum", "" )); -myMenu22.add(new WebFXMenuItem("Phone numbers' total usage by time period", "http://localhost/freeside/search/report_svc_phone_usage.html", "Total usage (minutes, and amount billed) for the specified time period, per phone number." )); -myMenu22.add(new WebFXMenuItem("Phone numbers by state", "http://localhost/freeside/search/phone_state.html", "Current or historical phone services broken down by state." )); -myMenu22.add(new WebFXMenuItem("Advanced phone number reports", "http://localhost/freeside/search/report_svc_phone.html", "" )); -myMenu22.add(new WebFXMenuItem("Phone number (DID) availability", "http://localhost/freeside/search/report_phone_avail.html", "" )); -myMenu22.add(new WebFXMenuItem("Inventory/Provisioning Status", "http://localhost/freeside/search/phone_inventory_provisioned.html", "" )); -myMenu22.width = 256; - -myMenu10.add(new WebFXMenuItem("Phone numbers", null, "Phone numbers", myMenu22 )); -var myMenu23 = new WebFXMenu; -myMenu23.emptyText = ''; -myMenu23.add(new WebFXMenuItem("All PBXs", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_pbx;magic=all;sortby=svcnum", "" )); -myMenu23.width = 256; - -myMenu10.add(new WebFXMenuItem("PBXs", null, "PBXs", myMenu23 )); -var myMenu24 = new WebFXMenu; -myMenu24.emptyText = ''; -myMenu24.add(new WebFXMenuItem("All circuits", "http://localhost/freeside/search/svc_circuit.cgi?magic=all;sortby=svcnum", "" )); -myMenu24.width = 256; - -myMenu10.add(new WebFXMenuItem("Circuits", null, "Voice and data circuit services", myMenu24 )); -var myMenu25 = new WebFXMenu; -myMenu25.emptyText = ''; -myMenu25.add(new WebFXMenuItem("All ports", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_port;magic=all;sortby=serviceid", "" )); -myMenu25.width = 256; - -myMenu10.add(new WebFXMenuItem("Ports", null, "Ports", myMenu25 )); -var myMenu26 = new WebFXMenu; -myMenu26.emptyText = ''; -myMenu26.add(new WebFXMenuItem("All alarm services", "http://localhost/freeside/search/cust_svc.html?svcdb=svc_alarm;magic=all;sortby=acctnum", "" )); -myMenu26.width = 256; - -myMenu10.add(new WebFXMenuItem("Alarm services", null, "Alarm services", myMenu26 )); -var myMenu27 = new WebFXMenu; -myMenu27.emptyText = ''; -myMenu27.add(new WebFXMenuItem("All external services", "http://localhost/freeside/search/svc_external.cgi?magic=all;sortby=id", "" )); -myMenu27.width = 256; - -myMenu10.add(new WebFXMenuItem("External services", null, "External services", myMenu27 )); -myMenu10.width = 256; - -myMenu0.add(new WebFXMenuItem("Services", null, "Services reports", myMenu10 )); -var myMenu28 = new WebFXMenu; -myMenu28.emptyText = ''; -myMenu28.add(new WebFXMenuItem("Inventory by agent", "http://localhost/freeside/search/report_agent_inventory.html", "" )); -myMenu28.add(new WebFXMenuItem("Inventory activity", "http://localhost/freeside/search/report_h_inventory_item.html", "" )); -myMenu28.width = 256; - -myMenu0.add(new WebFXMenuItem("Inventory", null, "Inventory reports", myMenu28 )); -var myMenu29 = new WebFXMenu; -myMenu29.emptyText = ''; -myMenu29.add(new WebFXMenuItem("RADIUS sessions", "http://localhost/freeside/search/sqlradius.html", "" )); -myMenu29.add(new WebFXMenuItem("RADIUS data usage", "http://localhost/freeside/search/report_sqlradius_usage.html", "" )); -myMenu29.add(new WebFXMenuItem("Call Detail Records (CDRs)", "http://localhost/freeside/search/report_cdr.html", "" )); -myMenu29.add(new WebFXMenuItem("Unrateable CDRs", "http://localhost/freeside/search/cdr.html?freesidestatus=failed;cdrbatchnum=_ALL_", "" )); -myMenu29.width = 256; - -myMenu0.add(new WebFXMenuItem("Usage", null, "Usage reports", myMenu29 )); -var myMenu30 = new WebFXMenu; -myMenu30.emptyText = ''; -var myMenu31 = new WebFXMenu; -myMenu31.emptyText = ''; -myMenu31.add(new WebFXMenuItem("Tickets per day per Queue", "http://localhost/freeside/rt/RTx/Statistics/CallsQueueDay", "View the number of tickets created, resolved or deleted in a specific Queue, over the requested period of days" )); -myMenu31.add(new WebFXMenuItem("Ticket status by Queue", "http://localhost/freeside/rt/RTx/Statistics/OpenStalled", "View numbers of new, open and stalled tickets in a selected Queue" )); -myMenu31.add(new WebFXMenuItem("Tickets per day (multiple Queues)", "http://localhost/freeside/rt/RTx/Statistics/CallsMultiQueue", "View tickets created, resolved or deleted on in one or more Queues over a specified time period" )); -myMenu31.add(new WebFXMenuItem("Tickets per Day of Week", "http://localhost/freeside/rt/RTx/Statistics/DayOfWeek", "View trends showing when tickets are created, resolved or deleted" )); -myMenu31.add(new WebFXMenuItem("Time to resolve", "http://localhost/freeside/rt/RTx/Statistics/Resolution", "View how long tickets take to be resolved by Queue" )); -myMenu31.add(new WebFXMenuItem("Time to resolve (scatter graph)", "http://localhost/freeside/rt/RTx/Statistics/TimeToResolve", "View a detailed scatter graph of time to resolve tickets by Queue" )); -myMenu31.width = 256; - -myMenu30.add(new WebFXMenuItem("Statistics", null, "", myMenu31 )); -myMenu30.add(new WebFXMenuSeparator()); -myMenu30.add(new WebFXMenuItem("Advanced ticket reports", "http://localhost/freeside/rt/Search/Build.html?NewQuery=1", "List tickets by any criteria" )); -myMenu30.width = 256; - -myMenu0.add(new WebFXMenuItem("Tickets", null, "Ticket reports", myMenu30 )); -var myMenu32 = new WebFXMenu; -myMenu32.emptyText = ''; -var myMenu33 = new WebFXMenu; -myMenu33.emptyText = ''; -myMenu33.add(new WebFXMenuItem("Sales, Credits and Receipts", "http://localhost/freeside/graph/report_money_time.html", "Sales, credits and receipts summary graph" )); -myMenu33.add(new WebFXMenuItem("Daily Sales, Credits and Receipts", "http://localhost/freeside/graph/report_money_time_daily.html", "Sales, credits and receipts (broken down by day) summary graph" )); -myMenu33.add(new WebFXMenuItem("Sales Report", "http://localhost/freeside/graph/report_cust_bill_pkg.html", "Sales report and graph (by agent, package class and/or date range)" )); -myMenu33.add(new WebFXMenuItem("Rated Call Sales Report", "http://localhost/freeside/graph/report_cust_bill_pkg_detail.html", "Sales report and graph (by agent, package class, usage class and/or date range)" )); -myMenu33.add(new WebFXMenuItem("Sales with Advertising Source", "http://localhost/freeside/search/report_cust_bill_pkg_referral.html", "" )); -myMenu33.width = 256; - -myMenu32.add(new WebFXMenuItem("Sales", null, "Sales reports", myMenu33 )); -var myMenu34 = new WebFXMenu; -myMenu34.emptyText = ''; -myMenu34.add(new WebFXMenuItem("Agent", "http://localhost/freeside/search/report_agent_commission.html", "" )); -myMenu34.add(new WebFXMenuItem("Agent per package", "http://localhost/freeside/search/report_agent_commission_pkg.html", "" )); -myMenu34.add(new WebFXMenuItem("Sales Person", "http://localhost/freeside/search/report_sales_commission.html", "" )); -myMenu34.add(new WebFXMenuItem("Sales Person per package", "http://localhost/freeside/search/report_sales_commission_pkg.html", "" )); -myMenu34.add(new WebFXMenuItem("Employee", "http://localhost/freeside/search/report_employee_commission.html", "" )); -myMenu34.width = 256; - -myMenu32.add(new WebFXMenuItem("Commissions", null, "Commission reports", myMenu34 )); -var myMenu35 = new WebFXMenu; -myMenu35.emptyText = ''; -myMenu35.add(new WebFXMenuItem("Credit Report", "http://localhost/freeside/search/report_cust_credit.html", "Credit report (by employee and/or date range)" )); -myMenu35.add(new WebFXMenuItem("Credit package source detail", "http://localhost/freeside/search/report_cust_credit_source_bill_pkg.html", "Line-item detail for triggered package credits" )); -myMenu35.add(new WebFXMenuItem("Credit application detail", "http://localhost/freeside/search/report_cust_credit_bill_pkg.html", "Line item application detail" )); -myMenu35.add(new WebFXMenuItem("Unapplied Credits", "http://localhost/freeside/search/report_cust_credit.html?unapplied=1", "Unapplied credit report (by type and/or date range)" )); -myMenu35.add(new WebFXMenuItem("Voided Credits", "http://localhost/freeside/search/report_cust_credit_void.html", "Voided credit report (by employee and/or date range)" )); -myMenu35.width = 256; - -myMenu32.add(new WebFXMenuItem("Credits", null, "Credit reports", myMenu35 )); -var myMenu36 = new WebFXMenu; -myMenu36.emptyText = ''; -myMenu36.add(new WebFXMenuItem("Refund Report", "http://localhost/freeside/search/report_cust_refund.html", "Refund report (by type and/or date range)" )); -myMenu36.add(new WebFXMenuItem("Unapplied Refunds", "http://localhost/freeside/search/report_cust_refund.html?unapplied=1", "Unapplied refund report (by type and/or date range)" )); -myMenu36.width = 256; - -myMenu32.add(new WebFXMenuItem("Refunds", null, "Refund reports", myMenu36 )); -myMenu32.add(new WebFXMenuItem("A/R Aging", "http://localhost/freeside/search/report_receivables.html", "Accounts Receivable Aging report" )); -myMenu32.add(new WebFXMenuItem("Prepaid Income", "http://localhost/freeside/search/report_prepaid_income.html", "Prepaid income (unearned revenue) report" )); -myMenu32.add(new WebFXMenuItem("Tax Liability", "http://localhost/freeside/search/report_tax.html", "Tax liability report (internal tax data)" )); -myMenu32.add(new WebFXMenuItem("E911 Fee Summary", "http://localhost/freeside/search/report_e911.html", "E911 fee summary" )); -myMenu32.add(new WebFXMenuItem("Customer Accounting Summary", "http://localhost/freeside/search/report_customer_accounting_summary.html", "Customer accounting summary report" )); -myMenu32.width = 256; - -myMenu0.add(new WebFXMenuItem("Financial (Receivables)", null, "Financial reports (Receivables)", myMenu32 )); -var myMenu37 = new WebFXMenu; -myMenu37.emptyText = ''; -myMenu37.add(new WebFXMenuItem("Payables summary", "http://localhost/freeside/search/report_vend_main.html", "Payables summary by vendor" )); -myMenu37.add(new WebFXMenuItem("Payables detail", "http://localhost/freeside/search/report_vend_bill.html", "" )); -myMenu37.width = 256; - -myMenu0.add(new WebFXMenuItem("Financial (Payables)", null, "Financial reports (Payables)", myMenu37 )); -var myMenu38 = new WebFXMenu; -myMenu38.emptyText = ''; -var myMenu39 = new WebFXMenu; -myMenu39.emptyText = ''; -myMenu39.add(new WebFXMenuItem("All billing events", "http://localhost/freeside/search/report_cust_event.html", "All billing events for a date range" )); -myMenu39.add(new WebFXMenuItem("Billing event errors", "http://localhost/freeside/search/report_cust_event.html?failed=1", "Failed credit cards, processor or printer problems, etc." )); -myMenu39.width = 256; - -myMenu38.add(new WebFXMenuItem("Billing events", null, "Billing events", myMenu39 )); -myMenu38.add(new WebFXMenuItem("Credit limit incidents", "http://localhost/freeside/search/report_cust_main_credit_limit.html", "" )); -myMenu38.add(new WebFXMenuItem("Employee activity", "http://localhost/freeside/search/report_employee_audit.html", "" )); -myMenu38.add(new WebFXMenuItem("System log", "http://localhost/freeside/search/log.html", "View system events and debugging information." )); -myMenu38.add(new WebFXMenuItem("Outgoing messages", "http://localhost/freeside/search/cust_msg.html", "View outgoing message log" )); -myMenu38.width = 256; - -myMenu0.add(new WebFXMenuItem("Logs", null, "System and email logs", myMenu38 )); -myMenu0.width = 256; - - myBar.add(new WebFXMenuButton('Reports', null, 'Lists, reporting and graphing', myMenu0 )); - - - var myMenu40 = new WebFXMenu; -myMenu40.emptyText = ''; -var myMenu41 = new WebFXMenu; -myMenu41.emptyText = ''; -myMenu41.add(new WebFXMenuItem("Appointments", "http://localhost/freeside/rt/Search/Schedule.html?LengthMin=0", "View appointment schedule" )); -myMenu41.add(new WebFXMenuItem("Attachments", "http://localhost/freeside/browse/cust_attachment.html", "View customer attachments" )); -myMenu41.add(new WebFXMenuItem("Customer email settings", "http://localhost/freeside/misc/manage_cust_email.html", "" )); -myMenu41.width = 256; - -myMenu40.add(new WebFXMenuItem("Customers", null, "Customer tools", myMenu41 )); -var myMenu42 = new WebFXMenu; -myMenu42.emptyText = ''; -myMenu42.add(new WebFXMenuItem("Quick payment entry", "http://localhost/freeside/misc/batch-cust_pay.html", "Enter multiple payments in a batch" )); -myMenu42.add(new WebFXMenuItem("Download invoice batches", "http://localhost/freeside/search/bill_batch.cgi", "" )); -myMenu42.width = 256; - -myMenu40.add(new WebFXMenuItem("Billing", null, "Payment and invoice tools", myMenu42 )); -var myMenu43 = new WebFXMenu; -myMenu43.emptyText = ''; -var myMenu44 = new WebFXMenu; -myMenu44.emptyText = ''; -myMenu44.add(new WebFXMenuItem("Overview", "http://localhost/freeside/rt/Articles/index.html", "" )); -myMenu44.add(new WebFXMenuItem("Search", "http://localhost/freeside/rt/Articles/Article/Search.html", "" )); -myMenu44.add(new WebFXMenuItem("Topics", "http://localhost/freeside/rt/Articles/Topics.html", "" )); -myMenu44.width = 256; - -myMenu43.add(new WebFXMenuItem("Articles", null, "", myMenu44 )); -myMenu43.add(new WebFXMenuItem("My Day", "http://localhost/freeside/rt/Tools/MyDay.html", "" )); -myMenu43.add(new WebFXMenuItem("My Reminders", "http://localhost/freeside/rt/Tools/MyReminders.html", "" )); -myMenu43.add(new WebFXMenuItem("Offline", "http://localhost/freeside/rt/Tools/Offline.html", "" )); -myMenu43.add(new WebFXMenuItem("Approval", "http://localhost/freeside/rt/Approvals/", "" )); -myMenu43.width = 256; - -myMenu40.add(new WebFXMenuItem("Ticketing", null, "Ticketing tools", myMenu43 )); -var myMenu45 = new WebFXMenu; -myMenu45.emptyText = ''; -myMenu45.add(new WebFXMenuItem("Bulk DID Orders", "http://localhost/freeside/browse/did_order.html", "View/manage bulk DID orders" )); -myMenu45.add(new WebFXMenuItem("Business card scan", "http://localhost/freeside/edit/prospect_main-upload.html", "" )); -myMenu45.width = 256; - -myMenu40.add(new WebFXMenuItem("Miscellaneous", null, "", myMenu45 )); -var myMenu46 = new WebFXMenu; -myMenu46.emptyText = ''; -myMenu46.add(new WebFXMenuItem("Customers", "http://localhost/freeside/misc/cust_main-import.cgi", "" )); -myMenu46.add(new WebFXMenuItem("Package definitions", "http://localhost/freeside/misc/part_pkg-import.html", "" )); -myMenu46.add(new WebFXMenuItem("Customer packages", "http://localhost/freeside/misc/cust_pkg-import.html", "" )); -myMenu46.add(new WebFXMenuItem("Customer comments", "http://localhost/freeside/misc/cust_main_note-import.html", "" )); -myMenu46.add(new WebFXMenuItem("One-time charges", "http://localhost/freeside/misc/cust_main-import_charges.cgi", "" )); -myMenu46.add(new WebFXMenuItem("Payments", "http://localhost/freeside/misc/cust_pay-import.cgi", "" )); -myMenu46.add(new WebFXMenuItem("Credits", "http://localhost/freeside/misc/cust_credit-import.html", "" )); -myMenu46.add(new WebFXMenuItem("Phone numbers (DIDs)", "http://localhost/freeside/misc/phone_avail-import.html", "" )); -myMenu46.add(new WebFXMenuItem("Call Detail Records (CDRs)", "http://localhost/freeside/misc/cdr-import.html", "" )); -myMenu46.width = 256; - -myMenu40.add(new WebFXMenuItem("Importing", null, "Import tools", myMenu46 )); -var myMenu47 = new WebFXMenu; -myMenu47.emptyText = ''; -myMenu47.add(new WebFXMenuItem("Status", "http://localhost/freeside/view/Status.html", "System status" )); -myMenu47.add(new WebFXMenuItem("Job Queue", "http://localhost/freeside/search/queue.html", "View pending job queue" )); -myMenu47.width = 256; - -myMenu40.add(new WebFXMenuItem("System", null, "System tools", myMenu47 )); -myMenu40.width = 256; - - myBar.add(new WebFXMenuButton('Tools', null, 'Tools', myMenu40 )); - - - var myMenu48 = new WebFXMenu; -myMenu48.emptyText = ''; -myMenu48.add(new WebFXMenuItem("Settings", "http://localhost/freeside/config/config-view.cgi", "" )); -myMenu48.add(new WebFXMenuSeparator()); -var myMenu49 = new WebFXMenu; -myMenu49.emptyText = ''; -myMenu49.add(new WebFXMenuItem("Agent types", "http://localhost/freeside/browse/agent_type.cgi", "Agent types define groups of package definitions that you can then assign to particular agents" )); -myMenu49.add(new WebFXMenuItem("Agents", "http://localhost/freeside/browse/agent.cgi", "Agents are resellers of your service. Agents may be limited to a subset of your full offerings (via their type)" )); -myMenu49.add(new WebFXMenuItem("Agent payment gateways", "http://localhost/freeside/browse/payment_gateway.html", "Credit card and electronic check processors for agent overrides" )); -myMenu49.width = 256; - -myMenu48.add(new WebFXMenuItem("Companies", null, "", myMenu49 )); -var myMenu50 = new WebFXMenu; -myMenu50.emptyText = ''; -myMenu50.add(new WebFXMenuItem("Sales People", "http://localhost/freeside/browse/sales.html", "Sales people bring in new business." )); -myMenu50.width = 256; - -myMenu48.add(new WebFXMenuItem("Sales People", null, "", myMenu50 )); -var myMenu51 = new WebFXMenu; -myMenu51.emptyText = ''; -myMenu51.add(new WebFXMenuItem("Employees", "http://localhost/freeside/browse/access_user.html", "Setup internal users" )); -myMenu51.add(new WebFXMenuItem("Employee groups", "http://localhost/freeside/browse/access_group.html", "Employee groups allow you to control access to the backend" )); -myMenu51.add(new WebFXMenuItem("Installer availability", "http://localhost/freeside/browse/sched_item.html", "Installer availability" )); -myMenu51.width = 256; - -myMenu48.add(new WebFXMenuItem("Employees", null, "", myMenu51 )); -myMenu48.add(new WebFXMenuSeparator()); -var myMenu52 = new WebFXMenu; -myMenu52.emptyText = ''; -myMenu52.add(new WebFXMenuItem("Customer tags", "http://localhost/freeside/browse/part_tag.html", "" )); -myMenu52.add(new WebFXMenuItem("Customer classes", "http://localhost/freeside/browse/cust_class.html", "Customer classes define groups of customers for reporting." )); -myMenu52.add(new WebFXMenuItem("Customer categories", "http://localhost/freeside/browse/cust_category.html", "Customer categories define groups of customer classes." )); -myMenu52.add(new WebFXMenuSeparator()); -myMenu52.add(new WebFXMenuItem("Contact types", "http://localhost/freeside/browse/contact_class.html", "" )); -myMenu52.width = 256; - -myMenu48.add(new WebFXMenuItem("Customers", null, "", myMenu52 )); -var myMenu53 = new WebFXMenu; -myMenu53.emptyText = ''; -myMenu53.add(new WebFXMenuItem("Package definitions", "http://localhost/freeside/browse/part_pkg.cgi", "One or more services are grouped together into a package and given pricing information. Customers purchase packages, not services" )); -myMenu53.add(new WebFXMenuItem("Package classes", "http://localhost/freeside/browse/pkg_class.html", "Package classes define groups of packages, for taxation, ordering convenience and reporting." )); -myMenu53.add(new WebFXMenuItem("Package categories", "http://localhost/freeside/browse/pkg_category.html", "Package categories define groups of package classes, for invoice sections." )); -myMenu53.add(new WebFXMenuItem("Package report classes", "http://localhost/freeside/browse/part_pkg_report_option.html", "Package classes define optional groups of packages for reporting only." )); -myMenu53.add(new WebFXMenuItem("Fees", "http://localhost/freeside/browse/part_fee.html", "" )); -myMenu53.add(new WebFXMenuItem("Discounts", "http://localhost/freeside/browse/discount.html", "" )); -myMenu53.add(new WebFXMenuItem("Discount classes", "http://localhost/freeside/browse/discount_class.html", "" )); -var myMenu54 = new WebFXMenu; -myMenu54.emptyText = ''; -myMenu54.add(new WebFXMenuItem("Cancel reasons", "http://localhost/freeside/browse/reason.html?class=C", "Cancel reasons explain why a service was cancelled." )); -myMenu54.add(new WebFXMenuItem("Cancel reason types", "http://localhost/freeside/browse/reason_type.html?class=C", "Cancel reason types define groups of reasons." )); -myMenu54.add(new WebFXMenuItem("Suspend reasons", "http://localhost/freeside/browse/reason.html?class=S", "Suspend reasons explain why a service was suspended." )); -myMenu54.add(new WebFXMenuItem("Suspend reason types", "http://localhost/freeside/browse/reason_type.html?class=S", "Suspend reason types define groups of reasons." )); -myMenu54.width = 256; - -myMenu53.add(new WebFXMenuItem("Cancel/Suspend Reasons", null, "", myMenu54 )); -myMenu53.width = 256; - -myMenu48.add(new WebFXMenuItem("Packages", null, "", myMenu53 )); -var myMenu55 = new WebFXMenu; -myMenu55.emptyText = ''; -myMenu55.add(new WebFXMenuItem("Service definitions", "http://localhost/freeside/browse/part_svc.cgi", "Services are items you offer to your customers" )); -myMenu55.add(new WebFXMenuItem("Service classes", "http://localhost/freeside/browse/part_svc_class.html", "Services classes are user-defined, informational types for services" )); -myMenu55.add(new WebFXMenuItem("Service dependencies", "http://localhost/freeside/browse/part_svc_link.html", "Services depencies define rules between service definitions" )); -myMenu55.add(new WebFXMenuItem("Provisioning exports", "http://localhost/freeside/browse/part_export.cgi", "Provisioning services to external machines, databases and APIs" )); -var myMenu56 = new WebFXMenu; -myMenu56.emptyText = ''; -myMenu56.add(new WebFXMenuItem("Access numbers", "http://localhost/freeside/browse/svc_acct_pop.cgi", "Points of Presence" )); -myMenu56.width = 256; - -myMenu55.add(new WebFXMenuItem("Dialup", null, "", myMenu56 )); -var myMenu57 = new WebFXMenu; -myMenu57.emptyText = ''; -myMenu57.add(new WebFXMenuItem("Towers", "http://localhost/freeside/browse/tower.html", "Towers and sectors" )); -myMenu57.add(new WebFXMenuItem("Routers", "http://localhost/freeside/browse/router.cgi", "Broadband access routers" )); -myMenu57.add(new WebFXMenuItem("Address blocks", "http://localhost/freeside/browse/addr_block.cgi", "Manage address blocks and block assignments to broadband routers" )); -myMenu57.add(new WebFXMenuItem("Address ranges", "http://localhost/freeside/browse/addr_range.html", "Designate special address ranges" )); -myMenu57.width = 256; - -myMenu55.add(new WebFXMenuItem("Wireless broadband", null, "", myMenu57 )); -var myMenu58 = new WebFXMenu; -myMenu58.emptyText = ''; -myMenu58.add(new WebFXMenuItem("View/Edit phone device types", "http://localhost/freeside/browse/part_device.html", "Phone device types" )); -myMenu58.add(new WebFXMenuItem("View/Edit bulk DID vendors", "http://localhost/freeside/browse/did_vendor.html", "Bulk DID vendors" )); -myMenu58.add(new WebFXMenuItem("View/Edit Carriers", "http://localhost/freeside/browse/cdr_carrier.html", "Carriers" )); -myMenu58.width = 256; - -myMenu55.add(new WebFXMenuItem("Phone", null, "", myMenu58 )); -var myMenu59 = new WebFXMenu; -myMenu59.emptyText = ''; -myMenu59.add(new WebFXMenuItem("RADIUS Groups", "http://localhost/freeside/browse/radius_group.html", "Manage RADIUS groups" )); -myMenu59.add(new WebFXMenuItem("RADIUS Clients", "http://localhost/freeside/browse/nas.html", "Manage RADIUS clients" )); -myMenu59.width = 256; - -myMenu55.add(new WebFXMenuItem("RADIUS", null, "", myMenu59 )); -var myMenu60 = new WebFXMenu; -myMenu60.emptyText = ''; -myMenu60.add(new WebFXMenuItem("Cable providers", "http://localhost/freeside/browse/cable_provider.html", "" )); -myMenu60.add(new WebFXMenuItem("Cable modem models", "http://localhost/freeside/browse/cable_model.html", "" )); -myMenu60.width = 256; - -myMenu55.add(new WebFXMenuItem("Cable", null, "", myMenu60 )); -var myMenu61 = new WebFXMenu; -myMenu61.emptyText = ''; -myMenu61.add(new WebFXMenuItem("Conferencing types", "http://localhost/freeside/browse/conferencing_type.html", "" )); -myMenu61.add(new WebFXMenuItem("Quality levels", "http://localhost/freeside/browse/conferencing_quality.html", "" )); -myMenu61.width = 256; - -myMenu55.add(new WebFXMenuItem("Conferencing", null, "", myMenu61 )); -var myMenu62 = new WebFXMenu; -myMenu62.emptyText = ''; -myMenu62.add(new WebFXMenuItem("Alarm system vendors", "http://localhost/freeside/browse/alarm_system.html", "" )); -myMenu62.add(new WebFXMenuItem("Alarm system types", "http://localhost/freeside/browse/alarm_type.html", "" )); -myMenu62.add(new WebFXMenuItem("Alarm central stations", "http://localhost/freeside/browse/alarm_station.html", "" )); -myMenu62.width = 256; - -myMenu55.add(new WebFXMenuItem("Alarm", null, "", myMenu62 )); -var myMenu63 = new WebFXMenu; -myMenu63.emptyText = ''; -myMenu63.add(new WebFXMenuItem("Circuit types", "http://localhost/freeside/browse/circuit_type.html", "" )); -myMenu63.add(new WebFXMenuItem("Circuit providers", "http://localhost/freeside/browse/circuit_provider.html", "" )); -myMenu63.add(new WebFXMenuItem("Termination types", "http://localhost/freeside/browse/circuit_termination.html", "" )); -myMenu63.width = 256; - -myMenu55.add(new WebFXMenuItem("Circuits", null, "", myMenu63 )); -myMenu55.add(new WebFXMenuItem("Hardware types", "http://localhost/freeside/browse/hardware_class.html", "Set up hardware type catalog" )); -myMenu55.width = 256; - -myMenu48.add(new WebFXMenuItem("Services", null, "", myMenu55 )); -myMenu48.add(new WebFXMenuSeparator()); -var myMenu64 = new WebFXMenu; -myMenu64.emptyText = ''; -myMenu64.add(new WebFXMenuItem("Vendor classes", "http://localhost/freeside/browse/vend_class.html", "" )); -myMenu64.add(new WebFXMenuItem("Vendors", "http://localhost/freeside/browse/vend_main.html", "" )); -myMenu64.width = 256; - -myMenu48.add(new WebFXMenuItem("Vendors", null, "", myMenu64 )); -myMenu48.add(new WebFXMenuSeparator()); -var myMenu65 = new WebFXMenu; -myMenu65.emptyText = ''; -myMenu65.add(new WebFXMenuItem("Billing events", "http://localhost/freeside/browse/part_event.html", "Billing actions for customers, invoices and packages" )); -myMenu65.add(new WebFXMenuItem("Invoice configurations", "http://localhost/freeside/browse/invoice_conf.html", "Adjust invoice settings for special-purpose notices" )); -myMenu65.add(new WebFXMenuItem("Invoice templates", "http://localhost/freeside/browse/invoice_template.html", "Edit templates for HTML, plaintext and typeset invoices" )); -myMenu65.add(new WebFXMenuSeparator()); -myMenu65.add(new WebFXMenuItem("Prepaid cards", "http://localhost/freeside/search/prepay_credit.html", "View outstanding cards, generate new cards" )); -var myMenu66 = new WebFXMenu; -myMenu66.emptyText = ''; -myMenu66.add(new WebFXMenuItem("Rate plans", "http://localhost/freeside/browse/rate.cgi", "Manage rate plans" )); -myMenu66.add(new WebFXMenuItem("Regions and prefixes", "http://localhost/freeside/browse/rate_region.html", "Manage regions and prefixes" )); -myMenu66.add(new WebFXMenuItem("Usage classes", "http://localhost/freeside/browse/usage_class.html", "Usage classes define groups of usage for taxation." )); -myMenu66.add(new WebFXMenuItem("Time periods", "http://localhost/freeside/browse/rate_time.html", "Time periods define days and hours for rate plans" )); -myMenu66.add(new WebFXMenuItem("Edit rates with Excel", "http://localhost/freeside/misc/rate_edit_excel.html", "Download and edit rates with Excel, then upload changes." )); -myMenu66.add(new WebFXMenuSeparator()); -myMenu66.add(new WebFXMenuItem("Tiering plans", "http://localhost/freeside/browse/rate_tier.html", "Rating tiers" )); -myMenu66.width = 256; - -myMenu65.add(new WebFXMenuItem("Call rates and regions", null, "Manage rate plans, regions and prefixes for VoIP and call billing", myMenu66 )); -myMenu65.add(new WebFXMenuSeparator()); -myMenu65.add(new WebFXMenuItem("Locales and tax rates", "http://localhost/freeside/browse/cust_main_county.cgi", "Change tax rates, or break down a country into states, or a state into counties and assign different tax rates to each" )); -myMenu65.add(new WebFXMenuItem("Tax classes", "http://localhost/freeside/browse/part_pkg_taxclass.html", "Tax classes" )); -myMenu65.add(new WebFXMenuSeparator()); -myMenu65.add(new WebFXMenuItem("Credit reasons", "http://localhost/freeside/browse/reason.html?class=R", "Credit reasons explain why a credit was issued." )); -myMenu65.add(new WebFXMenuItem("Credit reason types", "http://localhost/freeside/browse/reason_type.html?class=R", "Credit reason types define groups of reasons." )); -myMenu65.add(new WebFXMenuSeparator()); -myMenu65.add(new WebFXMenuItem("Refund reasons", "http://localhost/freeside/browse/reason.html?class=F", "Refund reasons explain why a refund was issued." )); -myMenu65.add(new WebFXMenuItem("Refund reason types", "http://localhost/freeside/browse/reason_type.html?class=F", "Refund reason types define groups of reasons." )); -myMenu65.width = 256; - -myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); -myMenu48.add(new WebFXMenuSeparator()); -var myMenu67 = new WebFXMenu; -myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); -myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); -myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); -myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); -myMenu67.add(new WebFXMenuItem("Inventory classes and inventory", "http://localhost/freeside/browse/inventory_class.html", "Setup inventory classes and stock inventory" )); -myMenu67.add(new WebFXMenuItem("Upload targets", "http://localhost/freeside/browse/upload_target.html", "Billing and payment upload destinations" )); -myMenu67.width = 256; - -myMenu48.add(new WebFXMenuItem("Miscellaneous", null, "", myMenu67 )); -myMenu48.width = 256; - - myBar.add(new WebFXMenuButton('Configuration', null, 'Configuration and setup', myMenu48 )); - - - var myMenu68 = new WebFXMenu; -myMenu68.emptyText = ''; -myMenu68.add(new WebFXMenuItem("Billing documentation", "http://www.freeside.biz/mediawiki/index.php/Freeside:4:Documentation", "Freeside documentation" )); -myMenu68.add(new WebFXMenuItem("Ticketing documentation", "http://wiki.bestpractical.com/", "Request Tracker Wiki" )); -myMenu68.add(new WebFXMenuSeparator()); -myMenu68.add(new WebFXMenuItem("About Freeside v5.0git", "javascript:about_freeside()", "" )); -myMenu68.add(new WebFXMenuItem("About RT v4.2.11", "http://www.bestpractical.com/rt", "Request Tracker Homepage" )); -myMenu68.width = 256; - - myBar.add(new WebFXMenuButton('Help', null, '', myMenu68 )); - - - myBar.show( null, 'vertical' ); - myBar.width = 154; - -</SCRIPT> - - - - - <link rel="stylesheet" href="http://localhost/freeside/elements/jquery-ui.min.css"> - <SCRIPT SRC="http://localhost/freeside/elements/jquery.js"></SCRIPT> - <SCRIPT SRC="http://localhost/freeside/elements/jquery-ui.min.js"></SCRIPT> - <SCRIPT TYPE="text/javascript" SRC="http://localhost/freeside/elements/overlibmws.js"></SCRIPT> - <SCRIPT TYPE="text/javascript" SRC="http://localhost/freeside/elements/overlibmws_iframe.js"></SCRIPT> - <SCRIPT TYPE="text/javascript" SRC="http://localhost/freeside/elements/overlibmws_draggable.js"></SCRIPT> - <SCRIPT TYPE="text/javascript" SRC="http://localhost/freeside/elements/overlibmws_crossframe.js"></SCRIPT> - <SCRIPT TYPE="text/javascript" SRC="http://localhost/freeside/elements/iframecontentmws.js"></SCRIPT> - <SCRIPT TYPE="text/javascript" SRC="http://localhost/freeside/elements/ajaxcontentmws.js"></SCRIPT> - - <SCRIPT TYPE="text/javascript"> - - function rs_init_object() { - var A; - try { - A=new ActiveXObject("Msxml2.XMLHTTP"); - } catch (e) { - try { - A=new ActiveXObject("Microsoft.XMLHTTP"); - } catch (oc) { - A=null; - } - } - if(!A && typeof XMLHttpRequest != "undefined") - A = new XMLHttpRequest(); - if (!A) - alert("Can't create XMLHttpRequest object"); - return A; - - } - -</SCRIPT> - - - - - </HEAD> - <BODY BGCOLOR="#f8f8f8" STYLE="margin-top:0; margin-bottom:0; margin-left:0px; margin-right:0px"> - <table width="100%" CELLPADDING=0 CELLSPACING=0 STYLE="padding-left:0px; padding-right:4px" CLASS="fshead"> - <tr> - <td BGCOLOR="#ffffff"><IMG BORDER=0 ALT="freeside" HEIGHT="36" SRC="http://localhost/freeside/view/REAL_logo.cgi"></td> - <td align=left BGCOLOR="#ffffff"> <!-- valign="top" --> - <font size=6>Freeside Test 5.0.1</font> - </td> - <td align=right valign=top BGCOLOR="#ffffff"><FONT SIZE="-1">Logged in as <b>test </b> <FONT SIZE="-2"><a href="http://localhost/freeside/loginout/logout.html">logout</a></FONT><br></FONT><FONT SIZE="-2"><a href="http://localhost/freeside/pref/pref.html" STYLE="color: #000000">Preferences</a> - <BR></FONT> - </td> - </tr> - </table> - - <TABLE WIDTH="100%" CELLSPACING=0 CELLPADDING=0> - -<link href="http://localhost/freeside/elements/freeside-menu.css" type="text/css" rel="stylesheet"> - - - <TR CLASS="fsmenubar"> - - - <TD COLSPAN="7" WIDTH="100%" STYLE="padding:1px 0px 0px 0px;border-top: 1px solid #7e0079" BGCOLOR="#dddddd"> - <SCRIPT TYPE="text/javascript"> - document.write(myBar); - </SCRIPT> - </TD> - - </TR> - - <TR CLASS="fssearchbar"> - - <TD COLSPAN=1 BGCOLOR="#dddddd" ALIGN="right" STYLE="padding-left:2px"> - - <FORM ACTION="http://localhost/freeside/search/prospect_main.html" METHOD="GET" STYLE="margin:0"> - <INPUT NAME="search_prospect" TYPE="text" VALUE="(name, company or phone)" STYLE="width:155px" onFocus="clearhint_search_prospect(this);" onClick="clearhint_search_prospect(this);" CLASS="fstext"><BR> - <A HREF="http://localhost/freeside/search/report_prospect_main.html" CLASS="fslink" STYLE="font-size: 11px">Adv</A> - <INPUT TYPE="submit" VALUE="Search prospects" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px;padding-left:1px;padding-right:1px"> - </FORM> - - - -<SCRIPT TYPE="text/javascript"> - - function clearhint_search_prospect (what) { - if ( what.value == '(name, company or phone)' ) - what.value = ''; - } - -</SCRIPT> - - </TD> - - <TD COLSPAN=1 BGCOLOR="#dddddd" ALIGN="right" STYLE="padding-left:2px"> - - <FORM ACTION="http://localhost/freeside/search/cust_main.cgi" METHOD="POST" STYLE="margin:0"> - <INPUT NAME="search_cust" TYPE="text" VALUE="(cust #, name, company or contact phone)" STYLE="width:246px" onFocus="clearhint_search_cust(this);" onClick="clearhint_search_cust(this);" CLASS="fstext"><BR> - <A HREF="http://localhost/freeside/search/report_cust_main.html" CLASS="fslink" STYLE="font-size: 11px">Advanced</A> - <INPUT TYPE="submit" VALUE="Search customers" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px"> - </FORM> - - - -<SCRIPT TYPE="text/javascript"> - - function clearhint_search_cust (what) { - if ( what.value == '(cust #, name, company or contact phone)' ) - what.value = ''; - } - -</SCRIPT> - - </TD> - - <TD COLSPAN=1 BGCOLOR="#dddddd" ALIGN="center"> - -<SCRIPT TYPE="text/javascript"> - - function clearhint_search_address2 (what) { - if ( what.value == '(Unit #)' ) - what.value = ''; - } - -</SCRIPT> - - </TD> - - <TD COLSPAN=1 BGCOLOR="#dddddd" ALIGN="right"> - - <FORM ACTION="http://localhost/freeside/search/cust_bill.html" METHOD="GET" STYLE="margin:0;display:inline"> - <INPUT NAME="invnum" TYPE="text" VALUE="(inv #)" STYLE="width:56px" onFocus="clearhint_search_invoice(this);" onClick="clearhint_search_invoice(this);" CLASS="fstext"> - <A HREF="http://localhost/freeside/search/report_cust_bill.html" CLASS="fslink" STYLE="font-size: 11px">Adv</A> <BR> - <INPUT TYPE="submit" VALUE="Search invoices" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px;padding-left:1px;padding-right:1px;margin-top:3px"> - </FORM> - - - -<SCRIPT TYPE="text/javascript"> - - function clearhint_search_invoice (what) { - if ( what.value == '(inv #)' ) - what.value = ''; - } - -</SCRIPT> - - </TD> - - <TD COLSPAN=1 BGCOLOR="#dddddd" ALIGN="right" STYLE="padding-left:2px"> - - <FORM ACTION="http://localhost/freeside/search/cust_svc.html" METHOD="GET" STYLE="margin:0"> - <INPUT NAME="search_svc" TYPE="text" VALUE="(user, email, ip, mac, domain or service phone)" STYLE="width:271px" onFocus="clearhint_search_svc(this);" onClick="clearhint_search_svc(this);" CLASS="fstext"><BR> - <A NOTYET="http://localhost/freeside/search/svc_Smarter.html" STYLE="color: #cccccc; font-size:11px">Advanced</A> - <INPUT TYPE="submit" VALUE="Search services" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px"> - </FORM> - - - -<SCRIPT TYPE="text/javascript"> - - function clearhint_search_svc (what) { - if ( what.value == '(user, email, ip, mac, domain or service phone)' ) - what.value = ''; - } - -</SCRIPT> - - </TD> - - <TD COLSPAN=1 BGCOLOR="#dddddd" ALIGN="right" STYLE="padding-left:2px;padding-right:2px"> - - <FORM ACTION="http://localhost/freeside//rt/index.html" METHOD="GET" STYLE="margin:0"> - <INPUT NAME="q" TYPE="text" VALUE="(ticket #, subject, email or fulltext:text)" STYLE="width:223px" onFocus="clearhint_search_ticket(this);" onClick="clearhint_search_ticket(this);" CLASS="fstext"><BR> - <A HREF="http://localhost/freeside//rt/Search/Build.html?NewQuery=1" CLASS="fslink" STYLE="font-size:11px">Advanced</A> - <INPUT TYPE="submit" VALUE="Search tickets" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px"> - </FORM> - - - -<SCRIPT TYPE="text/javascript"> - - function clearhint_search_ticket (what) { - if ( what.value == '(ticket #, subject, email or fulltext:text)' ) - what.value = ''; - } - -</SCRIPT> - - </TD> - - </TR> - </TABLE> - - - - <TABLE WIDTH="100%" HEIGHT="100%" CELLSPACING=0 CELLPADDING=4> - - <TR HEIGHT="100%"> - - <BR> - <TD CLASS="background" HEIGHT="100%" VALIGN="top"> <!-- WIDTH="100%"> --> - - <H1> - Package Search Results - </H1> - - <BR> - - - - - - - <A HREF="javascript:void(0);" - onClick="overlib( OLiframeContent('http://localhost/freeside/misc/bulk_change_pkg.cgi?', 569, 210, 'popup-0000000000-0000-000000000.000000', 0, 'auto' ), CAPTION, 'Change Packages', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '#333399', CGCOLOR, '#333399', FGCOLOR, '#f8f8f8', CLOSETEXT, 'Close'); return false;" - - - ->Change these packages</A><BR><A HREF="http://localhost/freeside/misc/email-customers.html?table=cust_pkg&agent_virt_agentnum=&query=1">Email a notice to these customers</A> - -<BR><BR> - - - - <TABLE> - <TR> - - <TD VALIGN="bottom"> - - <FORM> - - 601 total packages - - - ( show <SELECT NAME="maxrecords" onChange="window.location = 'http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=' + this.options[this.selectedIndex].value;"> - - <OPTION VALUE="100" SELECTED>100</OPTION> - <OPTION VALUE="500" >500</OPTION> - <OPTION VALUE="1000" >1000</OPTION> - <OPTION VALUE="2500" >2500</OPTION> - - </SELECT> per page ) - - - <BR> - - </FORM> - - </TD> - - - <TD ALIGN="right" CLASS="noprint"> - - Download full results<BR> - - as <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=packages.xls">Excel spreadsheet</A><BR> - - as <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=csv">CSV file</A><BR> - - - as <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html-print">printable copy</A> - - </TD> - - </TR> - <TR> - <TD COLSPAN=2> - - - - <FONT SIZE="+2">1</FONT> - - - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=100">2</A> - - - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=200">3</A> - - - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=300">4</A> - - - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=400">5</A> - - - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=500">6</A> - - - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=600">7</A> - - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=100"><B><FONT SIZE="+1">Next</FONT></B></A> - - - - - - - -<TABLE CLASS="grid" CELLSPACING=0 CELLPADDING=0 > - - - - -<THEAD> - - <TR> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "2" - - - - > - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=pkgnum">#</A> - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=quantity">Quan.</A> - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Package - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=classname">Class</A> - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Status - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=salesperson">Sales Person</A> - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=0;order_by=otaker">Ordered by</A> - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Setup - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Base Recur - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Freq. - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Setup - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Last bill - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Next bill - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Adjourn - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Susp. - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Susp. delay - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Expire - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Contract end - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Changed - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Cancel - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Reason - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Cust. Status - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Customer - </TH> - <TH CLASS = "grid" - BGCOLOR = "#cccccc" - ROWSPAN = "1" - - - - > - Services - </TH> - </TR> - - -</THEAD> - -<TBODY> - - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=168;show=packages;fragment=cust_pkg501#cust_pkg501">501</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=168;show=packages;fragment=cust_pkg501#cust_pkg501">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=168;show=packages;fragment=cust_pkg501#cust_pkg501">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Jan 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?168">Cole, Albertha</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?501">24465928708548</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=161;show=packages;fragment=cust_pkg479#cust_pkg479">479</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=161;show=packages;fragment=cust_pkg479#cust_pkg479">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=161;show=packages;fragment=cust_pkg479#cust_pkg479">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 02 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?161">Haley, Schaden and Ebert (Prosacco, Clementina)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?479">7422901680427</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=99;show=packages;fragment=cust_pkg295#cust_pkg295">295</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=99;show=packages;fragment=cust_pkg295#cust_pkg295">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=99;show=packages;fragment=cust_pkg295#cust_pkg295">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Sep 02 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?99">Luettgen-Jacobs (Hintz, Junior)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?295">14991580189167</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=61;show=packages;fragment=cust_pkg179#cust_pkg179">179</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=61;show=packages;fragment=cust_pkg179#cust_pkg179">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=61;show=packages;fragment=cust_pkg179#cust_pkg179">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 02 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?61">Leuschke-Stamm (Dibbert, Betsy)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?179">2189396399</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=88;show=packages;fragment=cust_pkg261#cust_pkg261">261</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=88;show=packages;fragment=cust_pkg261#cust_pkg261">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=88;show=packages;fragment=cust_pkg261#cust_pkg261">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Jan 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?88">Moore, Lina</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?261">5717780937</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=171;show=packages;fragment=cust_pkg511#cust_pkg511">511</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=171;show=packages;fragment=cust_pkg511#cust_pkg511">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=171;show=packages;fragment=cust_pkg511#cust_pkg511">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Sep 02 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?171">Mante LLC (Kessler, Enid)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?511">9686105497</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=69;show=packages;fragment=cust_pkg203#cust_pkg203">203</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=69;show=packages;fragment=cust_pkg203#cust_pkg203">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=69;show=packages;fragment=cust_pkg203#cust_pkg203">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Sep 02 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?69">Moore-Cummerata (DuBuque, Russ)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?203">8632406717</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=185;show=packages;fragment=cust_pkg551#cust_pkg551">551</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=185;show=packages;fragment=cust_pkg551#cust_pkg551">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=185;show=packages;fragment=cust_pkg551#cust_pkg551">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 02 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 02 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?185">Christiansen LLC (Howe, Luis)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?551">5191928764</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=131;show=packages;fragment=cust_pkg391#cust_pkg391">391</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=131;show=packages;fragment=cust_pkg391#cust_pkg391">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=131;show=packages;fragment=cust_pkg391#cust_pkg391">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 03 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 03 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 03 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?131">Wolff and Sons (Heller, Dagmar)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?391">16892538421</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=105;show=packages;fragment=cust_pkg311#cust_pkg311">311</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=105;show=packages;fragment=cust_pkg311#cust_pkg311">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=105;show=packages;fragment=cust_pkg311#cust_pkg311">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 03 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 03 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 03 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?105">Barton-Goodwin (Schroeder, Brian)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?311">8239761006014</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=27;show=packages;fragment=cust_pkg79#cust_pkg79">79</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=27;show=packages;fragment=cust_pkg79#cust_pkg79">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=27;show=packages;fragment=cust_pkg79#cust_pkg79">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 03 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 03 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 03 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?27">Haag-Schumm (Ullrich, Shemar)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?79">8935173249</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=75;show=packages;fragment=cust_pkg223#cust_pkg223">223</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=75;show=packages;fragment=cust_pkg223#cust_pkg223">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=75;show=packages;fragment=cust_pkg223#cust_pkg223">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Sep 03 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 03 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 03 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?75">Hoeger-Brown (Shields, Serenity)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?223">68981950057600</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=72;show=packages;fragment=cust_pkg213#cust_pkg213">213</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=72;show=packages;fragment=cust_pkg213#cust_pkg213">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=72;show=packages;fragment=cust_pkg213#cust_pkg213">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 03 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 03 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 03 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?72">Lehner, Ryann</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?213">2636239939</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=111;show=packages;fragment=cust_pkg331#cust_pkg331">331</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=111;show=packages;fragment=cust_pkg331#cust_pkg331">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=111;show=packages;fragment=cust_pkg331#cust_pkg331">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 03 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 03 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 03 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?111">Treutel, Kuhn and Sipes (Wintheiser, Elyse)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?331">17840460291257</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=15;show=packages;fragment=cust_pkg43#cust_pkg43">43</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=15;show=packages;fragment=cust_pkg43#cust_pkg43">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=15;show=packages;fragment=cust_pkg43#cust_pkg43">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 03 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 03 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 03 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?15">Stracke Inc (Kuhlman, Kaya)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?43">7315522562</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=84;show=packages;fragment=cust_pkg249#cust_pkg249">249</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=84;show=packages;fragment=cust_pkg249#cust_pkg249">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=84;show=packages;fragment=cust_pkg249#cust_pkg249">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Nov 04 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 04 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 04 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?84">Pacocha, Matilde</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?249">18235477397</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=120;show=packages;fragment=cust_pkg357#cust_pkg357">357</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=120;show=packages;fragment=cust_pkg357#cust_pkg357">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=120;show=packages;fragment=cust_pkg357#cust_pkg357">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Nov 04 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 04 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 04 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?120">Mante, Demond</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?357">751008639787292</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=39;show=packages;fragment=cust_pkg115#cust_pkg115">115</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=39;show=packages;fragment=cust_pkg115#cust_pkg115">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=39;show=packages;fragment=cust_pkg115#cust_pkg115">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 04 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 04 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 04 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?39">Kunze, Ryan and Dare (Schultz, Jasper)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?115">495453230818559</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=109;show=packages;fragment=cust_pkg323#cust_pkg323">323</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=109;show=packages;fragment=cust_pkg323#cust_pkg323">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=109;show=packages;fragment=cust_pkg323#cust_pkg323">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Sep 04 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 04 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 04 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?109">Lind-Bahringer (Ratke, Roma)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?323">4989851645</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=184;show=packages;fragment=cust_pkg549#cust_pkg549">549</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=184;show=packages;fragment=cust_pkg549#cust_pkg549">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=184;show=packages;fragment=cust_pkg549#cust_pkg549">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 05 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 05 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 05 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?184">Hudson, Stephanie</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?549">87252993767044</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=45;show=packages;fragment=cust_pkg131#cust_pkg131">131</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=45;show=packages;fragment=cust_pkg131#cust_pkg131">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=45;show=packages;fragment=cust_pkg131#cust_pkg131">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 05 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 05 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 05 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?45">Shanahan LLC (Brown, Ceasar)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?131">4508409161</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=125;show=packages;fragment=cust_pkg371#cust_pkg371">371</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=125;show=packages;fragment=cust_pkg371#cust_pkg371">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=125;show=packages;fragment=cust_pkg371#cust_pkg371">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Jan 06 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 06 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 06 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?125">Kuhlman, Quitzon and Greenholt (Quitzon, Ophelia)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?371">15363386908</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=93;show=packages;fragment=cust_pkg275#cust_pkg275">275</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=93;show=packages;fragment=cust_pkg275#cust_pkg275">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=93;show=packages;fragment=cust_pkg275#cust_pkg275">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 06 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 06 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 06 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?93">Dach, Lueilwitz and Koepp (Kovacek, Frank)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?275">1732869050</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=79;show=packages;fragment=cust_pkg235#cust_pkg235">235</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=79;show=packages;fragment=cust_pkg235#cust_pkg235">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=79;show=packages;fragment=cust_pkg235#cust_pkg235">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Nov 06 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 06 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 06 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?79">Corkery-D'Amore (Wyman, Bethel)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?235">9464935873</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=160;show=packages;fragment=cust_pkg477#cust_pkg477">477</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=160;show=packages;fragment=cust_pkg477#cust_pkg477">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=160;show=packages;fragment=cust_pkg477#cust_pkg477">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 06 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 06 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 06 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?160">Lakin, Lindsay</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?477">8078845348</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=147;show=packages;fragment=cust_pkg439#cust_pkg439">439</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=147;show=packages;fragment=cust_pkg439#cust_pkg439">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=147;show=packages;fragment=cust_pkg439#cust_pkg439">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Sep 06 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 06 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 06 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?147">Pfeffer, Shanahan and Cruickshank (Kutch, Rosario)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?439">1214016847277551</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=201;show=packages;fragment=cust_pkg599#cust_pkg599">599</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=201;show=packages;fragment=cust_pkg599#cust_pkg599">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=201;show=packages;fragment=cust_pkg599#cust_pkg599">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Jan 06 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 06 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 06 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?201">Mills, Ziemann and Satterfield (Lang, Cathy)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?599">0806183894522</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=117;show=packages;fragment=cust_pkg347#cust_pkg347">347</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=117;show=packages;fragment=cust_pkg347#cust_pkg347">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=117;show=packages;fragment=cust_pkg347#cust_pkg347">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 07 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 07 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 07 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?117">Bernier-Nader (Hane, Floy)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?347">1894866195856273</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=92;show=packages;fragment=cust_pkg273#cust_pkg273">273</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=92;show=packages;fragment=cust_pkg273#cust_pkg273">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=92;show=packages;fragment=cust_pkg273#cust_pkg273">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Aug 07 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 07 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 07 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?92">Ruecker, Lucious</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?273">16095013569</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=107;show=packages;fragment=cust_pkg319#cust_pkg319">319</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=107;show=packages;fragment=cust_pkg319#cust_pkg319">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=107;show=packages;fragment=cust_pkg319#cust_pkg319">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 07 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 07 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 07 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?107">Hessel and Sons (Zemlak, Kaya)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?319">13810128409238</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=103;show=packages;fragment=cust_pkg307#cust_pkg307">307</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=103;show=packages;fragment=cust_pkg307#cust_pkg307">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=103;show=packages;fragment=cust_pkg307#cust_pkg307">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Aug 08 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?103">Roberts-Schinner (Flatley, Amelia)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?307">4593519604</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=108;show=packages;fragment=cust_pkg321#cust_pkg321">321</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=108;show=packages;fragment=cust_pkg321#cust_pkg321">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=108;show=packages;fragment=cust_pkg321#cust_pkg321">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 08 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?108">Emmerich, Neil</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?321">25963062543138</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=128;show=packages;fragment=cust_pkg381#cust_pkg381">381</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=128;show=packages;fragment=cust_pkg381#cust_pkg381">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=128;show=packages;fragment=cust_pkg381#cust_pkg381">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 08 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?128">Powlowski, Veda</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?381">3911632965</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=144;show=packages;fragment=cust_pkg429#cust_pkg429">429</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=144;show=packages;fragment=cust_pkg429#cust_pkg429">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=144;show=packages;fragment=cust_pkg429#cust_pkg429">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 08 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?144">Frami, Miller</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?429">33762771108367</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=173;show=packages;fragment=cust_pkg515#cust_pkg515">515</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=173;show=packages;fragment=cust_pkg515#cust_pkg515">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=173;show=packages;fragment=cust_pkg515#cust_pkg515">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 08 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?173">Mraz LLC (Labadie, Trisha)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?515">14527731997</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=65;show=packages;fragment=cust_pkg191#cust_pkg191">191</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=65;show=packages;fragment=cust_pkg191#cust_pkg191">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=65;show=packages;fragment=cust_pkg191#cust_pkg191">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Sep 08 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?65">O'Reilly-Mraz (Pagac, Kennedi)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?191">078151255309299</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=156;show=packages;fragment=cust_pkg465#cust_pkg465">465</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=156;show=packages;fragment=cust_pkg465#cust_pkg465">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=156;show=packages;fragment=cust_pkg465#cust_pkg465">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 08 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?156">Upton, Otho</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?465">2646555583</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=49;show=packages;fragment=cust_pkg143#cust_pkg143">143</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=49;show=packages;fragment=cust_pkg143#cust_pkg143">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=49;show=packages;fragment=cust_pkg143#cust_pkg143">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 08 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?49">Bernhard LLC (Hintz, Winston)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?143">95994707748468</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=96;show=packages;fragment=cust_pkg285#cust_pkg285">285</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=96;show=packages;fragment=cust_pkg285#cust_pkg285">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=96;show=packages;fragment=cust_pkg285#cust_pkg285">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 08 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 08 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?96">Muller, Kenyatta</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?285">3521080416</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=31;show=packages;fragment=cust_pkg91#cust_pkg91">91</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=31;show=packages;fragment=cust_pkg91#cust_pkg91">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=31;show=packages;fragment=cust_pkg91#cust_pkg91">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 09 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 09 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 09 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?31">Kuhn-Ruecker (Nienow, Kacie)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?91">1535633738761521</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=119;show=packages;fragment=cust_pkg355#cust_pkg355">355</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=119;show=packages;fragment=cust_pkg355#cust_pkg355">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=119;show=packages;fragment=cust_pkg355#cust_pkg355">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Aug 09 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 09 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 09 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?119">Runolfsson, Roob and Hoppe (Bergstrom, Esteban)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?355">15790441533145</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=24;show=packages;fragment=cust_pkg69#cust_pkg69">69</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=24;show=packages;fragment=cust_pkg69#cust_pkg69">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=24;show=packages;fragment=cust_pkg69#cust_pkg69">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 10 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 10 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 10 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?24">Conn, Marisol</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?69">19732087174151</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=197;show=packages;fragment=cust_pkg587#cust_pkg587">587</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=197;show=packages;fragment=cust_pkg587#cust_pkg587">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=197;show=packages;fragment=cust_pkg587#cust_pkg587">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 10 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 10 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 10 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?197">Ryan and Sons (Bashirian, Bert)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?587">6566177741620</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=3;show=packages;fragment=cust_pkg7#cust_pkg7">7</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=3;show=packages;fragment=cust_pkg7#cust_pkg7">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=3;show=packages;fragment=cust_pkg7#cust_pkg7">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Sep 10 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 10 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 10 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?3">Flatley-Hagenes (Donnelly, Odessa)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?7">19671718037</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=67;show=packages;fragment=cust_pkg199#cust_pkg199">199</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=67;show=packages;fragment=cust_pkg199#cust_pkg199">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=67;show=packages;fragment=cust_pkg199#cust_pkg199">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Nov 10 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 10 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 10 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?67">Schultz, Hyatt and Ruecker (Yundt, Berta)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?199">14559187832</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=191;show=packages;fragment=cust_pkg571#cust_pkg571">571</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=191;show=packages;fragment=cust_pkg571#cust_pkg571">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=191;show=packages;fragment=cust_pkg571#cust_pkg571">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Nov 10 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 10 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 10 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?191">Walker Inc (Block, Felix)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?571">9749671732</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=33;show=packages;fragment=cust_pkg95#cust_pkg95">95</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=33;show=packages;fragment=cust_pkg95#cust_pkg95">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=33;show=packages;fragment=cust_pkg95#cust_pkg95">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 11 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 11 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 11 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?33">Buckridge, Spinka and Gerlach (Larkin, Lue)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?95">1076194311</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=140;show=packages;fragment=cust_pkg417#cust_pkg417">417</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=140;show=packages;fragment=cust_pkg417#cust_pkg417">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=140;show=packages;fragment=cust_pkg417#cust_pkg417">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 11 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 11 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 11 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?140">Cremin, Aliya</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?417">67497022590689</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=100;show=packages;fragment=cust_pkg297#cust_pkg297">297</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=100;show=packages;fragment=cust_pkg297#cust_pkg297">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=100;show=packages;fragment=cust_pkg297#cust_pkg297">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 12 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 12 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 12 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?100">Dibbert, Roman</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?297">7801192536</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=113;show=packages;fragment=cust_pkg335#cust_pkg335">335</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=113;show=packages;fragment=cust_pkg335#cust_pkg335">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=113;show=packages;fragment=cust_pkg335#cust_pkg335">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 12 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 12 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 12 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?113">Paucek, Swaniawski and Carter (DuBuque, Freda)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?335">17561074962584</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=13;show=packages;fragment=cust_pkg35#cust_pkg35">35</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=13;show=packages;fragment=cust_pkg35#cust_pkg35">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=13;show=packages;fragment=cust_pkg35#cust_pkg35">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 12 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 12 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 12 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?13">Feest, Bechtelar and Harber (Douglas, Geovany)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?35">4609716945803</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=59;show=packages;fragment=cust_pkg175#cust_pkg175">175</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=59;show=packages;fragment=cust_pkg175#cust_pkg175">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=59;show=packages;fragment=cust_pkg175#cust_pkg175">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Sep 12 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 12 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 12 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?59">Simonis Inc (Runolfsson, Kareem)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?175">6741985321</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=55;show=packages;fragment=cust_pkg163#cust_pkg163">163</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=55;show=packages;fragment=cust_pkg163#cust_pkg163">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=55;show=packages;fragment=cust_pkg163#cust_pkg163">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Nov 12 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 12 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 12 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?55">Wiegand-Kohler (Murray, Amparo)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?163">85524284918759</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=132;show=packages;fragment=cust_pkg393#cust_pkg393">393</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=132;show=packages;fragment=cust_pkg393#cust_pkg393">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=132;show=packages;fragment=cust_pkg393#cust_pkg393">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Nov 12 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 12 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 12 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?132">Kris, Josie</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?393">6110246771</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=145;show=packages;fragment=cust_pkg431#cust_pkg431">431</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=145;show=packages;fragment=cust_pkg431#cust_pkg431">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=145;show=packages;fragment=cust_pkg431#cust_pkg431">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 12 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 12 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 12 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?145">Zboncak, Schmidt and Howell (Pouros, Robb)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?431">3839925171</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=5;show=packages;fragment=cust_pkg11#cust_pkg11">11</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=5;show=packages;fragment=cust_pkg11#cust_pkg11">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=5;show=packages;fragment=cust_pkg11#cust_pkg11">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Jan 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?5">Watsica-Crooks (Will, Marguerite)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?11">7941182146</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=80;show=packages;fragment=cust_pkg237#cust_pkg237">237</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=80;show=packages;fragment=cust_pkg237#cust_pkg237">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=80;show=packages;fragment=cust_pkg237#cust_pkg237">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 13 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?80">Jakubowski, Jarrell</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?237">10163759294554</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=187;show=packages;fragment=cust_pkg559#cust_pkg559">559</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=187;show=packages;fragment=cust_pkg559#cust_pkg559">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=187;show=packages;fragment=cust_pkg559#cust_pkg559">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Nov 13 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?187">Hegmann, Kessler and Gibson (Roob, Henderson)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?559">49053079571982</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=133;show=packages;fragment=cust_pkg395#cust_pkg395">395</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=133;show=packages;fragment=cust_pkg395#cust_pkg395">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=133;show=packages;fragment=cust_pkg395#cust_pkg395">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Jan 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?133">Kirlin-Feest (Aufderhar, Trisha)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?395">34512365885294</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=40;show=packages;fragment=cust_pkg117#cust_pkg117">117</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=40;show=packages;fragment=cust_pkg117#cust_pkg117">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=40;show=packages;fragment=cust_pkg117#cust_pkg117">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 13 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?40">Brekke, Tillman</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?117">158607899401245</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=28;show=packages;fragment=cust_pkg81#cust_pkg81">81</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=28;show=packages;fragment=cust_pkg81#cust_pkg81">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=28;show=packages;fragment=cust_pkg81#cust_pkg81">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 13 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?28">Hackett, Garnet</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?81">152553597965486</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=153;show=packages;fragment=cust_pkg455#cust_pkg455">455</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=153;show=packages;fragment=cust_pkg455#cust_pkg455">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=153;show=packages;fragment=cust_pkg455#cust_pkg455">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 13 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?153">Lind Group (Padberg, Irving)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?455">7002098074566</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=179;show=packages;fragment=cust_pkg535#cust_pkg535">535</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=179;show=packages;fragment=cust_pkg535#cust_pkg535">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=179;show=packages;fragment=cust_pkg535#cust_pkg535">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Sep 13 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 13 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?179">Conn-McLaughlin (O'Connell, Gayle)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?535">6049664310378</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=16;show=packages;fragment=cust_pkg45#cust_pkg45">45</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=16;show=packages;fragment=cust_pkg45#cust_pkg45">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=16;show=packages;fragment=cust_pkg45#cust_pkg45">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Nov 14 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 14 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 14 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?16">McDermott, Alejandra</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?45">5473351513</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=127;show=packages;fragment=cust_pkg379#cust_pkg379">379</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=127;show=packages;fragment=cust_pkg379#cust_pkg379">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=127;show=packages;fragment=cust_pkg379#cust_pkg379">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 14 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 14 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 14 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?127">Langosh, Shanahan and Huels (Morissette, Florence)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?379">5869395581</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=165;show=packages;fragment=cust_pkg491#cust_pkg491">491</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=165;show=packages;fragment=cust_pkg491#cust_pkg491">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=165;show=packages;fragment=cust_pkg491#cust_pkg491">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Jan 14 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 14 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 14 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?165">DuBuque, Romaguera and Hagenes (Rempel, Levi)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?491">0970039499</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=149;show=packages;fragment=cust_pkg443#cust_pkg443">443</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=149;show=packages;fragment=cust_pkg443#cust_pkg443">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=149;show=packages;fragment=cust_pkg443#cust_pkg443">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Sep 14 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 14 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 14 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?149">O'Keefe Inc (Schamberger, Felix)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?443">8366310646</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=157;show=packages;fragment=cust_pkg467#cust_pkg467">467</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=157;show=packages;fragment=cust_pkg467#cust_pkg467">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=157;show=packages;fragment=cust_pkg467#cust_pkg467">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Aug 14 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 14 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 14 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?157">Weimann Inc (Cartwright, Judah)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?467">5876977314592</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=87;show=packages;fragment=cust_pkg259#cust_pkg259">259</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=87;show=packages;fragment=cust_pkg259#cust_pkg259">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=87;show=packages;fragment=cust_pkg259#cust_pkg259">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Aug 15 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 15 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 15 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?87">Kozey and Sons (Vandervort, Harmon)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?259">106766405260980</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=104;show=packages;fragment=cust_pkg309#cust_pkg309">309</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=104;show=packages;fragment=cust_pkg309#cust_pkg309">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=104;show=packages;fragment=cust_pkg309#cust_pkg309">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Jan 15 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 15 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 15 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?104">Stanton, Christop</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?309">18561234265014</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=68;show=packages;fragment=cust_pkg201#cust_pkg201">201</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=68;show=packages;fragment=cust_pkg201#cust_pkg201">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=68;show=packages;fragment=cust_pkg201#cust_pkg201">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Nov 15 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 15 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 15 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?68">Nikolaus, Katelyn</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?201">13116773370</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=12;show=packages;fragment=cust_pkg33#cust_pkg33">33</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=12;show=packages;fragment=cust_pkg33#cust_pkg33">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=12;show=packages;fragment=cust_pkg33#cust_pkg33">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Jan 16 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 16 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 16 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?12">Kuhlman, Niko</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?33">14745441565</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=21;show=packages;fragment=cust_pkg59#cust_pkg59">59</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=21;show=packages;fragment=cust_pkg59#cust_pkg59">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=21;show=packages;fragment=cust_pkg59#cust_pkg59">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Nov 16 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 16 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 16 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?21">Zemlak and Sons (Swift, Maximilian)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?59">5055483796977</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=35;show=packages;fragment=cust_pkg103#cust_pkg103">103</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=35;show=packages;fragment=cust_pkg103#cust_pkg103">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=35;show=packages;fragment=cust_pkg103#cust_pkg103">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 16 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 16 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 16 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?35">Bahringer LLC (Frami, Roslyn)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?103">19242934458</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=123;show=packages;fragment=cust_pkg367#cust_pkg367">367</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=123;show=packages;fragment=cust_pkg367#cust_pkg367">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=123;show=packages;fragment=cust_pkg367#cust_pkg367">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 17 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 17 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 17 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?123">Zulauf-Schiller (Jacobs, Angelina)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?367">4942001551</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=63;show=packages;fragment=cust_pkg187#cust_pkg187">187</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=63;show=packages;fragment=cust_pkg187#cust_pkg187">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=63;show=packages;fragment=cust_pkg187#cust_pkg187">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 17 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 17 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 17 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?63">Luettgen LLC (Grant, Grover)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?187">4415242593</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=151;show=packages;fragment=cust_pkg451#cust_pkg451">451</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=151;show=packages;fragment=cust_pkg451#cust_pkg451">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=151;show=packages;fragment=cust_pkg451#cust_pkg451">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 17 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 17 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 17 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?151">Leannon-Crona (Schuster, Cierra)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?451">3037362335</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=152;show=packages;fragment=cust_pkg453#cust_pkg453">453</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=152;show=packages;fragment=cust_pkg453#cust_pkg453">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=152;show=packages;fragment=cust_pkg453#cust_pkg453">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Nov 17 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 17 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 17 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?152">Klocko, Fleta</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?453">5389770549</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=77;show=packages;fragment=cust_pkg227#cust_pkg227">227</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=77;show=packages;fragment=cust_pkg227#cust_pkg227">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=77;show=packages;fragment=cust_pkg227#cust_pkg227">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Nov 18 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 18 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 18 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?77">Kunze Inc (Ernser, Coralie)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?227">2280817547</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=83;show=packages;fragment=cust_pkg247#cust_pkg247">247</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=83;show=packages;fragment=cust_pkg247#cust_pkg247">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=83;show=packages;fragment=cust_pkg247#cust_pkg247">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Aug 18 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 18 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 18 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?83">Jacobson-Gorczany (Vandervort, Kiley)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?247">2749371736</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=183;show=packages;fragment=cust_pkg547#cust_pkg547">547</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=183;show=packages;fragment=cust_pkg547#cust_pkg547">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=183;show=packages;fragment=cust_pkg547#cust_pkg547">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 18 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 18 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 18 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?183">Dietrich, Keebler and Dach (Russel, Ivy)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?547">1116321423</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=97;show=packages;fragment=cust_pkg287#cust_pkg287">287</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=97;show=packages;fragment=cust_pkg287#cust_pkg287">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=97;show=packages;fragment=cust_pkg287#cust_pkg287">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Aug 18 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 18 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 18 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?97">Braun, Rath and Gutkowski (Wilderman, Reyes)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?287">183790150181541</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=116;show=packages;fragment=cust_pkg345#cust_pkg345">345</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=116;show=packages;fragment=cust_pkg345#cust_pkg345">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=116;show=packages;fragment=cust_pkg345#cust_pkg345">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 18 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 18 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 18 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?116">Konopelski, Barry</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?345">0783009535773</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=163;show=packages;fragment=cust_pkg487#cust_pkg487">487</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=163;show=packages;fragment=cust_pkg487#cust_pkg487">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=163;show=packages;fragment=cust_pkg487#cust_pkg487">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 18 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 18 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 18 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?163">Fritsch LLC (Jones, Mandy)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?487">8192793749</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=37;show=packages;fragment=cust_pkg107#cust_pkg107">107</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=37;show=packages;fragment=cust_pkg107#cust_pkg107">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=37;show=packages;fragment=cust_pkg107#cust_pkg107">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 18 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 18 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 18 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?37">Hodkiewicz-Raynor (Macejkovic, Leann)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?107">6941312477183</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=91;show=packages;fragment=cust_pkg271#cust_pkg271">271</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=91;show=packages;fragment=cust_pkg271#cust_pkg271">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=91;show=packages;fragment=cust_pkg271#cust_pkg271">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Aug 19 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?91">Fay and Sons (Gerhold, Thora)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?271">9519625792</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=89;show=packages;fragment=cust_pkg263#cust_pkg263">263</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=89;show=packages;fragment=cust_pkg263#cust_pkg263">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=89;show=packages;fragment=cust_pkg263#cust_pkg263">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Jan 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?89">Legros Group (Reilly, Mabel)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?263">210371813834331</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=4;show=packages;fragment=cust_pkg9#cust_pkg9">9</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=4;show=packages;fragment=cust_pkg9#cust_pkg9">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=4;show=packages;fragment=cust_pkg9#cust_pkg9">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 19 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?4">Bartoletti, Theodora</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?9">337448915280026</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=25;show=packages;fragment=cust_pkg71#cust_pkg71">71</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=25;show=packages;fragment=cust_pkg71#cust_pkg71">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=25;show=packages;fragment=cust_pkg71#cust_pkg71">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Aug 19 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?25">Kuhlman-Huels (Parisian, Cristopher)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?71">99158298078002</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=115;show=packages;fragment=cust_pkg343#cust_pkg343">343</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=115;show=packages;fragment=cust_pkg343#cust_pkg343">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=115;show=packages;fragment=cust_pkg343#cust_pkg343">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Dec 19 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?115">Kemmer-O'Connell (Schuster, Alexander)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?343">4441731527</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=20;show=packages;fragment=cust_pkg57#cust_pkg57">57</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=20;show=packages;fragment=cust_pkg57#cust_pkg57">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=20;show=packages;fragment=cust_pkg57#cust_pkg57">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Oct 19 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?20">Weber, Aliza</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?57">215984572910627</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=196;show=packages;fragment=cust_pkg585#cust_pkg585">585</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=196;show=packages;fragment=cust_pkg585#cust_pkg585">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=196;show=packages;fragment=cust_pkg585#cust_pkg585">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Sep 19 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?196">Turcotte, Janessa</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?585">10016834740</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=155;show=packages;fragment=cust_pkg463#cust_pkg463">463</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=155;show=packages;fragment=cust_pkg463#cust_pkg463">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=155;show=packages;fragment=cust_pkg463#cust_pkg463">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Sep 19 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?155">Boyle-Schmeler (Maggio, Fay)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?463">1173141702400720</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=193;show=packages;fragment=cust_pkg575#cust_pkg575">575</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=193;show=packages;fragment=cust_pkg575#cust_pkg575">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=193;show=packages;fragment=cust_pkg575#cust_pkg575">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Jan 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 19 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?193">Johnston Group (Adams, Audreanne)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?575">2786062985022</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=43;show=packages;fragment=cust_pkg127#cust_pkg127">127</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=43;show=packages;fragment=cust_pkg127#cust_pkg127">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=43;show=packages;fragment=cust_pkg127#cust_pkg127">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Aug 20 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 20 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 20 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?43">Leannon-Pfannerstill (O'Keefe, Bernie)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?127">5260896063</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=101;show=packages;fragment=cust_pkg299#cust_pkg299">299</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=101;show=packages;fragment=cust_pkg299#cust_pkg299">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=101;show=packages;fragment=cust_pkg299#cust_pkg299">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Sep 20 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 20 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 20 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?101">Flatley, Yundt and Pacocha (Volkman, Tabitha)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?299">2964457155392</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=53;show=packages;fragment=cust_pkg155#cust_pkg155">155</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=53;show=packages;fragment=cust_pkg155#cust_pkg155">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=53;show=packages;fragment=cust_pkg155#cust_pkg155">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Sep 20 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 20 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 20 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?53">Balistreri-Schoen (Schultz, Jaylan)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?155">261457560511658</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=48;show=packages;fragment=cust_pkg141#cust_pkg141">141</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=48;show=packages;fragment=cust_pkg141#cust_pkg141">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=48;show=packages;fragment=cust_pkg141#cust_pkg141">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Nov 21 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 21 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 21 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?48">Mohr, Florine</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?141">5805430204</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row0"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=32;show=packages;fragment=cust_pkg93#cust_pkg93">93</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=32;show=packages;fragment=cust_pkg93#cust_pkg93">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=32;show=packages;fragment=cust_pkg93#cust_pkg93">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Sep 21 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 21 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 21 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?32">Swaniawski, Adrienne</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?93">7091741436337</A></td></tr></table></TD> - - - </TR> - - <TR ID="" CLASS="row1"> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=17;show=packages;fragment=cust_pkg47#cust_pkg47">47</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=17;show=packages;fragment=cust_pkg47#cust_pkg47">1</A></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?custnum=17;show=packages;fragment=cust_pkg47#cust_pkg47">Monthly anniversary phone x4</A></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 SIZE="-1" ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=center ></TD> - - - - <TD CLASS="grid" ALIGN=center >test</TD> - - - - <TD CLASS="grid" ALIGN=right >$0.00</TD> - - - - <TD CLASS="grid" ALIGN=right >$60.00</TD> - - - - <TD CLASS="grid" ALIGN=left >monthly</TD> - - - - <TD CLASS="grid" ALIGN=right >Nov 21 2015</TD> - - - - <TD CLASS="grid" ALIGN=right >Feb 21 2016</TD> - - - - <TD CLASS="grid" ALIGN=right >Mar 21 2016</TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=right ></TD> - - - - <TD CLASS="grid" ALIGN=left ></TD> - - - - <TD CLASS="grid" ALIGN=center ><FONT COLOR=#00CC00 ><b>Active</b></FONT></TD> - - - - <TD CLASS="grid" ALIGN=left ><A HREF="http://localhost/freeside/view/cust_main.cgi?17">Leffler, Abshire and Orn (Hyatt, Reggie)</A></TD> - - - - <TD CLASS="grid" ALIGN=right ><TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 WIDTH="100%"><tr><TD ALIGN="right">Test svc_phone:</td><TD ALIGN="left"><A HREF="http://localhost/freeside/view/svc_phone.cgi?47">580124349433539</A></td></tr></table></TD> - - - </TR> - - -</TBODY> - -</TABLE> - - - - <FONT SIZE="+2">1</FONT> - - - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=100">2</A> - - - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=200">3</A> - - - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=300">4</A> - - - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=400">5</A> - - - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=500">6</A> - - - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=600">7</A> - - <A HREF="http://localhost/freeside/search/cust_pkg.cgi?keywords=pkgnum;_dummy=1;maxrecords=100;_type=html;offset=100"><B><FONT SIZE="+1">Next</FONT></B></A> - - - - </TD> - </TR> - </TABLE> - - - - - </TD> - </TR> - </TABLE> - </BODY> -</HTML> - - - - - - diff --git a/FS-Test/share/output/search/cust_pkg_churn.html/agentnum=:status=setup:begin=1438412400:end=1441090800:order_by=cust_pkg.pkgnum b/FS-Test/share/output/search/cust_pkg_churn.html/agentnum=:status=setup:begin=1438412400:end=1441090800:order_by=cust_pkg.pkgnum index 92493adbb..b9e53fa57 100644 --- a/FS-Test/share/output/search/cust_pkg_churn.html/agentnum=:status=setup:begin=1438412400:end=1441090800:order_by=cust_pkg.pkgnum +++ b/FS-Test/share/output/search/cust_pkg_churn.html/agentnum=:status=setup:begin=1438412400:end=1441090800:order_by=cust_pkg.pkgnum @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/search/cust_pkg_summary.cgi/beginning=02%2F01%2F2016:ending=02%2F28%2F2016:classnum=0 b/FS-Test/share/output/search/cust_pkg_summary.cgi/beginning=02%2F01%2F2016:ending=02%2F28%2F2016:classnum=0 index 5df716b94..f003efdf8 100644 --- a/FS-Test/share/output/search/cust_pkg_summary.cgi/beginning=02%2F01%2F2016:ending=02%2F28%2F2016:classnum=0 +++ b/FS-Test/share/output/search/cust_pkg_summary.cgi/beginning=02%2F01%2F2016:ending=02%2F28%2F2016:classnum=0 @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/search/h_cust_pkg.html/classnum=0:status=active,suspended:date=1454313600:pkgpart=2 b/FS-Test/share/output/search/h_cust_pkg.html/classnum=0:status=active,suspended:date=1454313600:pkgpart=2 index 404e26af0..1a8264147 100644 --- a/FS-Test/share/output/search/h_cust_pkg.html/classnum=0:status=active,suspended:date=1454313600:pkgpart=2 +++ b/FS-Test/share/output/search/h_cust_pkg.html/classnum=0:status=active,suspended:date=1454313600:pkgpart=2 @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/search/report_receivables.cgi/days=0:as_of=03%2F01%2F2016 b/FS-Test/share/output/search/report_receivables.cgi/days=0:as_of=03%2F01%2F2016 index dc51c8826..413100a94 100644 --- a/FS-Test/share/output/search/report_receivables.cgi/days=0:as_of=03%2F01%2F2016 +++ b/FS-Test/share/output/search/report_receivables.cgi/days=0:as_of=03%2F01%2F2016 @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/search/svc_acct.cgi/magic=all:sortby=username b/FS-Test/share/output/search/svc_acct.cgi/magic=all:sortby=username index 88ac10dde..64f89ba0c 100644 --- a/FS-Test/share/output/search/svc_acct.cgi/magic=all:sortby=username +++ b/FS-Test/share/output/search/svc_acct.cgi/magic=all:sortby=username @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/search/svc_broadband.cgi/magic=advanced:custnum=:agentnum=1:routernum=none:cust_pkg_fields=:cust_fields=:_dummy=1:maxrecords=100:_type=html:offset=0:order_by=ip_addr b/FS-Test/share/output/search/svc_broadband.cgi/magic=advanced:custnum=:agentnum=1:routernum=none:cust_pkg_fields=:cust_fields=:_dummy=1:maxrecords=100:_type=html:offset=0:order_by=ip_addr index 896f7201f..22ffa22b8 100644 --- a/FS-Test/share/output/search/svc_broadband.cgi/magic=advanced:custnum=:agentnum=1:routernum=none:cust_pkg_fields=:cust_fields=:_dummy=1:maxrecords=100:_type=html:offset=0:order_by=ip_addr +++ b/FS-Test/share/output/search/svc_broadband.cgi/magic=advanced:custnum=:agentnum=1:routernum=none:cust_pkg_fields=:cust_fields=:_dummy=1:maxrecords=100:_type=html:offset=0:order_by=ip_addr @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/search/svc_domain.cgi/magic=all:sortby=domain b/FS-Test/share/output/search/svc_domain.cgi/magic=all:sortby=domain index b7df3545a..c38527045 100644 --- a/FS-Test/share/output/search/svc_domain.cgi/magic=all:sortby=domain +++ b/FS-Test/share/output/search/svc_domain.cgi/magic=all:sortby=domain @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/search/svc_phone.cgi/magic=all:sortby=phonenum b/FS-Test/share/output/search/svc_phone.cgi/magic=all:sortby=phonenum index 915073f3f..01ca7a521 100644 --- a/FS-Test/share/output/search/svc_phone.cgi/magic=all:sortby=phonenum +++ b/FS-Test/share/output/search/svc_phone.cgi/magic=all:sortby=phonenum @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/search/unprovisioned_services.html b/FS-Test/share/output/search/unprovisioned_services.html index e0c8d1dc6..af2ca4cea 100644 --- a/FS-Test/share/output/search/unprovisioned_services.html +++ b/FS-Test/share/output/search/unprovisioned_services.html @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/view/cust_bill-tex.cgi/invnum=681:notice_name=Invoice b/FS-Test/share/output/view/cust_bill-tex.cgi/invnum=681:notice_name=Invoice index 7d616f6af..fc9294b20 100644 --- a/FS-Test/share/output/view/cust_bill-tex.cgi/invnum=681:notice_name=Invoice +++ b/FS-Test/share/output/view/cust_bill-tex.cgi/invnum=681:notice_name=Invoice @@ -81,7 +81,7 @@ \begin{tabular}{ll}
\returninset
\begin{tabular}{ll}
- \makebox{ \includegraphics{/usr/local/etc/freeside/cache.DBI:Pg:dbname=freeside/cust_bill.681.aSksR2dX.eps}} &
+ \makebox{ \includegraphics{/usr/local/etc/freeside/cache.DBI:Pg:dbname=freeside/cust_bill.681.XoeuvJBe.eps}} &
\begin{minipage}[b]{5.5cm}
Freeside Test 5.0.1\\* 1234 Example Lane\\* @@ -142,7 +142,7 @@ Freeside Test 5.0.1 \returninset
\makebox{
\begin{tabular}{ll}
- \includegraphics{/usr/local/etc/freeside/cache.DBI:Pg:dbname=freeside/cust_bill.681.aSksR2dX.eps} &
+ \includegraphics{/usr/local/etc/freeside/cache.DBI:Pg:dbname=freeside/cust_bill.681.XoeuvJBe.eps} &
\begin{minipage}[b]{5.5cm}
Freeside Test 5.0.1\\* 1234 Example Lane\\* @@ -152,7 +152,7 @@ Exampleton, CA~~54321\\* }
}
{ % ... pages
- %\includegraphics{/usr/local/etc/freeside/cache.DBI:Pg:dbname=freeside/cust_bill.681.aSksR2dX.eps} % Uncomment if you want the logo on all pages.
+ %\includegraphics{/usr/local/etc/freeside/cache.DBI:Pg:dbname=freeside/cust_bill.681.XoeuvJBe.eps} % Uncomment if you want the logo on all pages.
}
}
diff --git a/FS-Test/share/output/view/cust_bill.cgi/681 b/FS-Test/share/output/view/cust_bill.cgi/681 index 3ffad465f..53e49287f 100644 --- a/FS-Test/share/output/view/cust_bill.cgi/681 +++ b/FS-Test/share/output/view/cust_bill.cgi/681 @@ -617,7 +617,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/view/cust_main.cgi/135 b/FS-Test/share/output/view/cust_main.cgi/135 index 011c96f0b..5787fca15 100644 --- a/FS-Test/share/output/view/cust_main.cgi/135 +++ b/FS-Test/share/output/view/cust_main.cgi/135 @@ -617,7 +617,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/view/cust_main.cgi/custnum=135:show=change_history b/FS-Test/share/output/view/cust_main.cgi/custnum=135:show=change_history index 6d7fd40e1..0b800d686 100644 --- a/FS-Test/share/output/view/cust_main.cgi/custnum=135:show=change_history +++ b/FS-Test/share/output/view/cust_main.cgi/custnum=135:show=change_history @@ -617,7 +617,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/view/cust_main.cgi/custnum=135:show=packages b/FS-Test/share/output/view/cust_main.cgi/custnum=135:show=packages index 132d5f6d0..20a969b89 100644 --- a/FS-Test/share/output/view/cust_main.cgi/custnum=135:show=packages +++ b/FS-Test/share/output/view/cust_main.cgi/custnum=135:show=packages @@ -617,7 +617,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/view/cust_main.cgi/custnum=135:show=payment_history b/FS-Test/share/output/view/cust_main.cgi/custnum=135:show=payment_history index 58e3b142c..e1e75c58e 100644 --- a/FS-Test/share/output/view/cust_main.cgi/custnum=135:show=payment_history +++ b/FS-Test/share/output/view/cust_main.cgi/custnum=135:show=payment_history @@ -617,7 +617,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/view/cust_main.cgi/custnum=2:show=packages b/FS-Test/share/output/view/cust_main.cgi/custnum=2:show=packages index ba5791957..757aa17fe 100644 --- a/FS-Test/share/output/view/cust_main.cgi/custnum=2:show=packages +++ b/FS-Test/share/output/view/cust_main.cgi/custnum=2:show=packages @@ -617,7 +617,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -2373,6 +2373,216 @@ function clearhint_search_cust_svc(obj, str) { </TR> + + <!--pkgnum: 602--> + <TR CLASS="row1"> + <TD CLASS="inv package" BGCOLOR="" VALIGN="top"> + + <TABLE CLASS="inv package"> + <TR> + <TD COLSPAN=2> + + <A NAME="cust_pkg602" + ID ="cust_pkg602" + ><B>Test one-time charge</B></A> + - + $100.00 - $100.00 one-time + </TD> + </TR> + + + <TR> + <TD COLSPAN=2> + <FONT SIZE=-1> + + ( <A HREF="javascript:void(0);" + onClick="overlib( OLiframeContent('http://localhost/freeside/edit/quick-charge.html?change_pkgnum=602;pkgnum=602', 690, 440, 'popup-0000000000-0000-000000000.000000', 0, 'auto' ), CAPTION, 'Modify package 602', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '#333399', CGCOLOR, '#333399', FGCOLOR, '#f8f8f8', CLOSETEXT, 'Close'); return false;" + + + +>Modify one-time charge</A> ) + ( <A HREF="javascript:void(0);" + onClick="overlib( OLiframeContent('http://localhost/freeside/edit/cust_pkg_discount.html?pkgnum=602', 616, 336, 'popup-0000000000-0000-000000000.000000', 0, 'auto' ), CAPTION, 'Discount package 602', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '#333399', CGCOLOR, '#333399', FGCOLOR, '#f8f8f8', CLOSETEXT, 'Close'); return false;" + + + +>Discount</A> ) + <BR> + + </FONT> + </TD> + </TR> + + + <TR> + <TD COLSPAN=2> + + + + </TD> + </TR> + + + <TR> + <TD COLSPAN=2> + + + <FONT SIZE="-1"> + ( <A HREF="javascript:void(0);" + onClick="overlib( OLiframeContent('http://localhost/freeside/edit/cust_pkg_salesnum.html?;pkgnum=602', 390, 220, 'popup-0000000000-0000-000000000.000000', 0, 'auto' ), CAPTION, 'Change package 602', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '#333399', CGCOLOR, '#333399', FGCOLOR, '#f8f8f8', CLOSETEXT, 'Close'); return false;" + + + +>Change sales person</A> ) + </FONT> + + </TD> + </TR> + + + + <TR> + + <TD> + <FONT SIZE="-1"> + ( <A HREF="javascript:void(0);" + onClick="overlib( OLiframeContent('http://localhost/freeside/edit/cust_pkg_detail.html?pkgnum=602;detailtype=I', 763, 336, 'popup-0000000000-0000-000000000.000000', 0, 'auto' ), CAPTION, 'Add invoice details', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '#333399', CGCOLOR, '#333399', FGCOLOR, '#f8f8f8', CLOSETEXT, 'Close'); return false;" + + + +>Add invoice details</A> ) + </FONT> + </TD> + + <TD> + <FONT SIZE="-1"> + ( <A HREF="javascript:void(0);" + onClick="overlib( OLiframeContent('http://localhost/freeside/edit/cust_pkg_detail.html?pkgnum=602;detailtype=C', 763, 336, 'popup-0000000000-0000-000000000.000000', 0, 'auto' ), CAPTION, 'Add comments', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '#333399', CGCOLOR, '#333399', FGCOLOR, '#f8f8f8', CLOSETEXT, 'Close'); return false;" + + + +>Add comments</A> ) + </FONT> + </TD> + + </TR> + + + </TABLE> + + + +</TD> + + + <TD CLASS="inv" BGCOLOR="" VALIGN="top"> + <TABLE CLASS="inv" BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%"> + + + <TR><TD WIDTH="" ALIGN="right">Ordered </TD><TD align="left"><B>Mar</B></TD><TD align="right"><B> 2nd,</B></TD><TD align="right"><B> 2016</B></TD></TR> + + + <TR><TD COLSPAN=4 >One-time charge</TD></TR> + + <TR><TD WIDTH="" ALIGN="right">Billed </TD><TD align="left"><B>Mar</B></TD><TD align="right"><B> 2nd,</B></TD><TD align="right"><B> 2016</B></TD></TR> + + + + + + + + + + + + + + + + + + + + + + </TABLE> +</TD> + + <TD CLASS="inv" BGCOLOR="" WIDTH="20%" VALIGN="top"> + <FONT SIZE=-1> + ( <A HREF="javascript:void(0);" + onClick="overlib( OLiframeContent('http://localhost/freeside/misc/change_pkg_contact.html?pkgnum=602', 616, 192, 'popup-0000000000-0000-000000000.000000', 0, 'auto' ), CAPTION, 'Add contact package 602', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '#333399', CGCOLOR, '#333399', FGCOLOR, '#f8f8f8', CLOSETEXT, 'Close'); return false;" + + + +>Add contact</A> ) + </FONT> + <BR> + + <DIV STYLE="font-style: italic; font-size: small"> + + Default service location<BR>24866 VonRueden Roads<BR>Floor 94 X<BR>Crown Point CT 59629-7714 + + <BR> + <FONT SIZE=-1> + 38.5000000, -121.5000000 + + +<A HREF="javascript:void(0);" + onClick="overlib( OLiframeContent('http://localhost/freeside/view/map.html?name=Oswald%20Schowalter%3A%20Test%20one-time%20charge;lat=38.5000000;lon=-121.5000000', 763, 575, 'popup-0000000000-0000-000000000.000000', 0, 'auto' ), CAPTION, 'Oswald Schowalter: Test one-time charge', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '#333399', CGCOLOR, '#333399', FGCOLOR, '#f8f8f8', CLOSETEXT, 'Close'); return false;" + + + +>map</A> + + <A HREF="javascript:void(0);" + onClick="overlib( OLiframeContent('http://localhost/freeside/view/directions.html?origin=1234%20Example%20Lane%2CExampleton%2C%20CA%20%2054321;name=Oswald%20Schowalter%3A%20Test%20one-time%20charge;lat=38.5000000;lon=-121.5000000', 763, 575, 'popup-0000000000-0000-000000000.000000', 0, 'auto' ), CAPTION, 'Oswald Schowalter: Test one-time charge', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '#333399', CGCOLOR, '#333399', FGCOLOR, '#f8f8f8', CLOSETEXT, 'Close'); return false;" + + + +>directions</A> + +<A HREF="http://localhost/freeside/view/kml.cgi?name=Oswald%20Schowalter%3A%20Test%20one-time%20charge;lat=38.5000000;lon=-121.5000000">earth</A> + + + </FONT> + + </DIV> + + <BR> + <FONT SIZE=-1> + ( <A HREF="javascript:void(0);" + onClick="overlib( OLiframeContent('http://localhost/freeside/misc/change_pkg.cgi?locationnum=-1;pkgpart=6;address1=;address2=;city=;county=;state=;zip=;country=;pkgnum=602', 960, 490, 'popup-0000000000-0000-000000000.000000', 0, 'auto' ), CAPTION, 'Change package 602', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '#333399', CGCOLOR, '#333399', FGCOLOR, '#f8f8f8', CLOSETEXT, 'Close'); return false;" + + + +>Change location</A> ) + ( <A HREF="javascript:void(0);" + onClick="overlib( OLiframeContent('http://localhost/freeside/edit/cust_location.cgi?locationnum=3', 700, 355, 'popup-0000000000-0000-000000000.000000', 0, 'auto' ), CAPTION, 'Edit', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '#333399', CGCOLOR, '#333399', FGCOLOR, '#f8f8f8', CLOSETEXT, 'Close'); return false;" + + + +>Edit location</A> ) + </FONT> + + </TD> + + <TD CLASS="inv" BGCOLOR=""> + <TABLE CLASS="inv" BORDER=0 CELLSPACING=0 CELLPADDING=2 WIDTH="100%"> + <SCRIPT TYPE="text/javascript"> +function clearhint_search_cust_svc(obj, str) { + if (obj.value == str) obj.value = ''; +} + </SCRIPT> + + + </TABLE> + </TD> + + + </TR> + </TABLE> diff --git a/FS-Test/share/output/view/cust_main.cgi/custnum=2:show=payment_history b/FS-Test/share/output/view/cust_main.cgi/custnum=2:show=payment_history index 36a01b077..8d15d4190 100644 --- a/FS-Test/share/output/view/cust_main.cgi/custnum=2:show=payment_history +++ b/FS-Test/share/output/view/cust_main.cgi/custnum=2:show=payment_history @@ -617,7 +617,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -1620,6 +1620,35 @@ function areyousure(href, message) { </TR> + <TR > + <TD VALIGN="top" CLASS="grid" BGCOLOR="#eeeeee"> + + 03/02/2016 + + </FONT> + </TD> + <TD CLASS="grid" BGCOLOR="#eeeeee"> + <A HREF="http://localhost/freeside/view/cust_bill.cgi?1585"><B><FONT SIZE="+1" COLOR="#FF0000">Open Invoice #1585 (Balance 100.00)</FONT></B></A> + + </TD> + <TD VALIGN="top" ALIGN="right" CLASS="grid" BGCOLOR="#eeeeee"> + $100.00 + </TD> + <TD VALIGN="top" ALIGN="right" CLASS="grid" BGCOLOR="#eeeeee"> + + </TD> + <TD VALIGN="top" ALIGN="right" CLASS="grid" BGCOLOR="#eeeeee"> + + </TD> + <TD VALIGN="top" ALIGN="right" CLASS="grid" BGCOLOR="#eeeeee"> + + </TD> + <TD VALIGN="top" ALIGN="right" CLASS="grid" BGCOLOR="#eeeeee"> + $874.03 + </TD> + </TR> + + </TABLE> </TD> </TR> diff --git a/FS-Test/share/output/view/svc_acct.cgi/406 b/FS-Test/share/output/view/svc_acct.cgi/406 index 32d9a568a..60867f8d4 100644 --- a/FS-Test/share/output/view/svc_acct.cgi/406 +++ b/FS-Test/share/output/view/svc_acct.cgi/406 @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -1015,7 +1015,7 @@ function updateTicketLink() { } </SCRIPT> <A NAME="tickets"><FONT CLASS="fsinnerbox-title">Tickets</FONT></A> -<A id="CreateTicketLink" HREF="http://localhost/freeside//rt/Ticket/Create.html?Requestors=&new-MemberOf=freeside%3A%2F%2Ffreeside%2Fcust_svc%2F406&Queue=1">Create new ticket</A> +<A id="CreateTicketLink" HREF="http://localhost/freeside//rt/Ticket/Create.html?Requestors=&Queue=1&new-MemberOf=freeside%3A%2F%2Ffreeside%2Fcust_svc%2F406">Create new ticket</A> in queue <SELECT NAME="Queue" id="Queue" onchange="updateTicketLink()"> </SELECT> diff --git a/FS-Test/share/output/view/svc_broadband.cgi/401 b/FS-Test/share/output/view/svc_broadband.cgi/401 index 31877d80e..8bf4026f9 100644 --- a/FS-Test/share/output/view/svc_broadband.cgi/401 +++ b/FS-Test/share/output/view/svc_broadband.cgi/401 @@ -634,7 +634,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); diff --git a/FS-Test/share/output/view/svc_domain.cgi/402 b/FS-Test/share/output/view/svc_domain.cgi/402 index 71977b5d2..b930c3c19 100644 --- a/FS-Test/share/output/view/svc_domain.cgi/402 +++ b/FS-Test/share/output/view/svc_domain.cgi/402 @@ -618,7 +618,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -1025,11 +1025,11 @@ Service #<B>402</B> function updateTicketLink() { var link = document.getElementById('CreateTicketLink'); var selector = document.getElementById('Queue') - link.href = "http://localhost/freeside//rt/Ticket/Create.html?new-MemberOf=freeside://freeside/cust_svc/402;Requestors=;Queue=" + selector.options[selector.selectedIndex].value; + link.href = "http://localhost/freeside//rt/Ticket/Create.html?Requestors=;new-MemberOf=freeside://freeside/cust_svc/402;Queue=" + selector.options[selector.selectedIndex].value; } </SCRIPT> <A NAME="tickets"><FONT CLASS="fsinnerbox-title">Tickets</FONT></A> -<A id="CreateTicketLink" HREF="http://localhost/freeside//rt/Ticket/Create.html?Requestors=&Queue=1&new-MemberOf=freeside%3A%2F%2Ffreeside%2Fcust_svc%2F402">Create new ticket</A> +<A id="CreateTicketLink" HREF="http://localhost/freeside//rt/Ticket/Create.html?Requestors=&new-MemberOf=freeside%3A%2F%2Ffreeside%2Fcust_svc%2F402&Queue=1">Create new ticket</A> in queue <SELECT NAME="Queue" id="Queue" onchange="updateTicketLink()"> </SELECT> diff --git a/FS-Test/share/output/view/svc_phone.cgi/403 b/FS-Test/share/output/view/svc_phone.cgi/403 index 8d53bc103..1389fd7eb 100644 --- a/FS-Test/share/output/view/svc_phone.cgi/403 +++ b/FS-Test/share/output/view/svc_phone.cgi/403 @@ -634,7 +634,7 @@ myMenu48.add(new WebFXMenuItem("Billing", null, "", myMenu65 )); myMenu48.add(new WebFXMenuSeparator()); var myMenu67 = new WebFXMenu; myMenu67.emptyText = ''; -myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template.html", "Templates for customer notices" )); +myMenu67.add(new WebFXMenuItem("Message templates", "http://localhost/freeside/browse/msg_template/email.html", "Templates for customer notices" )); myMenu67.add(new WebFXMenuItem("Advertising sources", "http://localhost/freeside/browse/part_referral.html", "Where a customer heard about your service." )); myMenu67.add(new WebFXMenuItem("Custom fields", "http://localhost/freeside/browse/part_virtual_field.html", "Locally defined fields" )); myMenu67.add(new WebFXMenuItem("Translation strings", "http://localhost/freeside/browse/msgcat.html", "Translations and other customizable labels for each locale" )); @@ -954,7 +954,7 @@ function areyousure_delete() { </TD> <TD CLASS="content"> - <A HREF="http://localhost/freeside/view/svc_circuit.html?"></A> + <A HREF="http://localhost/freeside/view/svc_circuit.cgi?"></A> </TD> </TR> @@ -977,7 +977,7 @@ function areyousure_delete() { function updateTicketLink() { var link = document.getElementById('CreateTicketLink'); var selector = document.getElementById('Queue') - link.href = "http://localhost/freeside//rt/Ticket/Create.html?new-MemberOf=freeside://freeside/cust_svc/403;Requestors=;Queue=" + selector.options[selector.selectedIndex].value; + link.href = "http://localhost/freeside//rt/Ticket/Create.html?Requestors=;new-MemberOf=freeside://freeside/cust_svc/403;Queue=" + selector.options[selector.selectedIndex].value; } </SCRIPT> <A NAME="tickets"><FONT CLASS="fsinnerbox-title">Tickets</FONT></A> diff --git a/FS-Test/share/ui_tests b/FS-Test/share/ui_tests index 8292ae521..2370a1d9b 100644 --- a/FS-Test/share/ui_tests +++ b/FS-Test/share/ui_tests @@ -1,7 +1,7 @@ # reports menu items search/cust_main.cgi?browse=last -search/cust_bill.html?OPEN90_date -search/cust_bill.html?date +search/cust_bill.html?keywords=OPEN90_date:order_by=invnum +search/cust_bill.html?keywords=date:order_by=invnum search/cust_bill.html?magic=_date&agentnum=1&beginning=&ending=10%2F01%2F2015&charged_lt=&charged_gt=200.00&owed_lt=&owed_gt=&open=1 search/cust_bill_pkg.cgi?agentnum=1&status=&cust_classnum=&beginning=01%2F01%2F2016&ending=01%2F31%2F2016 search/cust_pay.html?magic=_date&unapplied=0&beginning=01%2F01%2F2016&agentnum=1&order_by=paynum diff --git a/FS/FS/API.pm b/FS/FS/API.pm index f848361ac..9dbbc3c4f 100644 --- a/FS/FS/API.pm +++ b/FS/FS/API.pm @@ -24,7 +24,9 @@ This module implements a backend API for advanced back-office integration. In contrast to the self-service API, which authenticates an end-user and offers functionality to that end user, the backend API performs a simple shared-secret authentication and offers full, administrator functionality, enabling -integration with other back-office systems. +integration with other back-office systems. Only access this API from a secure +network from other backoffice machines. DON'T use this API to create customer +portal functionality. If accessing this API remotely with XML-RPC or JSON-RPC, be careful to block the port by default, only allow access from back-office servers with the same diff --git a/FS/FS/AccessRight.pm b/FS/FS/AccessRight.pm index 9274ad858..95cf29a8b 100644 --- a/FS/FS/AccessRight.pm +++ b/FS/FS/AccessRight.pm @@ -209,7 +209,6 @@ tie my %rights, 'Tie::IxHash', { rightname=>'Process payment', desc=>'Process credit card or e-check payments' }, 'Process credit card payment', 'Process Echeck payment', - { rightname=>'Delete payment', desc=>'Enable deletion of unclosed payments. Be very careful! Only delete payments that were data-entry errors, not adjustments.' }, #aka. deletepayments Optionally specify one or more comma-separated email addresses to be notified when a payment is deleted. ], ### @@ -223,7 +222,6 @@ tie my %rights, 'Tie::IxHash', 'Void credit', #NEWER than things marked NEWNEWNEW 'Unvoid credit', #NEWER than things marked NEWNEWNEW { rightname=>'Unapply credit', desc=>'Enable "unapplication" of unclosed credits.' }, #aka unapplycredits - { rightname=>'Delete credit', desc=>'Enable deletion of unclosed credits. Be very careful! Only delete credits that were data-entry errors, not adjustments.' }, #aka. deletecredits Optionally specify one or more comma-separated email addresses to be notified when a credit is deleted. 'View refunds', { rightname=>'Post refund', desc=>'Enable posting of check and cash refunds.' }, 'Post check refund', @@ -288,6 +286,7 @@ tie my %rights, 'Tie::IxHash', 'Billing event reports', 'Receivables report', 'Financial reports', + { rightname=>'Send reports to customers', global=>1 }, { rightname=> 'List inventory', global=>1 }, { rightname=>'View email logs', global=>1 }, { rightname=>'View system logs' }, @@ -440,8 +439,6 @@ Most (but not all) right names. sub default_superuser_rights { my $class = shift; my %omit = map { $_=>1 } ( - 'Delete payment', - 'Delete credit', #? 'Delete refund', #? 'Edit customer package dates', 'Time queue', diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index 824ff67cb..98b87ad55 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -1142,37 +1142,6 @@ sub do_process_payment { my $payby = delete $validate->{'payby'}; - my $error = $cust_main->realtime_bop( $FS::payby::payby2bop{$payby}, $amount, - 'quiet' => 1, - 'manual' => 1, - 'selfservice' => 1, - 'paynum_ref' => \$paynum, - %$validate, - ); - return { 'error' => $error } if $error; - - #no error, so order the fee package if applicable... - my $conf = new FS::Conf; - my $fee_pkgpart = $conf->config('selfservice_process-pkgpart', $cust_main->agentnum); - my $fee_skip_first = $conf->exists('selfservice_process-skip_first'); - - if ( $fee_pkgpart and ! $fee_skip_first || scalar($cust_main->cust_pay) ) { - - my $cust_pkg = new FS::cust_pkg { 'pkgpart' => $fee_pkgpart }; - - $error = $cust_main->order_pkg( 'cust_pkg' => $cust_pkg ); - return { 'error' => "payment processed successfully, but error ordering fee: $error" } - if $error; - - #and generate an invoice for it now too - $error = $cust_main->bill( 'pkg_list' => [ $cust_pkg ] ); - return { 'error' => "payment processed and fee ordered sucessfully, but error billing fee: $error" } - if $error; - - } - - $cust_main->apply_payments; - if ( $validate->{'save'} ) { my $new = new FS::cust_main { $cust_main->hash }; if ($payby eq 'CARD' || $payby eq 'DCRD') { @@ -1193,7 +1162,7 @@ sub do_process_payment { stateid stateid_state ); $new->set( 'payby' => $validate->{'auto'} ? 'CHEK' : 'DCHK' ); } - $new->set( 'payinfo' => $cust_main->card_token || $validate->{'payinfo'} ); + $new->payinfo( $validate->{'payinfo'} ); #to properly set paymask $new->set( 'paydate' => $validate->{'paydate'} ); my $error = $new->replace($cust_main); if ( $error ) { @@ -1201,18 +1170,48 @@ sub do_process_payment { #return { 'error' => $error }; #XXX just warn verosely for now so i can figure out how these happen in # the first place, eventually should redirect them to the "change - #address" page but indicate the payment did process?? + #address" page but indicate if the payment processed? delete($validate->{'payinfo'}); #don't want to log this! warn "WARNING: error changing customer info when processing payment (not returning to customer as a processing error): $error\n". "NEW: ". Dumper($new)."\n". "OLD: ". Dumper($cust_main)."\n". "PACKET: ". Dumper($validate)."\n"; - #} else { - #not needed... - #$cust_main = $new; + } else { + $cust_main = $new; } } + my $error = $cust_main->realtime_bop( $FS::payby::payby2bop{$payby}, $amount, + 'quiet' => 1, + 'manual' => 1, + 'selfservice' => 1, + 'paynum_ref' => \$paynum, + %$validate, + ); + return { 'error' => $error } if $error; + + #no error, so order the fee package if applicable... + my $conf = new FS::Conf; + my $fee_pkgpart = $conf->config('selfservice_process-pkgpart', $cust_main->agentnum); + my $fee_skip_first = $conf->exists('selfservice_process-skip_first'); + + if ( $fee_pkgpart and ! $fee_skip_first || scalar($cust_main->cust_pay) ) { + + my $cust_pkg = new FS::cust_pkg { 'pkgpart' => $fee_pkgpart }; + + $error = $cust_main->order_pkg( 'cust_pkg' => $cust_pkg ); + return { 'error' => "payment processed successfully, but error ordering fee: $error" } + if $error; + + #and generate an invoice for it now too + $error = $cust_main->bill( 'pkg_list' => [ $cust_pkg ] ); + return { 'error' => "payment processed and fee ordered sucessfully, but error billing fee: $error" } + if $error; + + } + + $cust_main->apply_payments; + my $cust_pay = ''; my $receipt_html = ''; if ($paynum) { @@ -3032,7 +3031,7 @@ sub reset_passwd { my($username, $domain) = split('@', $p->{'email'}); my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ); if ( $svc_domain ) { - $svc_acct = qsearchs('svc_acct', { 'username' => $p->{'username'}, + $svc_acct = qsearchs('svc_acct', { 'username' => $username, 'domsvc' => $svc_domain->svcnum } ); if ( $svc_acct ) { @@ -3120,7 +3119,7 @@ sub reset_passwd { my $reset_session = { 'svcnum' => $svc_acct->svcnum, - 'agentnum' => + 'agentnum' => $svc_acct->cust_main->agentnum, }; my $timeout = '1 hour'; #? diff --git a/FS/FS/ClientAPI_XMLRPC.pm b/FS/FS/ClientAPI_XMLRPC.pm index 435ee9835..dbcb565fa 100644 --- a/FS/FS/ClientAPI_XMLRPC.pm +++ b/FS/FS/ClientAPI_XMLRPC.pm @@ -30,6 +30,7 @@ L<FS::SelfService::XMLRPC>, L<FS::SelfService> use strict; use vars qw($DEBUG $AUTOLOAD); +use Encode; use FS::XMLRPC_Lite; #XMLRPC::Lite, for XMLRPC::Data use FS::ClientAPI; @@ -67,12 +68,17 @@ sub AUTOLOAD { shift; #discard package name; + #$call = "FS::SelfService::$call"; #no strict 'refs'; #&{$call}(@_); #FS::ClientAPI->dispatch($autoload->{$call}, @_); - my $return = FS::ClientAPI->dispatch($autoload->{$call}, { @_ } ); + my %hash = @_; + #XXX doesn't handle multi-level data structs + $hash{$_} = decode(utf8=>$hash{$_}) foreach keys %hash; + + my $return = FS::ClientAPI->dispatch($autoload->{$call}, \%hash ); if ( exists($typefix{$call}) ) { my $typefix = $typefix{$call}; @@ -85,7 +91,7 @@ sub AUTOLOAD { $return; - }else{ + } else { die "No such procedure: $call"; } } diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index a22e236a2..647ae0bdf 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -1039,16 +1039,6 @@ my $validate_email = sub { $_[0] =~ }, { - 'key' => 'deletecredits', - #not actually deprecated yet - #'section' => 'deprecated', - #'description' => '<B>DEPRECATED</B>, now controlled by ACLs. Used to enable deletion of unclosed credits. Be very careful! Only delete credits that were data-entry errors, not adjustments. Optionally specify one or more comma-separated email addresses to be notified when a credit is deleted.', - 'section' => '', - 'description' => 'One or more comma-separated email addresses to be notified when a credit is deleted.', - 'type' => [qw( checkbox text )], - }, - - { 'key' => 'deleterefunds', 'section' => 'billing', 'description' => 'Enable deletion of unclosed refunds. Be very careful! Only delete refunds that were data-entry errors, not adjustments.', @@ -1547,7 +1537,7 @@ and customer address. Include units.', 'type' => 'select', 'per_agent' => 1, 'select_enum' => [ - '', 'Payable upon receipt', 'Net 0', 'Net 3', 'Net 5', 'Net 9', 'Net 10', 'Net 14', + '', 'Payable upon receipt', 'Net 0', 'Net 3', 'Net 5', 'Net 7', 'Net 9', 'Net 10', 'Net 14', 'Net 15', 'Net 18', 'Net 20', 'Net 21', 'Net 25', 'Net 30', 'Net 45', 'Net 60', 'Net 90' ], }, @@ -1673,13 +1663,6 @@ and customer address. Include units.', }, { - 'key' => 'payment_receipt_email', - 'section' => 'deprecated', - 'description' => 'Template file for payment receipts. Payment receipts are sent to the customer email invoice destination(s) when a payment is received.', - 'type' => [qw( checkbox textarea )], - }, - - { 'key' => 'payment_receipt-trigger', 'section' => 'notification', 'description' => 'When payment receipts are triggered. Defaults to when payment is made.', @@ -2365,13 +2348,6 @@ and customer address. Include units.', }, { - 'key' => 'declinetemplate', - 'section' => 'deprecated', - 'description' => 'Template file for credit card and electronic check decline emails.', - 'type' => 'textarea', - }, - - { 'key' => 'emaildecline', 'section' => 'notification', 'description' => 'Enable emailing of credit card and electronic check decline notices.', @@ -2395,20 +2371,6 @@ and customer address. Include units.', }, { - 'key' => 'cancelmessage', - 'section' => 'deprecated', - 'description' => 'Template file for cancellation emails.', - 'type' => 'textarea', - }, - - { - 'key' => 'cancelsubject', - 'section' => 'deprecated', - 'description' => 'Subject line for cancellation emails.', - 'type' => 'text', - }, - - { 'key' => 'emailcancel', 'section' => 'notification', 'description' => 'Enable emailing of cancellation notices. Make sure to select the template in the cancel_msgnum option.', @@ -2532,86 +2494,17 @@ and customer address. Include units.', }, { - 'key' => 'welcome_email', - 'section' => 'deprecated', - 'description' => 'Template file for welcome email. Welcome emails are sent to the customer email invoice destination(s) each time a svc_acct record is created.', - 'type' => 'textarea', - 'per_agent' => 1, - }, - - { - 'key' => 'welcome_email-from', - 'section' => 'deprecated', - 'description' => 'From: address header for welcome email', - 'type' => 'text', - 'per_agent' => 1, - }, - - { - 'key' => 'welcome_email-subject', - 'section' => 'deprecated', - 'description' => 'Subject: header for welcome email', - 'type' => 'text', - 'per_agent' => 1, - }, - - { - 'key' => 'welcome_email-mimetype', - 'section' => 'deprecated', - 'description' => 'MIME type for welcome email', - 'type' => 'select', - 'select_enum' => [ 'text/plain', 'text/html' ], - 'per_agent' => 1, - }, - - { 'key' => 'welcome_letter', 'section' => '', 'description' => 'Optional LaTex template file for a printed welcome letter. A welcome letter is printed the first time a cust_pkg record is created. See the <a href="http://search.cpan.org/dist/Text-Template/lib/Text/Template.pm">Text::Template</a> documentation and the billing documentation for details on the template substitution language. A variable exists for each fieldname in the customer record (<code>$first, $last, etc</code>). The following additional variables are available<ul><li><code>$payby</code> - a friendler represenation of the field<li><code>$payinfo</code> - the masked payment information<li><code>$expdate</code> - the time at which the payment method expires (a UNIX timestamp)<li><code>$returnaddress</code> - the invoice return address for this customer\'s agent</ul>', 'type' => 'textarea', }, -# { -# 'key' => 'warning_msgnum', -# 'section' => 'notification', -# 'description' => 'Template to use for warning messages, sent to the customer email invoice destination(s) when a svc_acct record has its usage drop below a threshold.', -# %msg_template_options, -# }, - - { - 'key' => 'warning_email', - 'section' => 'notification', - 'description' => 'Template file for warning email. Warning emails are sent to the customer email invoice destination(s) each time a svc_acct record has its usage drop below a threshold or 0. See the <a href="http://search.cpan.org/dist/Text-Template/lib/Text/Template.pm">Text::Template</a> documentation for details on the template substitution language. The following variables are available<ul><li><code>$username</code> <li><code>$password</code> <li><code>$first</code> <li><code>$last</code> <li><code>$pkg</code> <li><code>$column</code> <li><code>$amount</code> <li><code>$threshold</code></ul>', - 'type' => 'textarea', - }, - - { - 'key' => 'warning_email-from', - 'section' => 'notification', - 'description' => 'From: address header for warning email', - 'type' => 'text', - }, - - { - 'key' => 'warning_email-cc', - 'section' => 'notification', - 'description' => 'Additional recipient(s) (comma separated) for warning email when remaining usage reaches zero.', - 'type' => 'text', - }, - { - 'key' => 'warning_email-subject', + 'key' => 'threshold_warning_msgnum', 'section' => 'notification', - 'description' => 'Subject: header for warning email', - 'type' => 'text', - }, - - { - 'key' => 'warning_email-mimetype', - 'section' => 'notification', - 'description' => 'MIME type for warning email', - 'type' => 'select', - 'select_enum' => [ 'text/plain', 'text/html' ], + 'description' => 'Template to use for warning messages sent to the customer email invoice destination(s) when a svc_acct record has its usage drop below a threshold. Extra substitutions available: $column, $amount, $threshold', + %msg_template_options, }, { @@ -2619,7 +2512,7 @@ and customer address. Include units.', 'section' => 'billing', 'description' => 'Available payment types.', 'type' => 'selectmultiple', - 'select_enum' => [ qw(CARD DCRD CHEK DCHK CASH WEST MCRD MCHK PPAL) ], + 'select_enum' => [ qw(CARD DCRD CHEK DCHK BILL CASH WEST MCRD MCHK PPAL) ], }, { @@ -2711,14 +2604,6 @@ and customer address. Include units.', }, { - 'key' => 'dump-email_to', - 'section' => '', - 'description' => "Optional email address to send success/failure message for database dumps.", - 'type' => 'text', - 'validate' => $validate_email, - }, - - { 'key' => 'credit_card-recurring_billing_flag', 'section' => 'billing', 'description' => 'This controls when the system passes the "recurring_billing" flag on credit card transactions. If supported by your processor (and the Business::OnlinePayment processor module), passing the flag indicates this is a recurring transaction and may turn off the CVV requirement. ', @@ -3189,12 +3074,14 @@ and customer address. Include units.', } }, }, + { 'key' => 'ticket_system-force_default_queueid', 'section' => 'ticketing', 'description' => 'Disallow queue selection when creating new tickets from customer view.', 'type' => 'checkbox', }, + { 'key' => 'ticket_system-selfservice_queueid', 'section' => 'ticketing', @@ -3273,6 +3160,41 @@ and customer address. Include units.', }, { + 'key' => 'ticket_system-appointment-queueid', + 'section' => 'ticketing', + 'description' => 'Custom field from the ticketing system to use as an appointment classification.', + #false laziness w/above + 'type' => 'select-sub', + 'options_sub' => sub { + my $conf = new FS::Conf; + if ( $conf->config('ticket_system') ) { + eval "use FS::TicketSystem;"; + die $@ if $@; + FS::TicketSystem->queues(); + } else { + (); + } + }, + 'option_sub' => sub { + my $conf = new FS::Conf; + if ( $conf->config('ticket_system') ) { + eval "use FS::TicketSystem;"; + die $@ if $@; + FS::TicketSystem->queue(shift); + } else { + ''; + } + }, + }, + + { + 'key' => 'ticket_system-appointment-custom_field', + 'section' => 'ticketing', + 'description' => 'Custom field from the ticketing system to use as an appointment classification.', + 'type' => 'text', + }, + + { 'key' => 'ticket_system-escalation', 'section' => 'ticketing', 'description' => 'Enable priority escalation of tickets as part of daily batch processing.', @@ -3778,11 +3700,12 @@ and customer address. Include units.', 'select_enum' => [ 'approve', 'decline' ], }, + # replaces batch-errors_to (sent email on error) { - 'key' => 'batch-errors_to', + 'key' => 'batch-errors_not_fatal', 'section' => 'billing', - 'description' => 'Email errors when processing batches to this address. If unspecified, batch processing will stop immediately on error.', - 'type' => 'text', + 'description' => 'If checked, when importing batches from a gateway, item errors will be recorded in the system log without aborting processing. If unchecked, batch processing will fail on error.', + 'type' => 'checkbox', }, #lists could be auto-generated from pay_batch info @@ -4082,14 +4005,6 @@ and customer address. Include units.', }, { - 'key' => 'impending_recur_template', - 'section' => 'deprecated', - 'description' => 'Template file for alerts about looming first time recurrant billing. See the <a href="http://search.cpan.org/dist/Text-Template/lib/Text/Template.pm">Text::Template</a> documentation for details on the template substitition language. Also see packages with a <a href="../browse/part_pkg.cgi">flat price plan</a> The following variables are available<ul><li><code>$packages</code> allowing <code>$packages->[0]</code> thru <code>$packages->[n]</code> <li><code>$package</code> the first package, same as <code>$packages->[0]</code> <li><code>$recurdates</code> allowing <code>$recurdates->[0]</code> thru <code>$recurdates->[n]</code> <li><code>$recurdate</code> the first recurdate, same as <code>$recurdate->[0]</code> <li><code>$first</code> <li><code>$last</code></ul>', -# <li><code>$payby</code> <li><code>$expdate</code> most likely only confuse - 'type' => 'textarea', - }, - - { 'key' => 'logo.png', 'section' => 'UI', #'invoicing' ? 'description' => 'Company logo for HTML invoices and the backoffice interface, in PNG format. Suggested size somewhere near 92x62.', @@ -4300,7 +4215,7 @@ and customer address. Include units.', { 'key' => 'disable_previous_balance', 'section' => 'invoicing', - 'description' => 'Disable inclusion of previous balance, payment, and credit lines on invoices.', + 'description' => 'Show new charges only; do not list previous invoices, payments, or credits on the invoice.', 'type' => 'checkbox', 'per_agent' => 1, }, @@ -4648,13 +4563,6 @@ and customer address. Include units.', }, { - 'key' => 'email_report-subject', - 'section' => '', - 'description' => 'Subject for reports emailed by freeside-fetch. Defaults to "Freeside report".', - 'type' => 'text', - }, - - { 'key' => 'selfservice-head', 'section' => 'self-service', 'description' => 'HTML for the HEAD section of the self-service interface, typically used for LINK stylesheet tags', @@ -5781,13 +5689,6 @@ and customer address. Include units.', }, { - 'key' => 'agent-email_day', - 'section' => '', - 'description' => 'On this day of each month, agents with master customer records containing email addresses will be emailed a list of their customers and balances.', - 'type' => 'text', - }, - - { 'key' => 'report-cust_pay-select_time', 'section' => 'UI', 'description' => 'Enable time selection on payment and refund reports.', diff --git a/FS/FS/Cron/agent_email.pm b/FS/FS/Cron/agent_email.pm deleted file mode 100644 index 6bc1cc643..000000000 --- a/FS/FS/Cron/agent_email.pm +++ /dev/null @@ -1,79 +0,0 @@ -package FS::Cron::agent_email; -use base qw( Exporter ); - -use strict; -use vars qw( @EXPORT_OK $DEBUG ); -use Date::Simple qw(today); -use URI::Escape; -use FS::Mason qw( mason_interps ); -use FS::Conf; -use FS::Misc qw(send_email); -use FS::Record qw(qsearch);# qsearchs); -use FS::agent; - -@EXPORT_OK = qw ( agent_email ); -$DEBUG = 0; - -sub agent_email { - my %opt = @_; - - my $conf = new FS::Conf; - - my $day = $conf->config('agent-email_day') or return; - return unless $day == today->day; - - if ( 1 ) { #XXX if ( %%%RT_ENABLED%%% ) { - require RT; - RT::LoadConfig(); - RT::Init(); - RT::ConnectToDatabase(); - } - - my $from = $conf->invoice_from_full(); - - my $outbuf = '';; - my( $fs_interp, $rt_interp ) = mason_interps('standalone', 'outbuf'=>\$outbuf); - - my $comp = '/search/cust_main.html'; - my %args = ( - 'cust_fields' => 'Cust# | Cust. Status | Customer | Current Balance', - '_type' => 'html-print', - ); - my $query = join('&', map "$_=".uri_escape($args{$_}), keys %args ); - - my $extra_sql = $opt{a} ? " AND agentnum IN ( $opt{a} ) " : ''; - - foreach my $agent ( qsearch({ - 'table' => 'agent', - 'hashref' => { - 'disabled' => '', - 'agent_custnum' => { op=>'!=', value=>'' }, - }, - 'extra_sql' => $extra_sql, - }) - ) - { - - $FS::Mason::Request::QUERY_STRING = $query. '&agentnum='. $agent->agentnum; - $fs_interp->exec($comp); - - my @email = $agent->agent_cust_main->invoicing_list or next; - - warn "emailing ". join(',',@email). " for agent ". $agent->agent. "\n" - if $DEBUG; - send_email( - 'from' => $from, - 'to' => \@email, - 'subject' => 'Customer report', - 'body' => $outbuf, - 'content-type' => 'text/html', - #'content-encoding' - ); - - $outbuf = ''; - - } - -} - -1; diff --git a/FS/FS/Cron/backup.pm b/FS/FS/Cron/backup.pm index cfc8e3624..a192ca90e 100644 --- a/FS/FS/Cron/backup.pm +++ b/FS/FS/Cron/backup.pm @@ -6,7 +6,7 @@ use Exporter; use File::Copy; use Date::Format; use FS::UID qw(driver_name datasrc); -use FS::Misc qw( send_email ); +use FS::Log @ISA = qw( Exporter ); @EXPORT_OK = qw( backup ); @@ -20,7 +20,7 @@ sub backup { my $filename = time2str('%Y%m%d%H%M%S',time); datasrc =~ /dbname=([\w\.]+)$/ - or backup_email_and_die($conf,$filename,"unparsable datasrc ". datasrc); + or backup_log_and_die($filename,"unparsable datasrc ". datasrc); my $database = $1; my $ext; @@ -31,70 +31,61 @@ sub backup { system("mysqldump $database >/var/tmp/$database.sql"); $ext = 'sql'; } else { - backup_email_and_die($conf,$filename,"database dumps not yet supported for ". driver_name); + backup_log_and_die($filename,"database dumps not yet supported for ". driver_name); } chmod 0600, "/var/tmp/$database.$ext"; if ( $conf->config('dump-pgpid') ) { eval 'use GnuPG;'; - backup_email_and_die($conf,$filename,$@) if $@; + backup_log_and_die($filename,$@) if $@; my $gpg = new GnuPG; $gpg->encrypt( plaintext => "/var/tmp/$database.$ext", output => "/var/tmp/$database.gpg", recipient => $conf->config('dump-pgpid'), ); unlink "/var/tmp/$database.$ext" - or backup_email_and_die($conf,$filename,$!); + or backup_log_and_die($filename,$!); chmod 0600, "/var/tmp/$database.gpg"; $ext = 'gpg'; } if ( $localdest ) { copy("/var/tmp/$database.$ext", "$localdest/$filename.$ext") - or backup_email_and_die($conf,$filename,$!); + or backup_log_and_die($filename,$!); chmod 0600, "$localdest/$filename.$ext"; } if ( $scpdest ) { eval "use Net::SCP qw(scp);"; - backup_email_and_die($conf,$filename,$@) if $@; + backup_log_and_die($filename,$@) if $@; scp("/var/tmp/$database.$ext", "$scpdest/$filename.$ext"); } - unlink "/var/tmp/$database.$ext" or backup_email_and_die($conf,$filename,$!); #or just warn? + unlink "/var/tmp/$database.$ext" or backup_log_and_die($filename,$!); #or just warn? - backup_email($conf,$filename); + backup_log($filename); } -#runs backup_email and dies with same error message -sub backup_email_and_die { - my ($conf,$filename,$error) = @_; - backup_email($conf,$filename,$error); - warn "backup_email_and_die called without error message" unless $error; +#runs backup_log and dies with same error message +sub backup_log_and_die { + my ($filename,$error) = @_; + $error = "backup_log_and_die called without error message" unless $error; + backup_log($filename,$error); die $error; } -#checks if email should be sent, sends it -sub backup_email { - my ($conf,$filename,$error) = @_; - my $to = $conf->config('dump-email_to'); - return unless $to; - my $result = $error ? 'FAILED' : 'succeeded'; - my $email_error = send_email( - 'from' => $conf->config('invoice_from'), #or whatever, don't think it matters - 'to' => $to, - 'subject' => 'FREESIDE NOTIFICATION: Backup ' . $result, - 'body' => [ - "This is an automatic message from your Freeside installation.\n", - "Freeside backup $filename $result", - ($error ? " with the following error:\n\n" : "\n"), - ($error || ''), - "\n", - ], - 'msgtype' => 'admin', - ); - warn $email_error if $email_error; +#logs result +sub backup_log { + my ($filename,$error) = @_; + my $result = $error ? "FAILED: $error" : 'succeeded'; + my $message = "backup $filename $result\n"; + my $log = FS::Log->new('Cron::backup'); + if ($error) { + $log->error($message); + } else { + $log->info($message); + } return; } diff --git a/FS/FS/Cron/notify.pm b/FS/FS/Cron/notify.pm index 6d7065429..34977c8e6 100644 --- a/FS/FS/Cron/notify.pm +++ b/FS/FS/Cron/notify.pm @@ -111,15 +111,6 @@ END $error = $msg_template->send('cust_main' => $cust_main, 'object' => $cust_main); } - else { - $error = $cust_main->notify( 'impending_recur_template', - 'extra_fields' => { 'packages' => \@packages, - 'recurdates' => \@recurdates, - 'package' => $packages[0], - 'recurdate' => $recurdates[0], - }, - ); - } #if $msgnum warn "Error notifying, custnum ". $cust_main->custnum. ": $error" if $error; unless ($error) { diff --git a/FS/FS/Mason.pm b/FS/FS/Mason.pm index ae4f07cdb..98a75c8df 100644 --- a/FS/FS/Mason.pm +++ b/FS/FS/Mason.pm @@ -405,6 +405,10 @@ if ( -e $addl_handler_use_file ) { use FS::cust_pkg_reason_fee; use FS::part_svc_link; use FS::access_user_log; + use FS::report_batch; + use FS::report_batch; + use FS::report_batch; + use FS::report_batch; # Sammath Naur if ( $FS::Mason::addl_handler_use ) { diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm index cbf449520..18cb275bf 100644 --- a/FS/FS/Misc.pm +++ b/FS/FS/Misc.pm @@ -414,34 +414,6 @@ sub generate_email { } -=item process_send_email OPTION => VALUE ... - -Takes arguments as per generate_email() and sends the message. This -will die on any error and can be used in the job queue. - -=cut - -sub process_send_email { - my %message = @_; - my $error = send_email(generate_email(%message)); - die "$error\n" if $error; - ''; -} - -=item process_send_generated_email OPTION => VALUE ... - -Takes arguments as per send_email() and sends the message. This -will die on any error and can be used in the job queue. - -=cut - -sub process_send_generated_email { - my %args = @_; - my $error = send_email(%args); - die "$error\n" if $error; - ''; -} - =item send_fax OPTION => VALUE ... Options: diff --git a/FS/FS/Misc/DateTime.pm b/FS/FS/Misc/DateTime.pm index 2fff90647..56baec3ed 100644 --- a/FS/FS/Misc/DateTime.pm +++ b/FS/FS/Misc/DateTime.pm @@ -6,9 +6,10 @@ use Carp; use Time::Local; use Date::Parse; use DateTime::Format::Natural; +use Date::Format; use FS::Conf; -@EXPORT_OK = qw( parse_datetime day_end ); +@EXPORT_OK = qw( parse_datetime day_end iso8601 ); =head1 NAME @@ -65,11 +66,22 @@ same date but 23:59:59 for the time. =cut sub day_end { - my $time = shift; + my $time = shift; - my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = - localtime($time); - timelocal(59,59,23,$mday,$mon,$year); + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = + localtime($time); + timelocal(59,59,23,$mday,$mon,$year); +} + +=item iso8601 TIME + +Parses time as an integer UNIX timestamp and returns the ISO 8601 formatted +date and time. + +=cut + +sub iso8601 { + time2str('%Y-%m-%dT%T', @_); } =back diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index d6892a96c..fafceacb5 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -1300,8 +1300,7 @@ sub insert { my $table = $self->table; # Encrypt before the database - if ( defined(eval '@FS::'. $table . '::encrypted_fields') - && scalar( eval '@FS::'. $table . '::encrypted_fields') + if ( scalar( eval '@FS::'. $table . '::encrypted_fields') && $conf_encryption ) { foreach my $field (eval '@FS::'. $table . '::encrypted_fields') { @@ -1543,9 +1542,8 @@ sub replace { # Encrypt for replace my $saved = {}; - if ( $conf_encryption - && defined(eval '@FS::'. $new->table . '::encrypted_fields') - && scalar( eval '@FS::'. $new->table . '::encrypted_fields') + if ( scalar( eval '@FS::'. $new->table . '::encrypted_fields') + && $conf_encryption ) { foreach my $field (eval '@FS::'. $new->table . '::encrypted_fields') { next if $field eq 'payinfo' diff --git a/FS/FS/Report/Table.pm b/FS/FS/Report/Table.pm index 63e5318c3..eeb99bac5 100644 --- a/FS/FS/Report/Table.pm +++ b/FS/FS/Report/Table.pm @@ -485,9 +485,9 @@ sub cust_pkg_recur_cost { =item cust_bill_pkg: the total package charges on invoice line items. -'charges': limit the type of charges included (setup, recur, usage, discount). -Should be a string containing one or more of 'S', 'R', 'U', or 'D'; if -unspecified, defaults to all three. +'charges': limit the type of charges included (setup, recur, usage, discount, taxes). +Should be a string containing one or more of 'S', 'R', or 'U'; or 'D' or 'T' (discount +and taxes should not be combined with the others.) If unspecified, defaults to 'SRU'. 'classnum': limit to this package class. @@ -517,6 +517,7 @@ sub cust_bill_pkg { $sum += $self->cust_bill_pkg_recur(@_) if $charges{R}; $sum += $self->cust_bill_pkg_detail(@_) if $charges{U}; $sum += $self->cust_bill_pkg_discount(@_) if $charges{D}; + $sum += $self->cust_bill_pkg_taxes(@_) if $charges{T}; if ($opt{'average_per_cust_pkg'}) { my $count = $self->cust_bill_pkg_count_pkgnum(@_); @@ -727,6 +728,58 @@ sub cust_bill_pkg_discount { $self->scalar_sql($total_sql); } +sub cust_bill_pkg_taxes { + my $self = shift; + my ($speriod, $eperiod, $agentnum, %opt) = @_; + + $agentnum ||= $opt{'agentnum'}; + + my @where = ( + '(cust_bill_pkg.pkgnum != 0 OR feepart IS NOT NULL)', + $self->with_classnum($opt{'classnum'}, $opt{'use_override'}), + $self->with_report_option(%opt), + $self->in_time_period_and_agent($speriod, $eperiod, $agentnum), + $self->with_refnum(%opt), + $self->with_cust_classnum(%opt) + ); + + my $total_sql = "SELECT COALESCE(SUM(cust_bill_pkg_tax_location.amount),0) + FROM cust_bill_pkg + $cust_bill_pkg_join + LEFT JOIN cust_bill_pkg_tax_location + ON (cust_bill_pkg.billpkgnum = cust_bill_pkg_tax_location.taxable_billpkgnum) + WHERE " . join(' AND ', grep $_, @where); + + $self->scalar_sql($total_sql); +} + +#all credits applied to matching pkg line items (ie not taxes) + +sub cust_bill_pkg_credits { + my $self = shift; + my ($speriod, $eperiod, $agentnum, %opt) = @_; + + $agentnum ||= $opt{'agentnum'}; + + my @where = ( + '(cust_bill_pkg.pkgnum != 0 OR feepart IS NOT NULL)', + $self->with_classnum($opt{'classnum'}, $opt{'use_override'}), + $self->with_report_option(%opt), + $self->in_time_period_and_agent($speriod, $eperiod, $agentnum), + $self->with_refnum(%opt), + $self->with_cust_classnum(%opt) + ); + + my $total_sql = "SELECT COALESCE(SUM(cust_credit_bill_pkg.amount),0) + FROM cust_bill_pkg + $cust_bill_pkg_join + LEFT JOIN cust_credit_bill_pkg + USING ( billpkgnum ) + WHERE " . join(' AND ', grep $_, @where); + + $self->scalar_sql($total_sql); +} + ##### package churn report ##### =item active_pkg: The number of packages that were active at the start of diff --git a/FS/FS/Report/Tax.pm b/FS/FS/Report/Tax.pm index 23c16452e..a892a6b87 100644 --- a/FS/FS/Report/Tax.pm +++ b/FS/FS/Report/Tax.pm @@ -52,9 +52,10 @@ sub report_internal { } # %breakdown: short name => field identifier + # null classnum should remain null, not be converted to zero %breakdown = ( 'taxclass' => 'cust_main_county.taxclass', - 'pkgclass' => 'part_pkg.classnum', + 'pkgclass' => 'COALESCE(part_fee.classnum,part_pkg.classnum)', 'city' => 'cust_main_county.city', 'district' => 'cust_main_county.district', 'state' => 'cust_main_county.state', @@ -69,7 +70,8 @@ sub report_internal { my $join_cust_pkg = $join_cust. ' LEFT JOIN cust_pkg USING ( pkgnum ) - LEFT JOIN part_pkg USING ( pkgpart ) '; + LEFT JOIN part_pkg USING ( pkgpart ) + LEFT JOIN part_fee USING ( feepart ) '; my $from_join_cust_pkg = " FROM cust_bill_pkg $join_cust_pkg "; @@ -180,26 +182,111 @@ sub report_internal { $all_sql{exempt_monthly} = $all_exempt; $all_sql{exempt_monthly} =~ s/EXEMPT_WHERE/exempt_monthly = 'Y'/; + # credits applied to taxable sales + # Note that negative exemptions (from exempt sales being credited) are NOT + # counted when calculating the exempt amount. (See above.) Therefore we need + # to NOT include any credits against exempt sales in this amount, either. + # These two subqueries implement that. They have joins to cust_credit_bill + # and cust_bill so that credits can be filtered by application date if + # requested. + + # Each row here is the sum of credits applied to a line item. + my $sales_credit = + "SELECT billpkgnum, SUM(cust_credit_bill_pkg.amount) AS credited + FROM cust_credit_bill_pkg + JOIN cust_credit_bill USING (creditbillnum) + JOIN cust_bill USING (invnum) + WHERE cust_bill._date >= $beginning AND cust_bill._date <= $ending + GROUP BY billpkgnum + "; + + # Each row here is the sum of negative exemptions applied to a combination + # of line item and tax definition. + my $exempt_credit = + "SELECT cust_credit_bill_pkg.billpkgnum, taxnum, + 0 - SUM(cust_tax_exempt_pkg.amount) AS exempt_credited + FROM cust_credit_bill_pkg + LEFT JOIN cust_tax_exempt_pkg USING (creditbillpkgnum) + JOIN cust_credit_bill USING (creditbillnum) + JOIN cust_bill USING (invnum) + WHERE cust_bill._date >= $beginning AND cust_bill._date <= $ending + GROUP BY cust_credit_bill_pkg.billpkgnum, taxnum + "; + + if ( $opt{credit_date} eq 'cust_credit_bill' ) { + $sales_credit =~ s/cust_bill._date/cust_credit_bill._date/g; + $exempt_credit =~ s/cust_bill._date/cust_credit_bill._date/g; + } + + $sql{sales_credited} = "$select + SUM(COALESCE(credited, 0) - COALESCE(exempt_credited, 0)) + FROM cust_main_county + JOIN ($pkg_tax) AS pkg_tax USING (taxnum) + JOIN cust_bill_pkg USING (billpkgnum) + LEFT JOIN ($sales_credit) AS sales_credit USING (billpkgnum) + LEFT JOIN ($exempt_credit) AS exempt_credit USING (billpkgnum, taxnum) + $join_cust_pkg $where AND $nottax + $group + "; + + $all_sql{sales_credited} = "$select_all + SUM(COALESCE(credited, 0) - COALESCE(exempt_credited, 0)) + FROM cust_main_county + JOIN ($pkg_tax) AS pkg_tax USING (taxnum) + JOIN cust_bill_pkg USING (billpkgnum) + LEFT JOIN ($sales_credit) AS sales_credit USING (billpkgnum) + LEFT JOIN ($exempt_credit) AS exempt_credit USING (billpkgnum, taxnum) + $join_cust_pkg $where AND $nottax + $group + "; + + # also include the exempt-sales credit amount, for the credit report + $sql{exempt_credited} = "$select + SUM(COALESCE(exempt_credited, 0)) + FROM cust_main_county + LEFT JOIN ($exempt_credit) AS exempt_credit USING (taxnum) + JOIN cust_bill_pkg USING (billpkgnum) + $join_cust_pkg $where AND $nottax + $group + "; + + $all_sql{exempt_credited} = "$select_all + SUM(COALESCE(exempt_credited, 0)) + FROM cust_main_county + LEFT JOIN ($exempt_credit) AS exempt_credit USING (taxnum) + JOIN cust_bill_pkg USING (billpkgnum) + $join_cust_pkg $where AND $nottax + $group + "; + # taxable sales $sql{taxable} = "$select - SUM(cust_bill_pkg.setup + cust_bill_pkg.recur - COALESCE(exempt_charged, 0)) + SUM(cust_bill_pkg.setup + cust_bill_pkg.recur + - COALESCE(exempt_charged, 0) + - COALESCE(credited, 0) + + COALESCE(exempt_credited, 0) + ) FROM cust_main_county JOIN ($pkg_tax) AS pkg_tax USING (taxnum) JOIN cust_bill_pkg USING (billpkgnum) - LEFT JOIN ($pkg_tax_exempt) AS pkg_tax_exempt - ON (pkg_tax_exempt.billpkgnum = cust_bill_pkg.billpkgnum - AND pkg_tax_exempt.taxnum = cust_main_county.taxnum) + LEFT JOIN ($pkg_tax_exempt) AS pkg_tax_exempt USING (billpkgnum, taxnum) + LEFT JOIN ($sales_credit) AS sales_credit USING (billpkgnum) + LEFT JOIN ($exempt_credit) AS exempt_credit USING (billpkgnum, taxnum) $join_cust_pkg $where AND $nottax $group"; $all_sql{taxable} = "$select_all - SUM(cust_bill_pkg.setup + cust_bill_pkg.recur - COALESCE(exempt_charged, 0)) + SUM(cust_bill_pkg.setup + cust_bill_pkg.recur + - COALESCE(exempt_charged, 0) + - COALESCE(credited, 0) + + COALESCE(exempt_credited, 0) + ) FROM cust_main_county JOIN ($pkg_tax) AS pkg_tax USING (taxnum) JOIN cust_bill_pkg USING (billpkgnum) - LEFT JOIN ($pkg_tax_exempt) AS pkg_tax_exempt - ON (pkg_tax_exempt.billpkgnum = cust_bill_pkg.billpkgnum - AND pkg_tax_exempt.taxnum = cust_main_county.taxnum) + LEFT JOIN ($pkg_tax_exempt) AS pkg_tax_exempt USING (billpkgnum, taxnum) + LEFT JOIN ($sales_credit) AS sales_credit USING (billpkgnum) + LEFT JOIN ($exempt_credit) AS exempt_credit USING (billpkgnum, taxnum) $join_cust_pkg $where AND $nottax $group_all"; @@ -209,27 +296,35 @@ sub report_internal { # estimated tax (taxable * rate) $sql{estimated} = "$select SUM(cust_main_county.tax / 100 * - (cust_bill_pkg.setup + cust_bill_pkg.recur - COALESCE(exempt_charged, 0)) + (cust_bill_pkg.setup + cust_bill_pkg.recur + - COALESCE(exempt_charged, 0) + - COALESCE(credited, 0) + + COALESCE(exempt_credited, 0) + ) ) FROM cust_main_county JOIN ($pkg_tax) AS pkg_tax USING (taxnum) JOIN cust_bill_pkg USING (billpkgnum) - LEFT JOIN ($pkg_tax_exempt) AS pkg_tax_exempt - ON (pkg_tax_exempt.billpkgnum = cust_bill_pkg.billpkgnum - AND pkg_tax_exempt.taxnum = cust_main_county.taxnum) + LEFT JOIN ($pkg_tax_exempt) AS pkg_tax_exempt USING (billpkgnum, taxnum) + LEFT JOIN ($sales_credit) AS sales_credit USING (billpkgnum) + LEFT JOIN ($exempt_credit) AS exempt_credit USING (billpkgnum, taxnum) $join_cust_pkg $where AND $nottax $group"; $all_sql{estimated} = "$select_all SUM(cust_main_county.tax / 100 * - (cust_bill_pkg.setup + cust_bill_pkg.recur - COALESCE(exempt_charged, 0)) + (cust_bill_pkg.setup + cust_bill_pkg.recur + - COALESCE(exempt_charged, 0) + - COALESCE(credited, 0) + + COALESCE(exempt_credited, 0) + ) ) FROM cust_main_county JOIN ($pkg_tax) AS pkg_tax USING (taxnum) JOIN cust_bill_pkg USING (billpkgnum) - LEFT JOIN ($pkg_tax_exempt) AS pkg_tax_exempt - ON (pkg_tax_exempt.billpkgnum = cust_bill_pkg.billpkgnum - AND pkg_tax_exempt.taxnum = cust_main_county.taxnum) + LEFT JOIN ($pkg_tax_exempt) AS pkg_tax_exempt USING (billpkgnum, taxnum) + LEFT JOIN ($sales_credit) AS sales_credit USING (billpkgnum) + LEFT JOIN ($exempt_credit) AS exempt_credit USING (billpkgnum, taxnum) $join_cust_pkg $where AND $nottax $group_all"; @@ -239,7 +334,7 @@ sub report_internal { # there isn't one for 'sales', because we calculate sales by adding up # the taxable and exempt columns. - # TAX QUERIES (billed tax, credited tax) + # TAX QUERIES (billed tax, credited tax, collected tax) # ----------- # sum of billed tax: @@ -252,28 +347,30 @@ sub report_internal { if ( $breakdown{pkgclass} ) { # If we're not grouping by package class, this is unnecessary, and # probably really expensive. + # Remember that fees also have package classes. $taxfrom .= " LEFT JOIN cust_bill_pkg AS taxable ON (cust_bill_pkg_tax_location.taxable_billpkgnum = taxable.billpkgnum) LEFT JOIN cust_pkg ON (taxable.pkgnum = cust_pkg.pkgnum) - LEFT JOIN part_pkg USING (pkgpart)"; + LEFT JOIN part_pkg USING (pkgpart) + LEFT JOIN part_fee ON (taxable.feepart = part_fee.feepart) "; } - my $istax = "cust_bill_pkg.pkgnum = 0"; + my $istax = "cust_bill_pkg.pkgnum = 0 and cust_bill_pkg.feepart is null"; - $sql{tax} = "$select SUM(cust_bill_pkg_tax_location.amount) + $sql{tax} = "$select COALESCE(SUM(cust_bill_pkg_tax_location.amount),0) $taxfrom $where AND $istax $group"; - $all_sql{tax} = "$select_all SUM(cust_bill_pkg_tax_location.amount) + $all_sql{tax} = "$select_all COALESCE(SUM(cust_bill_pkg_tax_location.amount),0) $taxfrom $where AND $istax $group_all"; # sum of credits applied against billed tax - # ($creditfrom includes join of taxable item to part_pkg if with_pkgclass - # is on) + # ($creditfrom includes join of taxable item to part_pkg/part_fee if + # with_pkgclass is on) my $creditfrom = $taxfrom . ' JOIN cust_credit_bill_pkg USING (billpkgtaxlocationnum)' . ' JOIN cust_credit_bill USING (creditbillnum)'; @@ -286,16 +383,37 @@ sub report_internal { $creditwhere =~ s/cust_bill._date/cust_credit_bill._date/g; } - $sql{credit} = "$select SUM(cust_credit_bill_pkg.amount) + $sql{tax_credited} = "$select COALESCE(SUM(cust_credit_bill_pkg.amount),0) $creditfrom $creditwhere AND $istax $group"; - $all_sql{credit} = "$select_all SUM(cust_credit_bill_pkg.amount) + $all_sql{tax_credited} = "$select_all COALESCE(SUM(cust_credit_bill_pkg.amount),0) $creditfrom $creditwhere AND $istax $group_all"; + # sum of tax paid + # this suffers from the same ambiguity as anything else that applies + # received payments to specific packages, but in reality the discrepancy + # should be minimal since people either pay their bill or don't. + # the join is on billpkgtaxlocationnum to avoid cross-producting. + + my $paidfrom = $taxfrom . + ' JOIN cust_bill_pay_pkg'. + ' ON (cust_bill_pay_pkg.billpkgtaxlocationnum ='. + ' cust_bill_pkg_tax_location.billpkgtaxlocationnum)'; + + $sql{tax_paid} = "$select COALESCE(SUM(cust_bill_pay_pkg.amount),0) + $paidfrom + $where AND $istax + $group"; + + $all_sql{tax_paid} = "$select_all COALESCE(SUM(cust_bill_pay_pkg.amount),0) + $paidfrom + $where AND $istax + $group_all"; + my %data; my %total; # note that we use keys(%sql) here and keys(%all_sql) later. nothing @@ -303,7 +421,7 @@ sub report_internal { # as for the individual category queries foreach my $k (keys(%sql)) { my $stmt = $sql{$k}; - warn "\n".uc($k).":\n".$stmt."\n" if $DEBUG; + warn "\n".uc($k).":\n".$stmt."\n" if $DEBUG > 1; my $sth = dbh->prepare($stmt); # eight columns: pkgclass, taxclass, state, county, city, district # taxnums (comma separated), value @@ -322,7 +440,7 @@ sub report_internal { push @$bin, [ $k, $row->[6], $row->[7] ]; } } - warn "DATA:\n".Dumper(\%data) if $DEBUG > 1; + warn "DATA:\n".Dumper(\%data) if $DEBUG; foreach my $k (keys %all_sql) { warn "\nTOTAL ".uc($k).":\n".$all_sql{$k}."\n" if $DEBUG; @@ -458,10 +576,16 @@ sub table { # and calculate row totals $this_row{sales} = sprintf('%.2f', $this_row{taxable} + + $this_row{sales_credited} + $this_row{exempt_cust} + $this_row{exempt_pkg} + $this_row{exempt_monthly} ); + $this_row{credits} = sprintf('%.2f', + $this_row{sales_credited} + + $this_row{exempt_credited} + + $this_row{tax_credited} + ); # and give it a label if ( $this_row{total} ) { $this_row{label} = 'Total'; diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 184c6c951..486860ff6 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -204,6 +204,7 @@ sub dbdef_dist { && ( ! /^queue(_arg|_depend|_stat)?$/ || ! $opt->{'queue-no_history'} ) && ! $tables_hashref_torrus->{$_} && ! /^cacti_page$/ + && ! /^template_image$/ } $dbdef->tables ) { @@ -4332,6 +4333,7 @@ sub tables_hashref { 'custnum', 'int', 'NULL', '', '', '', 'secure', 'char', 'NULL', 1, '', '', 'priority', 'int', 'NULL', '', '', '', + 'usernum', 'int', 'NULL', '', '', '', ], 'primary_key' => 'jobnum', 'unique' => [], @@ -4345,6 +4347,9 @@ sub tables_hashref { { columns => [ 'custnum' ], table => 'cust_main', }, + { columns => [ 'usernum' ], + table => 'access_user', + }, ], }, @@ -6315,8 +6320,11 @@ sub tables_hashref { 'mime_type', 'varchar', '', $char_d, '', '', 'body', 'blob', 'NULL', '', '', '', 'disabled', 'char', 'NULL', 1, '', '', + # migrate these to msg_template_email 'from_addr', 'varchar', 'NULL', 255, '', '', 'bcc_addr', 'varchar', 'NULL', 255, '', '', + # change to not null on v5 + 'msgclass', 'varchar', 'NULL', 16, '', '', ], 'primary_key' => 'msgnum', 'unique' => [ ], @@ -6328,6 +6336,26 @@ sub tables_hashref { ], }, + 'msg_template_http' => { + 'columns' => [ + 'num', 'serial', '', '', '', '', + 'msgnum', 'int', '', '', '', '', + 'prepare_url', 'varchar', 'NULL', 255, '', '', + 'send_url', 'varchar', 'NULL', 255, '', '', + 'username', 'varchar', 'NULL', $char_d, '', '', + 'password', 'varchar', 'NULL', $char_d, '', '', + 'content', 'text', 'NULL', '', '', '', + ], + 'primary_key' => 'num', + 'unique' => [ [ 'msgnum' ], ], + 'index' => [ ], + 'foreign_keys' => [ + { columns => [ 'msgnum' ], + table => 'msg_template', + }, + ], + }, + 'template_content' => { 'columns' => [ 'contentnum', 'serial', '', '', '', '', @@ -6346,6 +6374,19 @@ sub tables_hashref { ], }, + 'template_image' => { + 'columns' => [ + 'imgnum', 'serial', '', '', '', '', + 'name', 'varchar', '', $char_d, '', '', + 'agentnum', 'int', 'NULL', '', '', '', + 'mime_type', 'varchar', '', $char_d, '', '', + 'base64', 'text', '', '', '', '', + ], + 'primary_key' => 'imgnum', + 'unique' => [ ], + 'index' => [ ['name'], ['agentnum'] ], + }, + 'cust_msg' => { 'columns' => [ 'custmsgnum', 'serial', '', '', '', '', @@ -6359,6 +6400,7 @@ sub tables_hashref { 'error', 'varchar', 'NULL', 255, '', '', 'status', 'varchar', '',$char_d, '', '', 'msgtype', 'varchar', 'NULL', 16, '', '', + 'preview', 'text', 'NULL', '', '', '', ], 'primary_key' => 'custmsgnum', 'unique' => [ ], @@ -6996,6 +7038,7 @@ sub tables_hashref { 'zonenum', 'serial', '', '', '', '', 'description', 'char', 'NULL', $char_d, '', '', 'agentnum', 'int', '', '', '', '', + 'censusyear', 'char', 'NULL', 4, '', '', 'dbaname', 'char', 'NULL', $char_d, '', '', 'zonetype', 'char', '', 1, '', '', 'technology', 'int', '', '', '', '', @@ -7027,7 +7070,7 @@ sub tables_hashref { 'blocknum', 'serial', '', '', '', '', 'zonenum', 'int', '', '', '', '', 'censusblock', 'char', '', 15, '', '', - 'censusyear', 'char', '', 4, '', '', + 'censusyear', 'char','NULL', 4, '', '', ], 'primary_key' => 'blocknum', 'unique' => [], @@ -7082,6 +7125,37 @@ sub tables_hashref { ], }, + 'report_batch' => { + 'columns' => [ + 'reportbatchnum', 'serial', '', '', '', '', + 'reportname', 'varchar', '', 255, '', '', + 'agentnum', 'int', 'NULL', '', '', '', + 'send_date', @date_type, '', '', + 'sdate', @date_type, '', '', + 'edate', @date_type, '', '', + 'usernum', 'int', 'NULL', '', '', '', + 'msgnum', 'int', 'NULL', '', '', '', + # add report params here as necessary + ], + 'primary_key' => 'reportbatchnum', + 'unique' => [], + 'index' => [], + 'foreign_keys' => [ + { columns => [ 'agentnum' ], + table => 'agent', + references => [ 'agentnum' ], + }, + { columns => [ 'usernum' ], + table => 'access_user', + references => [ 'usernum' ], + }, + { columns => [ 'msgnum' ], + table => 'msg_template', + references => [ 'msgnum' ], + }, + ], + }, + # name type nullability length default local #'new_table' => { diff --git a/FS/FS/Template_Mixin.pm b/FS/FS/Template_Mixin.pm index 757701aa8..1a3217c44 100644 --- a/FS/FS/Template_Mixin.pm +++ b/FS/FS/Template_Mixin.pm @@ -684,7 +684,12 @@ sub print_generic { my( $pr_total, @pr_cust_bill ) = $self->previous; #previous balance # my( $cr_total, @cr_cust_credit ) = $self->cust_credit; #credits #my $balance_due = $self->owed + $pr_total - $cr_total; - my $balance_due = $self->owed + $pr_total; + my $balance_due = $self->owed; + if ( $self->enable_previous ) { + $balance_due += $pr_total; + } + # otherwise the previous balance is not shown, so including it in the + # balance due is just confusing # the sum of amount owed on all invoices # (this is used in the summary & on the payment coupon) @@ -1519,7 +1524,7 @@ sub print_generic { # usage subtotals if ( $conf->exists('usage_class_summary') and $self->can('_items_usage_class_summary') ) { - my @usage_subtotals = $self->_items_usage_class_summary(escape => $escape_function); + my @usage_subtotals = $self->_items_usage_class_summary(escape => $escape_function, 'money_char' => $other_money_char); if ( @usage_subtotals ) { unshift @sections, $usage_subtotals[0]->{section}; # do not summarize unshift @detail_items, @usage_subtotals; @@ -3010,7 +3015,9 @@ sub _items_cust_bill_pkg { } my $summary_page = $opt{summary_page} || ''; #unused my $multisection = defined($category) || defined($locationnum); - my $discount_show_always = 0; + # this variable is the value of the config setting, not whether it applies + # to this particular line item. + my $discount_show_always = $conf->exists('discount-show-always'); my $maxlength = $conf->config('cust_bill-latex_lineitem_maxlength') || 40; @@ -3050,11 +3057,13 @@ sub _items_cust_bill_pkg { if (exists($_->{unit_amount})) { $_->{unit_amount} = sprintf( "%.2f", $_->{unit_amount} ); } - push @b, { %$_ } - if $_->{amount} != 0 - || $discount_show_always - || ( ! $_->{_is_setup} && $_->{recur_show_zero} ) - || ( $_->{_is_setup} && $_->{setup_show_zero} ) + push @b, { %$_ }; + # we already decided to create this display line; don't reconsider it + # now. + # if $_->{amount} != 0 + # || $discount_show_always + # || ( ! $_->{_is_setup} && $_->{recur_show_zero} ) + # || ( $_->{_is_setup} && $_->{setup_show_zero} ) ; $_ = undef; } @@ -3181,6 +3190,7 @@ sub _items_cust_bill_pkg { if ( (!$type || $type eq 'S') && ( $cust_bill_pkg->setup != 0 || $cust_bill_pkg->setup_show_zero + || ($discount_show_always and $cust_bill_pkg->unitsetup > 0) ) ) { @@ -3188,10 +3198,12 @@ sub _items_cust_bill_pkg { warn "$me _items_cust_bill_pkg adding setup\n" if $DEBUG > 1; + # append the word 'Setup' to the setup line if there's going to be + # a recur line for the same package (i.e. not a one-time charge) my $description = $desc; $description .= ' Setup' if $cust_bill_pkg->recur != 0 - || $discount_show_always + || ($discount_show_always and $cust_bill_pkg->unitrecur > 0) || $cust_bill_pkg->recur_show_zero; $description .= $cust_bill_pkg->time_period_pretty( $part_pkg, @@ -3255,11 +3267,18 @@ sub _items_cust_bill_pkg { } + # should we show a recur line? + # if type eq 'S', then NO, because we've been told not to. + # otherwise, show the recur line if: + # - there's a recurring charge + # - or recur_show_zero is on + # - or there's a positive unitrecur (so it's been discounted to zero) + # and discount-show-always is on if ( ( !$type || $type eq 'R' || $type eq 'U' ) && ( $cust_bill_pkg->recur != 0 - || $cust_bill_pkg->setup == 0 - || $discount_show_always + || !defined($s) + || ($discount_show_always and $cust_bill_pkg->unitrecur > 0) || $cust_bill_pkg->recur_show_zero ) ) @@ -3501,9 +3520,6 @@ sub _items_cust_bill_pkg { } # foreach $display - $discount_show_always = ($cust_bill_pkg->cust_bill_pkg_discount - && $conf->exists('discount-show-always')); - } foreach ( $s, $r, ($opt{skip_usage} ? () : $u ), $d ) { @@ -3515,11 +3531,11 @@ sub _items_cust_bill_pkg { $_->{unit_amount} = sprintf( "%.2f", $_->{unit_amount} ); } - push @b, { %$_ } - if $_->{amount} != 0 - || $discount_show_always - || ( ! $_->{_is_setup} && $_->{recur_show_zero} ) - || ( $_->{_is_setup} && $_->{setup_show_zero} ) + push @b, { %$_ }; + #if $_->{amount} != 0 + # || $discount_show_always + # || ( ! $_->{_is_setup} && $_->{recur_show_zero} ) + # || ( $_->{_is_setup} && $_->{setup_show_zero} ) } } diff --git a/FS/FS/TicketSystem/RT_External.pm b/FS/FS/TicketSystem/RT_External.pm index 9f07732c7..b5414b97c 100644 --- a/FS/FS/TicketSystem/RT_External.pm +++ b/FS/FS/TicketSystem/RT_External.pm @@ -315,22 +315,22 @@ sub href_params_new_ticket { my $subtype = $object->table; my $pkey = $object->get($object->primary_key); - my %param = ( + my @param = ( 'Queue' => ($cust_main->agent->ticketing_queueid || $default_queueid), 'new-MemberOf'=> "freeside://freeside/$subtype/$pkey", 'Requestors' => $requestors, ); - ( $self->baseurl.'Ticket/Create.html', %param ); + ( $self->baseurl.'Ticket/Create.html', @param ); } sub href_new_ticket { my $self = shift; - my( $base, %param ) = $self->href_params_new_ticket(@_); + my( $base, @param ) = $self->href_params_new_ticket(@_); my $uri = new URI $base; - $uri->query_form(%param); + $uri->query_form(@param); $uri; } diff --git a/FS/FS/TicketSystem/RT_Internal.pm b/FS/FS/TicketSystem/RT_Internal.pm index 6fb2c187d..b70ac5360 100644 --- a/FS/FS/TicketSystem/RT_Internal.pm +++ b/FS/FS/TicketSystem/RT_Internal.pm @@ -111,7 +111,7 @@ properly. # create an RT::Tickets object for a specified custnum or svcnum sub _tickets_search { - my( $self, $type, $number, $limit, $priority, $status ) = @_; + my( $self, $type, $number, $limit, $priority, $status, $queueid ) = @_; $type =~ /^Customer|Service$/ or die "invalid type: $type"; $number =~ /^\d+$/ or die "invalid custnum/svcnum: $number"; @@ -159,6 +159,8 @@ sub _tickets_search { join(' OR ', map { "Status = '$_'" } @statuses). ' ) '; + $rtql .= " AND Queue = $queueid " if $queueid; + warn "$me _customer_tickets_search:\n$rtql\n" if $DEBUG; $Tickets->FromSQL($rtql); diff --git a/FS/FS/UI/Web.pm b/FS/FS/UI/Web.pm index 13b2e2dc0..0e54aa26f 100644 --- a/FS/FS/UI/Web.pm +++ b/FS/FS/UI/Web.pm @@ -623,6 +623,7 @@ sub random_id { if (!defined $NO_RANDOM_IDS) { my $conf = FS::Conf->new; $NO_RANDOM_IDS = $conf->exists('no_random_ids') ? 1 : 0; + warn "TEST MODE--RANDOM ID NUMBERS DISABLED\n" if $NO_RANDOM_IDS; } if ( $NO_RANDOM_IDS ) { if ( $digits > 0 ) { diff --git a/FS/FS/Upgrade.pm b/FS/FS/Upgrade.pm index ffc04bab7..263230b34 100644 --- a/FS/FS/Upgrade.pm +++ b/FS/FS/Upgrade.pm @@ -154,6 +154,12 @@ If you need to continue using the old Form 477 report, turn on the $conf->set('previous_balance-exclude_from_total', ''); } + # switch from specifying an email address to boolean check + if ( $conf->exists('batch-errors_to') ) { + $conf->touch('batch-errors_not_fatal'); + $conf->delete('batch-errors_to'); + } + enable_banned_pay_pad() unless length($conf->config('banned_pay-pad')); } diff --git a/FS/FS/access_user.pm b/FS/FS/access_user.pm index a3f55bc76..ecab32d32 100644 --- a/FS/FS/access_user.pm +++ b/FS/FS/access_user.pm @@ -587,6 +587,43 @@ sub access_right { } +=item refund_rights PAYBY + +Accepts payment $payby (BILL,CASH,MCRD,MCHK,CARD,CHEK) and returns a +list of the refund rights associated with that $payby. + +Returns empty list if $payby wasn't recognized. + +=cut + +sub refund_rights { + my $self = shift; + my $payby = shift; + my @rights = (); + push @rights, 'Post refund' if $payby =~ /^(BILL|CASH|MCRD|MCHK)$/; + push @rights, 'Post check refund' if $payby eq 'BILL'; + push @rights, 'Post cash refund ' if $payby eq 'CASH'; + push @rights, 'Refund payment' if $payby =~ /^(CARD|CHEK)$/; + push @rights, 'Refund credit card payment' if $payby eq 'CARD'; + push @rights, 'Refund Echeck payment' if $payby eq 'CHEK'; + return @rights; +} + +=item refund_access_right PAYBY + +Returns true if user has L</access_right> for any L</refund_rights> +for the specified payby. + +=cut + +sub refund_access_right { + my $self = shift; + my $payby = shift; + my @rights = $self->refund_rights($payby); + return '' unless @rights; + return $self->access_right(\@rights); +} + =item default_customer_view Returns the default customer view for this user, from the diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm index 1a3666099..775c79114 100644 --- a/FS/FS/cdr.pm +++ b/FS/FS/cdr.pm @@ -1463,7 +1463,7 @@ as keys (for use with part_pkg::voip_cdr) and "pretty" format names as values. sub invoice_formats { map { ($_ => $export_names{$_}->{'name'}) } grep { $export_names{$_}->{'invoice_header'} } - keys %export_names; + sort keys %export_names; } =item invoice_header FORMAT diff --git a/FS/FS/cdr/aapt.pm b/FS/FS/cdr/aapt.pm index 600a1920f..934608c72 100644 --- a/FS/FS/cdr/aapt.pm +++ b/FS/FS/cdr/aapt.pm @@ -77,7 +77,7 @@ my %UNIT_SCALE = ( #Table 2.1.4 'calltypenum', # usage ID (CUSG) sub { # ID type my ($cdr, $data, $conf, $param) = @_; - if ($data != 1) { + if ($data !~ /^(1|50)$/) { warn "AAPT: service ID type is not telephone number.\n"; $param->{skiprow} = 1; } diff --git a/FS/FS/cdr/amcom.pm b/FS/FS/cdr/amcom.pm index 36be8d8c3..43e6afd60 100644 --- a/FS/FS/cdr/amcom.pm +++ b/FS/FS/cdr/amcom.pm @@ -4,6 +4,8 @@ use strict; use base qw( FS::cdr ); use vars qw( %info ); use DateTime; +use FS::Record qw( qsearchs ); +use FS::cdr_type; my ($tmp_mday, $tmp_mon, $tmp_year); @@ -22,10 +24,21 @@ my ($tmp_mday, $tmp_mon, $tmp_year); my ($cdr, $field, $conf, $hashref) = @_; $hashref->{skiprow} = 1 unless $field eq 'DCR'; }, - '', # 2. BWGroupID (centrex group) - '', # 3. BWGroupNumber + 'accountcode',# 2. BWGroupID (centrex group) + sub { # 3. BWGroupNumber + my ($cdr, $field) = @_; #, $conf, $hashref) = @_; + $cdr->charged_party($field) + if $cdr->accountcode eq '' && $field =~ /^(1800|1300)/; + }, 'uniqueid', # 4. Record ID - 'dcontext', # 5. Call Category (LOCAL, NATIONAL, FREECALL, MOBILE) + sub { # 5. Call Category (LOCAL, NATIONAL, FREECALL, MOBILE) + my ($cdr, $data) = @_; + $data ||= 'none'; + + my $cdr_type = qsearchs('cdr_type', { 'cdrtypename' => $data } ); + $cdr->set('cdrtypenum', $cdr_type->cdrtypenum) if $cdr_type; + $cdr->set('dcontext', $data); + }, sub { # 6. Start Date (DDMMYYYY my ($cdr, $date) = @_; $date =~ /^(\d{2})(\d{2})(\d{4})$/ diff --git a/FS/FS/cdr/earthlink.pm b/FS/FS/cdr/earthlink.pm index 5042f6fa5..c6c4e1535 100644 --- a/FS/FS/cdr/earthlink.pm +++ b/FS/FS/cdr/earthlink.pm @@ -3,11 +3,13 @@ package FS::cdr::earthlink; use strict; use vars qw( @ISA %info $date); use Time::Local; -use FS::cdr qw(_cdr_date_parser_maker _cdr_min_parser_maker); +use FS::cdr qw(_cdr_min_parser_maker); use Date::Parse; @ISA = qw(FS::cdr); +my ($tmp_mday, $tmp_mon, $tmp_year); + %info = ( 'name' => 'Earthlink', 'weight' => 120, @@ -15,14 +17,30 @@ use Date::Parse; 'import_fields' => [ skip(3), #Account number/ SERVICE LOC / BILL NUMBER - sub { my($cdr, $date) = @_; - $date; - }, #date + sub { my($cdr, $date) = @_; + $date =~ /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/ + or die "unparseable date: $date"; + ($tmp_mon, $tmp_mday, $tmp_year) = ($1, $2, $3); + }, #date sub { my($cdr, $time) = @_; + $time =~ /^(\d{1,2}):(\d{1,2}):(\d{1,2}) (AM|PM)$/ + or die "unparsable time: $time"; #maybe we shouldn't die... + my $hour = $1; + $hour += 12 if $4 eq 'PM' && $hour != 12; + $hour = 0 if $4 eq 'AM' && $hour == 12; + + my $dt = DateTime->new( + year => $tmp_year, + month => $tmp_mon, + day => $tmp_mday, + hour => $hour, + minute => $2, + second => $3, + time_zone => 'local', + ); + $cdr->set('startdate', $dt->epoch); - my $datetime = $date. " ". $time; - $cdr->set('startdate', $datetime ); - }, #time + }, skip(1), #TollFreeNumber sub { my($cdr, $src) = @_; $src =~ s/\D//g; diff --git a/FS/FS/contact.pm b/FS/FS/contact.pm index 38b7fd7b7..612048022 100644 --- a/FS/FS/contact.pm +++ b/FS/FS/contact.pm @@ -837,6 +837,7 @@ sub send_reset_email { #die "selfservice-password_reset_msgnum unset" unless $msgnum; return { 'error' => "selfservice-password_reset_msgnum unset" } unless $msgnum; my $msg_template = qsearchs('msg_template', { msgnum => $msgnum } ); + return { 'error' => "selfservice-password_reset_msgnum cannot be loaded" } unless $msg_template; my %msg_template = ( 'to' => join(',', map $_->emailaddress, @contact_email ), 'cust_main' => $cust_main, @@ -846,11 +847,14 @@ sub send_reset_email { if ( $opt{'queue'} ) { #or should queueing just be the default? + my $cust_msg = $msg_template->prepare( %msg_template ); + my $error = $cust_msg->insert; + return { 'error' => $error } if $error; my $queue = new FS::queue { - 'job' => 'FS::Misc::process_send_email', + 'job' => 'FS::cust_msg::process_send', 'custnum' => $cust_main ? $cust_main->custnum : '', }; - $queue->insert( $msg_template->prepare( %msg_template ) ); + $queue->insert( $cust_msg->custmsgnum ); } else { diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index 7ea586a90..6546bfa95 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -297,13 +297,13 @@ sub _delete { foreach my $table (qw( cust_credit_bill - cust_bill_pay - cust_pay_batch cust_bill_pay_batch + cust_bill_pay cust_bill_batch cust_bill_pkg )) { #cust_event # problematic + #cust_pay_batch # unnecessary foreach my $linked ( $self->$table() ) { my $error = $linked->delete; @@ -2661,10 +2661,12 @@ sub _items_usage_class_summary { my %opt = @_; my $escape = $opt{escape} || sub { $_[0] }; + my $money_char = $opt{money_char}; my $invnum = $self->invnum; my @classes = qsearch({ 'table' => 'usage_class', - 'select' => 'classnum, classname, SUM(amount) AS amount', + 'select' => 'classnum, classname, SUM(amount) AS amount,'. + ' COUNT(*) AS calls, SUM(duration) AS duration', 'addl_from' => ' LEFT JOIN cust_bill_pkg_detail USING (classnum)' . ' LEFT JOIN cust_bill_pkg USING (billpkgnum)', 'extra_sql' => " WHERE cust_bill_pkg.invnum = $invnum". @@ -2675,17 +2677,21 @@ sub _items_usage_class_summary { my @l; my $section = { description => &{$escape}($self->mt('Usage Summary')), - no_subtotal => 1, usage_section => 1, + subtotal => 0, }; foreach my $class (@classes) { + $section->{subtotal} += $class->get('amount'); push @l, { 'description' => &{$escape}($class->classname), - 'amount' => sprintf('%.2f', $class->amount), + 'amount' => $money_char.sprintf('%.2f', $class->get('amount')), + 'quantity' => $class->get('calls'), + 'duration' => $class->get('duration'), 'usage_classnum' => $class->classnum, 'section' => $section, }; } + $section->{subtotal} = $money_char.sprintf('%.2f', $section->{subtotal}); return @l; } @@ -2830,8 +2836,7 @@ sub _items_total { my ($previous_charges_desc, $new_charges_desc, $new_charges_amount); if ( $conf->exists('previous_balance-exclude_from_total') ) { - # can we do some caching on this stuff? it's going to change infrequently - # in production + # if enabled, specifically add a line for the previous balance total $previous_charges_desc = $self->mt( $conf->config('previous_balance-text') || 'Previous Balance' ); @@ -2843,6 +2848,12 @@ sub _items_total { total_amount => sprintf('%.2f',$pr_total) }; } + } + + if ( $conf->exists('previous_balance-exclude_from_total') + or !$self->enable_previous ) { + # show new charges only + $new_charges_desc = $self->mt( $conf->config('previous_balance-text-total_new_charges') || 'Total New Charges' @@ -2851,9 +2862,14 @@ sub _items_total { $new_charges_amount = $self->charged; } else { + # show new charges + previous invoice total $new_charges_desc = $self->mt('Total Charges'); - $new_charges_amount = sprintf('%.2f',$self->charged + $pr_total); + if ( $self->enable_previous ) { + $new_charges_amount = sprintf('%.2f', $self->charged + $pr_total); + } else { + $new_charges_amount = sprintf('%.2f', $self->charged); + } } @@ -2913,6 +2929,18 @@ sub call_details { ( $header, grep { $_ ne $header } @details ); } +=item cust_pay_batch + +Returns all L<FS::cust_pay_batch> records linked to this invoice. Deprecated, +will be removed. + +=cut + +sub cust_pay_batch { + carp "FS::cust_bill->cust_pay_batch is deprecated"; + my $self = shift; + qsearch('cust_pay_batch', { 'invnum' => $self->invnum }); +} =back diff --git a/FS/FS/cust_bill_pkg.pm b/FS/FS/cust_bill_pkg.pm index 8233ce0d6..178042666 100644 --- a/FS/FS/cust_bill_pkg.pm +++ b/FS/FS/cust_bill_pkg.pm @@ -1124,7 +1124,10 @@ sub tax_locationnum { if ( $self->pkgnum ) { # normal sales return $self->cust_pkg->tax_locationnum; } elsif ( $self->feepart ) { # fees - return $self->cust_bill->cust_main->ship_locationnum; + my $custnum = $self->fee_origin->custnum; + if ( $custnum ) { + return FS::cust_main->by_key($custnum)->ship_locationnum; + } } else { # taxes return ''; } @@ -1135,7 +1138,10 @@ sub tax_location { if ( $self->pkgnum ) { # normal sales return $self->cust_pkg->tax_location; } elsif ( $self->feepart ) { # fees - return $self->cust_bill->cust_main->ship_location; + my $custnum = $self->fee_origin->custnum; + if ( $custnum ) { + return FS::cust_main->by_key($custnum)->ship_location; + } } else { # taxes return; } diff --git a/FS/FS/cust_credit.pm b/FS/FS/cust_credit.pm index 544a0e83d..31adebec1 100644 --- a/FS/FS/cust_credit.pm +++ b/FS/FS/cust_credit.pm @@ -9,7 +9,6 @@ use vars qw( $conf $unsuspendauto $me $DEBUG use List::Util qw( min ); use Date::Format; use FS::UID qw( dbh ); -use FS::Misc qw(send_email); use FS::Record qw( qsearch qsearchs dbdef ); use FS::CurrentUser; use FS::cust_pkg; @@ -277,35 +276,6 @@ sub delete { return $error; } - if ( !$opt{void} and $conf->config('deletecredits') ne '' ) { - - my $cust_main = $self->cust_main; - - my $error = send_email( - 'from' => $conf->invoice_from_full($self->cust_main->agentnum), - #invoice_from??? well as good as any - 'to' => $conf->config('deletecredits'), - 'subject' => 'FREESIDE NOTIFICATION: Credit deleted', - 'body' => [ - "This is an automatic message from your Freeside installation\n", - "informing you that the following credit has been deleted:\n", - "\n", - 'crednum: '. $self->crednum. "\n", - 'custnum: '. $self->custnum. - " (". $cust_main->last. ", ". $cust_main->first. ")\n", - 'amount: $'. sprintf("%.2f", $self->amount). "\n", - 'date: '. time2str("%a %b %e %T %Y", $self->_date). "\n", - 'reason: '. $self->reason. "\n", - ], - ); - - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "can't send credit deletion notification: $error"; - } - - } - $dbh->commit or die $dbh->errstr if $oldAutoCommit; ''; @@ -415,7 +385,7 @@ sub void { return $error; } - $error = $self->delete(void => 1); # suppress deletecredits warning + $error = $self->delete(); if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; diff --git a/FS/FS/cust_event.pm b/FS/FS/cust_event.pm index f299f9377..1d8af1e6e 100644 --- a/FS/FS/cust_event.pm +++ b/FS/FS/cust_event.pm @@ -9,6 +9,7 @@ use FS::Record qw( qsearch qsearchs dbdef ); use FS::cust_main; use FS::cust_pkg; use FS::cust_bill; +use FS::cust_pay; use FS::svc_acct; $DEBUG = 0; @@ -302,14 +303,16 @@ sub join_sql { JOIN part_event USING ( eventpart ) LEFT JOIN cust_bill ON ( eventtable = 'cust_bill' AND tablenum = invnum ) LEFT JOIN cust_pkg ON ( eventtable = 'cust_pkg' AND tablenum = pkgnum ) - + LEFT JOIN cust_pay ON ( eventtable = 'cust_pay' AND tablenum = paynum ) LEFT JOIN cust_svc ON ( eventtable = 'svc_acct' AND tablenum = svcnum ) LEFT JOIN cust_pkg AS cust_pkg_for_svc ON ( cust_svc.pkgnum = cust_pkg_for_svc.pkgnum ) - LEFT JOIN cust_main ON ( ( eventtable = 'cust_main' AND tablenum = cust_main.custnum ) - OR ( eventtable = 'cust_bill' AND cust_bill.custnum = cust_main.custnum ) - OR ( eventtable = 'cust_pkg' AND cust_pkg.custnum = cust_main.custnum ) - OR ( eventtable = 'svc_acct' AND cust_pkg_for_svc.custnum = cust_main.custnum ) - ) + LEFT JOIN cust_main ON ( + ( eventtable = 'cust_main' AND tablenum = cust_main.custnum ) + OR ( eventtable = 'cust_bill' AND cust_bill.custnum = cust_main.custnum ) + OR ( eventtable = 'cust_pkg' AND cust_pkg.custnum = cust_main.custnum ) + OR ( eventtable = 'cust_pay' AND cust_pay.custnum = cust_main.custnum ) + OR ( eventtable = 'svc_acct' AND cust_pkg_for_svc.custnum = cust_main.custnum ) + ) "; } @@ -389,6 +392,11 @@ sub search_sql_where { "tablenum = '$1'"; } + if ( $param->{'paynum'} =~ /^(\d+)$/ ) { + push @search, "part_event.eventtable = 'cust_pay'", + "tablenum = '$1'"; + } + if ( $param->{'svcnum'} =~ /^(\d+)$/ ) { push @search, "part_event.eventtable = 'svc_acct'", "tablenum = '$1'"; diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index c636408d8..2d6d45907 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -32,7 +32,7 @@ use Locale::Country; use FS::UID qw( dbh driver_name ); use FS::Record qw( qsearchs qsearch dbdef regexp_sql ); use FS::Cursor; -use FS::Misc qw( generate_email send_email generate_ps do_print money_pretty ); +use FS::Misc qw( generate_ps do_print money_pretty ); use FS::Msgcat qw(gettext); use FS::CurrentUser; use FS::TicketSystem; @@ -4053,6 +4053,30 @@ sub tickets { (@tickets); } +=item appointments [ STATUS ] + +Returns an array of hashes representing the customer's RT tickets which +are appointments. + +=cut + +sub appointments { + my $self = shift; + my $status = ( @_ && $_[0] ) ? shift : ''; + + return () unless $conf->config('ticket_system'); + + my $queueid = $conf->config('ticket_system-appointment-queueid'); + + @{ FS::TicketSystem->customer_tickets( $self->custnum, + 99, + undef, + $status, + $queueid, + ) + }; +} + # Return services representing svc_accts in customer support packages sub support_services { my $self = shift; @@ -4574,102 +4598,102 @@ sub search { =over 4 -=item notify CUSTOMER_OBJECT TEMPLATE_NAME OPTIONS +#=item notify CUSTOMER_OBJECT TEMPLATE_NAME OPTIONS -Deprecated. Use event notification and message templates -(L<FS::msg_template>) instead. +#Deprecated. Use event notification and message templates +#(L<FS::msg_template>) instead. -Sends a templated email notification to the customer (see L<Text::Template>). +#Sends a templated email notification to the customer (see L<Text::Template>). -OPTIONS is a hash and may include - -I<from> - the email sender (default is invoice_from) +#OPTIONS is a hash and may include -I<to> - comma-separated scalar or arrayref of recipients - (default is invoicing_list) +#I<from> - the email sender (default is invoice_from) -I<subject> - The subject line of the sent email notification - (default is "Notice from company_name") +#I<to> - comma-separated scalar or arrayref of recipients +# (default is invoicing_list) -I<extra_fields> - a hashref of name/value pairs which will be substituted - into the template +#I<subject> - The subject line of the sent email notification +# (default is "Notice from company_name") -The following variables are vavailable in the template. +#I<extra_fields> - a hashref of name/value pairs which will be substituted +# into the template -I<$first> - the customer first name -I<$last> - the customer last name -I<$company> - the customer company -I<$payby> - a description of the method of payment for the customer - # would be nice to use FS::payby::shortname -I<$payinfo> - the account information used to collect for this customer -I<$expdate> - the expiration of the customer payment in seconds from epoch +#The following variables are vavailable in the template. -=cut +#I<$first> - the customer first name +#I<$last> - the customer last name +#I<$company> - the customer company +#I<$payby> - a description of the method of payment for the customer +# # would be nice to use FS::payby::shortname +#I<$payinfo> - the account information used to collect for this customer +#I<$expdate> - the expiration of the customer payment in seconds from epoch -sub notify { - my ($self, $template, %options) = @_; - - return unless $conf->exists($template); - - my $from = $conf->invoice_from_full($self->agentnum) - if $conf->exists('invoice_from', $self->agentnum); - $from = $options{from} if exists($options{from}); - - my $to = join(',', $self->invoicing_list_emailonly); - $to = $options{to} if exists($options{to}); - - my $subject = "Notice from " . $conf->config('company_name', $self->agentnum) - if $conf->exists('company_name', $self->agentnum); - $subject = $options{subject} if exists($options{subject}); - - my $notify_template = new Text::Template (TYPE => 'ARRAY', - SOURCE => [ map "$_\n", - $conf->config($template)] - ) - or die "can't create new Text::Template object: Text::Template::ERROR"; - $notify_template->compile() - or die "can't compile template: Text::Template::ERROR"; - - $FS::notify_template::_template::company_name = - $conf->config('company_name', $self->agentnum); - $FS::notify_template::_template::company_address = - join("\n", $conf->config('company_address', $self->agentnum) ). "\n"; - - my $paydate = $self->paydate || '2037-12-31'; - $FS::notify_template::_template::first = $self->first; - $FS::notify_template::_template::last = $self->last; - $FS::notify_template::_template::company = $self->company; - $FS::notify_template::_template::payinfo = $self->mask_payinfo; - my $payby = $self->payby; - my ($payyear,$paymonth,$payday) = split (/-/,$paydate); - my $expire_time = timelocal(0,0,0,$payday,--$paymonth,$payyear); - - #credit cards expire at the end of the month/year of their exp date - if ($payby eq 'CARD' || $payby eq 'DCRD') { - $FS::notify_template::_template::payby = 'credit card'; - ($paymonth < 11) ? $paymonth++ : ($paymonth=0, $payyear++); - $expire_time = timelocal(0,0,0,$payday,$paymonth,$payyear); - $expire_time--; - }elsif ($payby eq 'COMP') { - $FS::notify_template::_template::payby = 'complimentary account'; - }else{ - $FS::notify_template::_template::payby = 'current method'; - } - $FS::notify_template::_template::expdate = $expire_time; - - for (keys %{$options{extra_fields}}){ - no strict "refs"; - ${"FS::notify_template::_template::$_"} = $options{extra_fields}->{$_}; - } +#=cut - send_email(from => $from, - to => $to, - subject => $subject, - body => $notify_template->fill_in( PACKAGE => - 'FS::notify_template::_template' ), - ); +#sub notify { +# my ($self, $template, %options) = @_; + +# return unless $conf->exists($template); + +# my $from = $conf->invoice_from_full($self->agentnum) +# if $conf->exists('invoice_from', $self->agentnum); +# $from = $options{from} if exists($options{from}); + +# my $to = join(',', $self->invoicing_list_emailonly); +# $to = $options{to} if exists($options{to}); +# +# my $subject = "Notice from " . $conf->config('company_name', $self->agentnum) +# if $conf->exists('company_name', $self->agentnum); +# $subject = $options{subject} if exists($options{subject}); + +# my $notify_template = new Text::Template (TYPE => 'ARRAY', +# SOURCE => [ map "$_\n", +# $conf->config($template)] +# ) +# or die "can't create new Text::Template object: Text::Template::ERROR"; +# $notify_template->compile() +# or die "can't compile template: Text::Template::ERROR"; + +# $FS::notify_template::_template::company_name = +# $conf->config('company_name', $self->agentnum); +# $FS::notify_template::_template::company_address = +# join("\n", $conf->config('company_address', $self->agentnum) ). "\n"; + +# my $paydate = $self->paydate || '2037-12-31'; +# $FS::notify_template::_template::first = $self->first; +# $FS::notify_template::_template::last = $self->last; +# $FS::notify_template::_template::company = $self->company; +# $FS::notify_template::_template::payinfo = $self->mask_payinfo; +# my $payby = $self->payby; +# my ($payyear,$paymonth,$payday) = split (/-/,$paydate); +# my $expire_time = timelocal(0,0,0,$payday,--$paymonth,$payyear); + +# #credit cards expire at the end of the month/year of their exp date +# if ($payby eq 'CARD' || $payby eq 'DCRD') { +# $FS::notify_template::_template::payby = 'credit card'; +# ($paymonth < 11) ? $paymonth++ : ($paymonth=0, $payyear++); +# $expire_time = timelocal(0,0,0,$payday,$paymonth,$payyear); +# $expire_time--; +# }elsif ($payby eq 'COMP') { +# $FS::notify_template::_template::payby = 'complimentary account'; +# }else{ +# $FS::notify_template::_template::payby = 'current method'; +# } +# $FS::notify_template::_template::expdate = $expire_time; + +# for (keys %{$options{extra_fields}}){ +# no strict "refs"; +# ${"FS::notify_template::_template::$_"} = $options{extra_fields}->{$_}; +# } + +# send_email(from => $from, +# to => $to, +# subject => $subject, +# body => $notify_template->fill_in( PACKAGE => +# 'FS::notify_template::_template' ), +# ); -} +#} =item generate_letter CUSTOMER_OBJECT TEMPLATE_NAME OPTIONS diff --git a/FS/FS/cust_main/Billing.pm b/FS/FS/cust_main/Billing.pm index 0bc0fbd39..eee0958e0 100644 --- a/FS/FS/cust_main/Billing.pm +++ b/FS/FS/cust_main/Billing.pm @@ -880,56 +880,66 @@ sub bill { } #discard bundled packages of 0 value +# XXX we should reconsider whether we even need this sub _omit_zero_value_bundles { my @in = @_; - my @cust_bill_pkg = (); - my @cust_bill_pkg_bundle = (); - my $sum = 0; - my $discount_show_always = 0; - + my @out = (); + my @bundle = (); + my $discount_show_always = $conf->exists('discount-show-always'); + my $show_this = 0; + + # Sort @in the same way we do during invoice rendering, so we can identify + # bundles. See FS::Template_Mixin::_items_nontax. + @in = sort { $a->pkgnum <=> $b->pkgnum or + $a->sdate <=> $b->sdate or + ($a->pkgpart_override ? 0 : -1) or + ($b->pkgpart_override ? 0 : 1) or + $b->hidden cmp $a->hidden or + $a->pkgpart_override <=> $b->pkgpart_override + } @in; + + # this is a pack-and-deliver pattern. every time there's a cust_bill_pkg + # _without_ pkgpart_override, that's the start of the new bundle. if there's + # an existing bundle, and it contains a nonzero amount (or a zero amount + # that's displayable anyway), push all line items in the bundle. foreach my $cust_bill_pkg ( @in ) { - $discount_show_always = ($cust_bill_pkg->get('discounts') - && scalar(@{$cust_bill_pkg->get('discounts')}) - && $conf->exists('discount-show-always')); - - warn " pkgnum ". $cust_bill_pkg->pkgnum. " sum $sum, ". - "setup_show_zero ". $cust_bill_pkg->setup_show_zero. - "recur_show_zero ". $cust_bill_pkg->recur_show_zero. "\n" - if $DEBUG > 0; - - if (scalar(@cust_bill_pkg_bundle) && !$cust_bill_pkg->pkgpart_override) { - push @cust_bill_pkg, @cust_bill_pkg_bundle - if $sum > 0 - || ($sum == 0 && ( $discount_show_always - || grep {$_->recur_show_zero || $_->setup_show_zero} - @cust_bill_pkg_bundle - ) - ); - @cust_bill_pkg_bundle = (); - $sum = 0; + if (scalar(@bundle) and !$cust_bill_pkg->pkgpart_override) { + # ship out this bundle and reset it + if ( $show_this ) { + push @out, @bundle; + } + @bundle = (); + $show_this = 0; } - $sum += $cust_bill_pkg->setup + $cust_bill_pkg->recur; - push @cust_bill_pkg_bundle, $cust_bill_pkg; + # add this item to the current bundle + push @bundle, $cust_bill_pkg; + # determine if it makes the bundle displayable + if ( $cust_bill_pkg->setup > 0 + or $cust_bill_pkg->recur > 0 + or $cust_bill_pkg->setup_show_zero + or $cust_bill_pkg->recur_show_zero + or ($discount_show_always + and scalar(@{ $cust_bill_pkg->get('discounts')}) + ) + ) { + $show_this++; + } } - push @cust_bill_pkg, @cust_bill_pkg_bundle - if $sum > 0 - || ($sum == 0 && ( $discount_show_always - || grep {$_->recur_show_zero || $_->setup_show_zero} - @cust_bill_pkg_bundle - ) - ); + # last bundle + if ( $show_this) { + push @out, @bundle; + } warn " _omit_zero_value_bundles: ". scalar(@in). - '->'. scalar(@cust_bill_pkg). "\n" #. Dumper(@cust_bill_pkg). "\n" + '->'. scalar(@out). "\n" #. Dumper(@out). "\n" if $DEBUG > 2; - (@cust_bill_pkg); - + @out; } sub _make_lines { @@ -1014,8 +1024,14 @@ sub _make_lines { return "$@ running calc_setup for $cust_pkg\n" if $@; - $unitsetup = $cust_pkg->base_setup() - || $setup; #XXX uuh + # Only increment unitsetup here if there IS a setup fee. + # prorate_defer_bill may cause calc_setup on a setup-stage package + # to return zero, and the setup fee to be charged later. (This happens + # when it's first billed on the prorate cutoff day. RT#31276.) + if ( $setup ) { + $unitsetup = $cust_pkg->base_setup() + || $setup; #XXX uuh + } if ( $setup_param{'billed_currency'} ) { $setup_billed_currency = delete $setup_param{'billed_currency'}; @@ -1186,7 +1202,7 @@ sub _make_lines { # Add an additional setup fee at the billing stage. # Used for prorate_defer_bill. $setup += $param{'setup_fee'}; - $unitsetup += $param{'setup_fee'}; + $unitsetup = $cust_pkg->base_setup(); $lineitems++; } diff --git a/FS/FS/cust_main/Billing_Realtime.pm b/FS/FS/cust_main/Billing_Realtime.pm index d973896c8..c2ce680a1 100644 --- a/FS/FS/cust_main/Billing_Realtime.pm +++ b/FS/FS/cust_main/Billing_Realtime.pm @@ -8,7 +8,6 @@ use Data::Dumper; use Business::CreditCard 0.28; use FS::UID qw( dbh ); use FS::Record qw( qsearch qsearchs ); -use FS::Misc qw( send_email ); use FS::payby; use FS::cust_pay; use FS::cust_pay_pending; @@ -623,6 +622,7 @@ sub realtime_bop { '_date' => '', 'payby' => $bop_method2payby{$options{method}}, 'payinfo' => $options{payinfo}, + 'paymask' => $options{paymask}, 'paydate' => $paydate, 'recurring_billing' => $content{recurring_billing}, 'pkgnum' => $options{'pkgnum'}, @@ -766,8 +766,6 @@ sub realtime_bop { if ( $transaction->can('card_token') && $transaction->card_token ) { - $self->card_token($transaction->card_token); - if ( $options{'payinfo'} eq $self->payinfo ) { $self->payinfo($transaction->card_token); my $error = $self->replace; @@ -890,6 +888,7 @@ sub _realtime_bop_result { '_date' => '', 'payby' => $cust_pay_pending->payby, 'payinfo' => $options{'payinfo'}, + 'paymask' => $options{'paymask'}, 'paydate' => $cust_pay_pending->paydate, 'pkgnum' => $cust_pay_pending->pkgnum, 'discount_term' => $options{'discount_term'}, @@ -1121,31 +1120,7 @@ sub _realtime_bop_result { $error = $msg_template->send( 'cust_main' => $self, 'object' => $cust_pay_pending ); } - else { #!$msgnum - - my @templ = $conf->config('declinetemplate'); - my $template = new Text::Template ( - TYPE => 'ARRAY', - SOURCE => [ map "$_\n", @templ ], - ) or return "($perror) can't create template: $Text::Template::ERROR"; - $template->compile() - or return "($perror) can't compile template: $Text::Template::ERROR"; - - my $templ_hash = { - 'company_name' => - scalar( $conf->config('company_name', $self->agentnum ) ), - 'company_address' => - join("\n", $conf->config('company_address', $self->agentnum ) ), - 'error' => $transaction->error_message, - }; - - my $error = send_email( - 'from' => $conf->invoice_from_full( $self->agentnum ), - 'to' => [ grep { $_ ne 'POST' } $self->invoicing_list ], - 'subject' => 'Your payment could not be processed', - 'body' => [ $template->fill_in(HASH => $templ_hash) ], - ); - } + $perror .= " (also received error sending decline notification: $error)" if $error; @@ -1649,6 +1624,7 @@ sub realtime_refund_bop { $order_number = $refund->order_number if $refund->can('order_number'); + # change this to just use $cust_pay->delete_cust_bill_pay? while ( $cust_pay && $cust_pay->unapplied < $amount ) { my @cust_bill_pay = $cust_pay->cust_bill_pay; last unless @cust_bill_pay; diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm index bdad511fa..867d43e60 100644 --- a/FS/FS/cust_main_Mixin.pm +++ b/FS/FS/cust_main_Mixin.pm @@ -426,6 +426,18 @@ sub email_search_result { if ( $msgnum ) { $msg_template = qsearchs('msg_template', { msgnum => $msgnum } ) or die "msgnum $msgnum not found\n"; + } else { + $msg_template = FS::msg_template->new({ + from_addr => $from, + msgname => $subject, # maybe a timestamp also? + disabled => 'D', # 'D'raft + # msgclass, maybe + }); + $error = $msg_template->insert( + subject => $subject, + body => $html_body, + ); + return "$error (when creating draft template)" if $error; } my $sql_query = $class->search($param->{'search'}); @@ -445,6 +457,10 @@ sub email_search_result { my $success = 0; my %sent_to = (); + if ( !$msg_template ) { + die "email_search_result now requires a msg_template"; + } + #eventually order+limit magic to reduce memory use? foreach my $obj ( qsearch($sql_query) ) { @@ -459,36 +475,19 @@ sub email_search_result { } my $cust_main = $obj->cust_main; - tie my %message, 'Tie::IxHash'; if ( !$cust_main ) { next; # unlinked object; nothing else we can do } - if ( $msg_template ) { - # Now supports other context objects. - %message = $msg_template->prepare( - 'cust_main' => $cust_main, - 'object' => $obj, - ); - } - else { - my @to = $cust_main->invoicing_list_emailonly; - next if !@to; - - %message = ( - 'from' => $from, - 'to' => \@to, - 'subject' => $subject, - 'html_body' => $html_body, - 'text_body' => $text_body, - 'custnum' => $cust_main->custnum, - ); - } #if $msg_template + my $cust_msg = $msg_template->prepare( + 'cust_main' => $cust_main, + 'object' => $obj, + ); # For non-cust_main searches, we avoid duplicates based on message - # body text. + # body text. my $unique = $cust_main->custnum; - $unique .= sha1($message{'text_body'}) if $class ne 'FS::cust_main'; + $unique .= sha1($cust_msg->text_body) if $class ne 'FS::cust_main'; if( $sent_to{$unique} ) { # avoid duplicates $dups++; @@ -497,18 +496,20 @@ sub email_search_result { $sent_to{$unique} = 1; - $error = send_email( generate_email( %message ) ); + $error = $cust_msg->send; if($error) { # queue the sending of this message so that the user can see what we # tried to do, and retry if desired + # (note the cust_msg itself also now has a status of 'failed'; that's + # fine, as it will get its status reset if we retry the job) my $queue = new FS::queue { - 'job' => 'FS::Misc::process_send_email', + 'job' => 'FS::cust_msg::process_send', 'custnum' => $cust_main->custnum, 'status' => 'failed', 'statustext' => $error, }; - $queue->insert(%message); + $queue->insert($cust_msg->custmsgnum); push @retry_jobs, $queue; } else { @@ -527,6 +528,14 @@ sub email_search_result { } } # foreach $obj + # if the message template was created as "draft", change its status to + # "completed" + if ($msg_template->disabled eq 'D') { + $msg_template->set('disabled' => 'C'); + my $error = $msg_template->replace; + warn "$error (setting draft message template status)" if $error; + } + if(@retry_jobs) { # fail the job, but with a status message that makes it clear # something was sent. diff --git a/FS/FS/cust_msg.pm b/FS/FS/cust_msg.pm index 72f64b9c5..27272b8a3 100644 --- a/FS/FS/cust_msg.pm +++ b/FS/FS/cust_msg.pm @@ -45,10 +45,14 @@ from FS::Record. The following fields are currently supported: =item header - message header -=item body - message body +=item body - message body (as a complete MIME document) + +=item preview - HTML fragment to show as a preview of the message =item error - Email::Sender error message (or null for success) +=item status - "prepared", "sent", or "failed" + =back =head1 METHODS @@ -137,12 +141,14 @@ sub check { || $self->ut_textn('env_to') || $self->ut_anything('header') || $self->ut_anything('body') + || $self->ut_anything('preview') || $self->ut_enum('status', \@statuses) || $self->ut_textn('error') || $self->ut_enum('msgtype', [ '', 'invoice', 'receipt', 'admin', + 'report', ]) ; return $error if $error; @@ -150,10 +156,28 @@ sub check { $self->SUPER::check; } +=item send + +Sends the message through its parent L<FS::msg_template>. Returns an error +message on error, or an empty string. + +=cut + +sub send { + my $self = shift; + # it's still allowed to have cust_msgs without message templates, but only + # for email. + my $msg_template = $self->msg_template || 'FS::msg_template::email'; + $msg_template->send_prepared($self); +} + =item entity Returns the complete message as a L<MIME::Entity>. +XXX this only works if the message in fact contains a MIME entity. Messages +created by external APIs may not look like that. + =item parts Returns a list of the MIME parts contained in the message, as L<MIME::Entity> @@ -182,6 +206,25 @@ sub parts { =back +=head1 SUBROUTINES + +=over 4 + +=item process_send CUSTMSGNUM + +Given a C<cust_msg.custmsgnum> value, sends the message. It must already +have been prepared (via L<FS::msg_template/prepare>). + +=cut + +sub process_send { + my $custmsgnum = shift; + my $cust_msg = FS::cust_msg->by_key($custmsgnum) + or die "cust_msg #$custmsgnum not found"; + my $error = $cust_msg->send; + die $error if $error; +} + =head1 SEE ALSO L<FS::msg_template>, L<FS::cust_main>, L<FS::Record>. diff --git a/FS/FS/cust_pay.pm b/FS/FS/cust_pay.pm index 5d4f67fe7..d9ae0d39e 100644 --- a/FS/FS/cust_pay.pm +++ b/FS/FS/cust_pay.pm @@ -409,6 +409,22 @@ sub insert { warn "can't send payment receipt/statement: $error" if $error; } + #run payment events immediately + my $due_cust_event = $self->cust_main->due_cust_event( + 'eventtable' => 'cust_pay', + 'objects' => [ $self ], + ); + if ( !ref($due_cust_event) ) { + warn "Error searching for cust_pay billing events: $due_cust_event\n"; + } else { + foreach my $cust_event (@$due_cust_event) { + next unless $cust_event->test_conditions; + if ( my $error = $cust_event->do_event() ) { + warn "Error running cust_pay billing event: $error\n"; + } + } + } + ''; } @@ -645,72 +661,31 @@ sub send_receipt { my %substitutions = (); $substitutions{invnum} = $opt->{cust_bill}->invnum if $opt->{cust_bill}; - my $queue = new FS::queue { - 'job' => 'FS::Misc::process_send_email', - 'paynum' => $self->paynum, - 'custnum' => $cust_main->custnum, - }; - $error = $queue->insert( - FS::msg_template->by_key($msgnum)->prepare( + my $msg_template = qsearchs('msg_template',{ msgnum => $msgnum}); + unless ($msg_template) { + warn "send_receipt could not load msg_template"; + return; + } + + my $cust_msg = $msg_template->prepare( 'cust_main' => $cust_main, 'object' => $self, 'from_config' => 'payment_receipt_from', 'substitutions' => \%substitutions, - ), - 'msgtype' => 'receipt', # override msg_template's default + 'msgtype' => 'receipt', ); - - } elsif ( $conf->exists('payment_receipt_email') ) { - - my $receipt_template = new Text::Template ( - TYPE => 'ARRAY', - SOURCE => [ map "$_\n", $conf->config('payment_receipt_email') ], - ) or do { - warn "can't create payment receipt template: $Text::Template::ERROR"; - return ''; - }; - - my $payby = $self->payby; - my $payinfo = $self->payinfo; - $payby =~ s/^BILL$/Check/ if $payinfo; - if ( $payby eq 'CARD' || $payby eq 'CHEK' ) { - $payinfo = $self->paymask - } else { - $payinfo = $self->decrypt($payinfo); - } - $payby =~ s/^CHEK$/Electronic check/; - - my %fill_in = ( - 'date' => time2str("%a %B %o, %Y", $self->_date), - 'name' => $cust_main->name, - 'paynum' => $self->paynum, - 'paid' => sprintf("%.2f", $self->paid), - 'payby' => ucfirst(lc($payby)), - 'payinfo' => $payinfo, - 'balance' => $cust_main->balance, - 'company_name' => $conf->config('company_name', $cust_main->agentnum), - ); - - $fill_in{'invnum'} = $opt->{cust_bill}->invnum if $opt->{cust_bill}; - - if ( $opt->{'cust_pkg'} ) { - $fill_in{'pkg'} = $opt->{'cust_pkg'}->part_pkg->pkg; - #setup date, other things? + $error = $cust_msg ? $cust_msg->insert : 'error preparing msg_template'; + if ($error) { + warn "send_receipt: $error"; + return; } my $queue = new FS::queue { - 'job' => 'FS::Misc::process_send_generated_email', + 'job' => 'FS::cust_msg::process_send', 'paynum' => $self->paynum, 'custnum' => $cust_main->custnum, - 'msgtype' => 'receipt', }; - $error = $queue->insert( - 'from' => $conf->invoice_from_full( $cust_main->agentnum ), - #invoice_from??? well as good as any - 'to' => \@invoicing_list, - 'subject' => 'Payment receipt', - 'body' => [ $receipt_template->fill_in( HASH => \%fill_in ) ], - ); + $error = $queue->insert( $cust_msg->custmsgnum ); } else { @@ -821,6 +796,102 @@ sub amount { $self->paid(); } +=item delete_cust_bill_pay OPTIONS + +Deletes all associated cust_bill_pay records. + +If option 'unapplied' is a specified, only deletes until +this object's 'unapplied' value is >= the specified amount. +(Deletes in order returned by L</cust_bill_pay>.) + +=cut + +sub delete_cust_bill_pay { + my $self = shift; + my %opt = @_; + + local $SIG{HUP} = 'IGNORE'; + local $SIG{INT} = 'IGNORE'; + local $SIG{QUIT} = 'IGNORE'; + local $SIG{TERM} = 'IGNORE'; + local $SIG{TSTP} = 'IGNORE'; + local $SIG{PIPE} = 'IGNORE'; + + my $oldAutoCommit = $FS::UID::AutoCommit; + local $FS::UID::AutoCommit = 0; + my $dbh = dbh; + + my $unapplied = $self->unapplied; #only need to look it up once + + my $error = ''; + + # Maybe we should reverse the order these get deleted in? + # ie delete newest first? + # keeping consistent with how bop refunds work, for now... + foreach my $cust_bill_pay ( $self->cust_bill_pay ) { + last if $opt{'unapplied'} && ($unapplied > $opt{'unapplied'}); + $unapplied += $cust_bill_pay->amount; + $error = $cust_bill_pay->delete; + last if $error; + } + + if ($error) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + + $dbh->commit or die $dbh->errstr if $oldAutoCommit; + return ''; +} + +=item refund HASHREF + +Accepts input for creating a new FS::cust_refund object. +Unapplies payment from invoices up to the amount of the refund, +creates the refund and applies payment to refund. Allows entire +process to be handled in one transaction. + +Causes a fatal error if called on CARD or CHEK payments. + +=cut + +sub refund { + my $self = shift; + my $hash = shift; + die "Cannot call cust_pay->refund on " . $self->payby + if grep { $_ eq $self->payby } qw(CARD CHEK); + + local $SIG{HUP} = 'IGNORE'; + local $SIG{INT} = 'IGNORE'; + local $SIG{QUIT} = 'IGNORE'; + local $SIG{TERM} = 'IGNORE'; + local $SIG{TSTP} = 'IGNORE'; + local $SIG{PIPE} = 'IGNORE'; + + my $oldAutoCommit = $FS::UID::AutoCommit; + local $FS::UID::AutoCommit = 0; + my $dbh = dbh; + + my $error = $self->delete_cust_bill_pay('amount' => $hash->{'amount'}); + + if ($error) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + + $hash->{'paynum'} = $self->paynum; + my $new = new FS::cust_refund ( $hash ); + $error = $new->insert; + + if ($error) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + + $dbh->commit or die $dbh->errstr if $oldAutoCommit; + return ''; +} + =back =head1 CLASS METHODS @@ -889,7 +960,7 @@ sub batch_insert { } } elsif ( !$error ) { #normal case: apply payments as usual - $cust_pay->cust_main->apply_payments; + $cust_pay->cust_main->apply_payments( 'manual'=>1 ); } } @@ -1240,7 +1311,7 @@ sub process_batch_import { my $cust_pay = shift; my $cust_main = $cust_pay->cust_main or return "can't find customer to which payments apply"; - my $error = $cust_main->apply_payments_and_credits; + my $error = $cust_main->apply_payments_and_credits( 'manual'=>1 ); return $error ? "can't apply payments to customer ".$cust_pay->custnum."$error" : ''; diff --git a/FS/FS/cust_pay_batch.pm b/FS/FS/cust_pay_batch.pm index a5fa89b19..8dd644681 100644 --- a/FS/FS/cust_pay_batch.pm +++ b/FS/FS/cust_pay_batch.pm @@ -3,7 +3,7 @@ use base qw( FS::payinfo_Mixin FS::cust_main_Mixin FS::Record ); use strict; use vars qw( $DEBUG ); -use Carp qw( confess ); +use Carp qw( carp confess ); use Business::CreditCard 0.28; use FS::Record qw(dbh qsearch qsearchs); @@ -502,6 +502,19 @@ sub unbatch_and_delete { } +=item cust_bill + +Returns the invoice linked to this batched payment. Deprecated, will be +removed. + +=cut + +sub cust_bill { + carp "FS::cust_pay_batch->cust_bill is deprecated"; + my $self = shift; + $self->invnum ? qsearchs('cust_bill', { invnum => $self->invnum }) : ''; +} + =back =head1 BUGS diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index c5a3d2e58..279205b19 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -13,7 +13,6 @@ use Tie::IxHash; use Time::Local qw( timelocal timelocal_nocheck ); use MIME::Entity; use FS::UID qw( dbh driver_name ); -use FS::Misc qw( send_email ); use FS::Record qw( qsearch qsearchs fields ); use FS::CurrentUser; use FS::cust_svc; @@ -1057,16 +1056,6 @@ sub cancel { $error = $msg_template->send( 'cust_main' => $self->cust_main, 'object' => $self ); } - else { - $error = send_email( - 'from' => $conf->invoice_from_full( $self->cust_main->agentnum ), - 'to' => \@invoicing_list, - 'subject' => ( $conf->config('cancelsubject') || 'Cancellation Notice' ), - 'body' => [ map "$_\n", $conf->config('cancelmessage') ], - 'custnum' => $self->custnum, - 'msgtype' => '', #admin? - ); - } #should this do something on errors? } @@ -2296,9 +2285,15 @@ sub change { } } - # transfer usage pricing add-ons, if we're not changing pkgpart - if ( $same_pkgpart ) { - foreach my $old_cust_pkg_usageprice ($self->cust_pkg_usageprice) { + # transfer usage pricing add-ons, if we're not changing pkgpart or if they were specified + if ( $same_pkgpart || $opt->{'cust_pkg_usageprice'}) { + my @old_cust_pkg_usageprice; + if ($opt->{'cust_pkg_usageprice'}) { + @old_cust_pkg_usageprice = @{ $opt->{'cust_pkg_usageprice'} }; + } else { + @old_cust_pkg_usageprice = $self->cust_pkg_usageprice; + } + foreach my $old_cust_pkg_usageprice (@old_cust_pkg_usageprice) { my $new_cust_pkg_usageprice = new FS::cust_pkg_usageprice { 'pkgnum' => $cust_pkg->pkgnum, 'usagepricepart' => $old_cust_pkg_usageprice->usagepricepart, diff --git a/FS/FS/cust_pkg_usageprice.pm b/FS/FS/cust_pkg_usageprice.pm index 5b6b18c70..29e627882 100644 --- a/FS/FS/cust_pkg_usageprice.pm +++ b/FS/FS/cust_pkg_usageprice.pm @@ -163,6 +163,11 @@ sub apply { #this has no multiplication involved, its just a set only #} elsif ( $target eq 'svc_conferencing.confqualitynum' ) { + + } elsif ( $target eq 'sqlradacct_hour.recur_included_total' ) { + + $error = "Cannot call apply on target $target"; + } if ( $error ) { diff --git a/FS/FS/cust_tax_exempt_pkg.pm b/FS/FS/cust_tax_exempt_pkg.pm index b64ef515d..5057781f4 100644 --- a/FS/FS/cust_tax_exempt_pkg.pm +++ b/FS/FS/cust_tax_exempt_pkg.pm @@ -3,6 +3,7 @@ use base qw( FS::cust_main_Mixin FS::Record ); use strict; use FS::UID qw(dbh); +use FS::cust_main_county; use FS::upgrade_journal; # some kind of common ancestor with cust_bill_pkg_tax_location would make sense @@ -176,6 +177,16 @@ Otherwise returns false. =cut +# do not remove; this can't be autogenerated + +sub cust_main_county { + my $self = shift; + if ( $self->taxtype eq 'FS::cust_main_county' ) { + return FS::cust_main_county->by_key($self->taxnum); + } + ''; +} + sub _upgrade_data { my $class = shift; diff --git a/FS/FS/deploy_zone.pm b/FS/FS/deploy_zone.pm index 38dd7dc2d..71129cf44 100644 --- a/FS/FS/deploy_zone.pm +++ b/FS/FS/deploy_zone.pm @@ -6,6 +6,13 @@ use FS::Record qw( qsearch qsearchs dbh ); use Storable qw(thaw); use MIME::Base64; +use JSON qw(encode_json decode_json) ; +use LWP::UserAgent; +use HTTP::Request::Common; + +# update this in 2020, along with the URL for the TIGERweb service +our $CENSUS_YEAR = 2010; + =head1 NAME FS::deploy_zone - Object methods for deploy_zone records @@ -48,6 +55,12 @@ Optional text describing the zone. The agent that serves this zone. +=item censusyear + +The census map year for which this zone was last updated. May be null for +zones that contain no census blocks (mobile zones, or fixed zones that haven't +had their block lists filled in yet). + =item dbaname The name under which service is marketed in this zone. If null, will @@ -58,6 +71,8 @@ default to the agent name. The way the zone geography is defined: "B" for a list of census blocks (used by the FCC for fixed broadband service), "P" for a polygon (for mobile services). See L<FS::deploy_zone_block> and L<FS::deploy_zone_vertex>. +Note that block-type zones are still allowed to have a vertex list, for +use by the map editor. =item technology @@ -147,12 +162,16 @@ sub delete { local $FS::UID::AutoCommit = 0; # clean up linked records my $self = shift; - my $error = $self->process_o2m( - 'table' => $self->element_table, - 'num_col' => 'zonenum', - 'fields' => 'zonenum', - 'params' => {}, - ) || $self->SUPER::delete(@_); + my $error; + foreach (qw(deploy_zone_block deploy_zone_vertex)) { + $error ||= $self->process_o2m( + 'table' => $_, + 'num_col' => 'zonenum', + 'fields' => 'zonenum', + 'params' => {}, + ); + } + $error ||= $self->SUPER::delete(@_); if ($error) { dbh->rollback if $oldAutoCommit; @@ -185,6 +204,7 @@ sub check { $self->ut_numbern('zonenum') || $self->ut_text('description') || $self->ut_number('agentnum') + || $self->ut_numbern('censusyear') || $self->ut_foreign_key('agentnum', 'agent', 'agentnum') || $self->ut_textn('dbaname') || $self->ut_enum('zonetype', [ 'B', 'P' ]) @@ -219,24 +239,6 @@ sub check { $self->SUPER::check; } -=item element_table - -Returns the name of the table that contains the zone's elements (blocks or -vertices). - -=cut - -sub element_table { - my $self = shift; - if ($self->zonetype eq 'B') { - return 'deploy_zone_block'; - } elsif ( $self->zonetype eq 'P') { - return 'deploy_zone_vertex'; - } else { - die 'unknown zonetype'; - } -} - =item deploy_zone_block Returns the census block records in this zone, in order by census block @@ -244,8 +246,7 @@ number. Only appropriate to block-type zones. =item deploy_zone_vertex -Returns the vertex records for this zone, in order by sequence number. Only -appropriate to polygon-type zones. +Returns the vertex records for this zone, in order by sequence number. =cut @@ -267,7 +268,19 @@ sub deploy_zone_vertex { }); } -=back +=item vertices_json + +Returns the vertex list for this zone, as a JSON string of + +[ [ latitude0, longitude0 ], [ latitude1, longitude1 ] ... ] + +=cut + +sub vertices_json { + my $self = shift; + my @vertices = map { [ $_->latitude, $_->longitude ] } $self->deploy_zone_vertex; + encode_json(\@vertices); +} =head2 SUBROUTINES @@ -315,7 +328,125 @@ sub process_batch_import { FS::Record::process_batch_import( $job, $opt, $param ); } - + +=item process_block_lookup JOB, ZONENUM + +Look up all the census blocks in the zone's footprint, and insert them. +This will replace any existing block list. + +=cut + +sub process_block_lookup { + my $job = shift; + my $param = shift; + if (!ref($param)) { + $param = thaw(decode_base64($param)); + } + my $zonenum = $param->{zonenum}; + my $zone = FS::deploy_zone->by_key($zonenum) + or die "zone $zonenum not found\n"; + + # wipe the existing list of blocks + my $error = $zone->process_o2m( + 'table' => 'deploy_zone_block', + 'num_col' => 'zonenum', + 'fields' => 'zonenum', + 'params' => {}, + ); + die $error if $error; + + $job->update_statustext('0,querying census database') if $job; + + # negotiate the rugged jungle trails of the ArcGIS REST protocol: + # 1. unlike most places, longitude first. + my @zone_vertices = map { [ $_->longitude, $_->latitude ] } + $zone->deploy_zone_vertex; + + return if scalar(@zone_vertices) < 3; # then don't bother + + # 2. package this as "rings", inside a JSON geometry object + # 3. announce loudly and frequently that we are using spatial reference + # 4326, "true GPS coordinates" + my $geometry = encode_json({ + 'rings' => [ \@zone_vertices ], + 'wkid' => 4326, + }); + + my %query = ( + f => 'json', # duh + geometry => $geometry, + geometryType => 'esriGeometryPolygon', # as opposed to a bounding box + inSR => 4326, + outSR => 4326, + spatialRel => 'esriSpatialRelIntersects', # the test to perform + outFields => 'OID,GEOID', + returnGeometry => 'false', + orderByFields => 'OID', + ); + my $url = 'http://tigerweb.geo.census.gov/arcgis/rest/services/TIGERweb/Tracts_Blocks/MapServer/12/query'; + my $ua = LWP::UserAgent->new; + + # first find out how many of these we're dealing with + my $response = $ua->request( + POST $url, Content => [ + %query, + returnCountOnly => 1, + ] + ); + die $response->status_line unless $response->is_success; + my $data = decode_json($response->content); + # their error messages are mostly useless, but don't just blindly continue + die $data->{error}{message} if $data->{error}; + + my $count = $data->{count}; + my $inserted = 0; + + #warn "Census block lookup: $count\n"; + + # we have to do our own pagination on this, because the census bureau + # doesn't support resultOffset (maybe they don't have ArcGIS 10.3 yet). + # that's why we're ordering by OID, it's globally unique + my $last_oid = 0; + my $done = 0; + while (!$done) { + $response = $ua->request( + POST $url, Content => [ + %query, + where => "OID>$last_oid", + ] + ); + die $response->status_line unless $response->is_success; + $data = decode_json($response->content); + die $data->{error}{message} if $data->{error}; + + foreach my $feature (@{ $data->{features} }) { + my $geoid = $feature->{attributes}{GEOID}; # the prize + my $block = FS::deploy_zone_block->new({ + zonenum => $zonenum, + censusblock => $geoid + }); + $error = $block->insert; + die "$error (inserting census block $geoid)" if $error; + + $inserted++; + if ($job and $inserted % 100 == 0) { + my $percent = sprintf('%.0f', $inserted / $count * 100); + $job->update_statustext("$percent,creating block records"); + } + } + + #warn "Inserted $inserted records\n"; + $last_oid = $data->{features}[-1]{attributes}{OID}; + $done = 1 unless $data->{exceededTransferLimit}; + } + + $zone->set('censusyear', $CENSUS_YEAR); + $error = $zone->replace; + warn "$error (updating zone census year)" if $error; # whatever, continue + + return; +} + =head1 BUGS =head1 SEE ALSO diff --git a/FS/FS/deploy_zone_block.pm b/FS/FS/deploy_zone_block.pm index 757af7e3d..2ac18e2fe 100644 --- a/FS/FS/deploy_zone_block.pm +++ b/FS/FS/deploy_zone_block.pm @@ -43,10 +43,6 @@ L<FS::deploy_zone> foreign key for the zone. U.S. census block number (15 digits). -=item censusyear - -The year of the census map where the block appeared or was last verified. - =back =head1 METHODS @@ -107,7 +103,6 @@ sub check { $self->ut_numbern('blocknum') || $self->ut_number('zonenum') || $self->ut_number('censusblock') - || $self->ut_number('censusyear') ; return $error if $error; diff --git a/FS/FS/discount.pm b/FS/FS/discount.pm index 361e0b4b2..e11335741 100644 --- a/FS/FS/discount.pm +++ b/FS/FS/discount.pm @@ -196,7 +196,13 @@ sub description { ( my $months = $self->months ) =~ s/\.0+$//; $months =~ s/(\.\d*[1-9])0+$/$1/; - $desc .= " for $months months" if $months; + if ($months) { + if ($months == 1) { + $desc .= " for 1 month"; + } else { + $desc .= " for $months months"; + } + } $desc .= ', applies to setup' if $self->setup; diff --git a/FS/FS/log_context.pm b/FS/FS/log_context.pm index 403829ac2..bd142471c 100644 --- a/FS/FS/log_context.pm +++ b/FS/FS/log_context.pm @@ -9,7 +9,9 @@ my @contexts = ( qw( bill_and_collect FS::cust_main::Billing::bill_and_collect FS::cust_main::Billing::bill + FS::pay_batch::import_from_gateway Cron::bill + Cron::backup Cron::upload spool_upload daily diff --git a/FS/FS/msg_template.pm b/FS/FS/msg_template.pm index c52b6336e..d17fd41cb 100644 --- a/FS/FS/msg_template.pm +++ b/FS/FS/msg_template.pm @@ -4,25 +4,14 @@ use base qw( FS::Record ); use strict; use vars qw( $DEBUG $conf ); -use Date::Format qw( time2str ); -use File::Temp; -use IPC::Run qw(run); -use Text::Template; - -use HTML::Entities qw( decode_entities encode_entities ) ; -use HTML::FormatText; -use HTML::TreeBuilder; -use Encode; - -use FS::Misc qw( generate_email send_email do_print ); use FS::Conf; -use FS::Record qw( qsearch qsearchs ); -use FS::UID qw( dbh ); +use FS::Record qw( qsearch qsearchs dbh ); -use FS::cust_main; use FS::cust_msg; use FS::template_content; +use Date::Format qw(time2str); + FS::UID->install_callback( sub { $conf = new FS::Conf; } ); $DEBUG=0; @@ -46,6 +35,12 @@ FS::msg_template - Object methods for msg_template records $error = $record->check; +=head1 NOTE + +This uses a table-per-subclass ORM strategy, which is a somewhat cleaner +version of what we do elsewhere with _option tables. We could easily extract +that functionality into a base class, or even into FS::Record itself. + =head1 DESCRIPTION An FS::msg_template object represents a customer message template. @@ -59,6 +54,9 @@ supported: =item msgname - Name of the template. This will appear in the user interface; if it needs to be localized for some users, add it to the message catalog. +=item msgclass - The L<FS::msg_template> subclass that this should belong to. +Defaults to 'email'. + =item agentnum - Agent associated with this template. Can be NULL for a global template. @@ -66,7 +64,11 @@ global template. =item from_addr - Source email address. -=item disabled - disabled ('Y' or NULL). +=item bcc_addr - Bcc all mail to this address. + +=item disabled - disabled (NULL for not-disabled and selectable, 'D' for a +draft of a one-time message, 'C' for a completed one-time message, 'Y' for a +normal template disabled by user action). =back @@ -87,40 +89,71 @@ points to. You can ask the object for a copy with the I<hash> method. sub table { 'msg_template'; } +sub extension_table { ''; } # subclasses don't HAVE to have extensions + +sub _rebless { + my $self = shift; + my $class = 'FS::msg_template::' . $self->msgclass; + eval "use $class;"; + bless($self, $class) unless $@; + warn "Error loading msg_template msgclass: " . $@ if $@; #or die? + + # merge in the extension fields (but let fields in $self override them) + # except don't ever override the extension's primary key, it's immutable + if ( $self->msgnum and $self->extension_table ) { + my $extension = $self->_extension; + if ( $extension ) { + my $ext_key = $extension->get($extension->primary_key); + $self->{Hash} = { $extension->hash, + $self->hash, + $extension->primary_key => $ext_key + }; + } + } + + $self; +} + +# Returns the subclass-specific extension record for this object. For internal +# use only; everyone else is supposed to think of this as a single record. + +sub _extension { + my $self = shift; + if ( $self->extension_table and $self->msgnum ) { + local $FS::Record::nowarn_classload = 1; + return qsearchs($self->extension_table, { msgnum => $self->msgnum }); + } + return; +} + =item insert [ CONTENT ] Adds this record to the database. If there is an error, returns the error, otherwise returns false. -A default (no locale) L<FS::template_content> object will be created. CONTENT -is an optional hash containing 'subject' and 'body' for this object. - =cut sub insert { my $self = shift; - my %content = @_; + $self->_rebless; my $oldAutoCommit = $FS::UID::AutoCommit; local $FS::UID::AutoCommit = 0; - my $dbh = dbh; my $error = $self->SUPER::insert; - if ( !$error ) { - $content{'msgnum'} = $self->msgnum; - $content{'subject'} ||= ''; - $content{'body'} ||= ''; - my $template_content = new FS::template_content (\%content); - $error = $template_content->insert; + # calling _extension at this point makes it copy the msgnum, so links work + if ( $self->extension_table ) { + local $FS::Record::nowarn_classload = 1; + my $extension = FS::Record->new($self->extension_table, { $self->hash }); + $error ||= $extension->insert; } if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; + dbh->rollback if $oldAutoCommit; + } else { + dbh->commit if $oldAutoCommit; } - - $dbh->commit if $oldAutoCommit; - return; + $error; } =item delete @@ -129,61 +162,73 @@ Delete this record from the database. =cut -# the delete method can be inherited from FS::Record +sub delete { + my $self = shift; + + my $oldAutoCommit = $FS::UID::AutoCommit; + local $FS::UID::AutoCommit = 0; + + my $error; + my $extension = $self->_extension; + if ( $extension ) { + $error = $extension->delete; + } + + $error ||= $self->SUPER::delete; + + if ( $error ) { + dbh->rollback if $oldAutoCommit; + } else { + dbh->commit if $oldAutoCommit; + } + $error; +} -=item replace [ OLD_RECORD ] [ CONTENT ] +=item replace [ OLD_RECORD ] Replaces the OLD_RECORD with this one in the database. If there is an error, returns the error, otherwise returns false. -CONTENT is an optional hash containing 'subject', 'body', and 'locale'. If -supplied, an L<FS::template_content> object will be created (or modified, if -one already exists for this locale). - =cut sub replace { - my $self = shift; - my $old = ( ref($_[0]) and $_[0]->isa('FS::Record') ) - ? shift - : $self->replace_old; - my %content = @_; - + my $new = shift; + my $old = shift || $new->replace_old; + my $oldAutoCommit = $FS::UID::AutoCommit; local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $self->SUPER::replace($old); - - if ( !$error and %content ) { - $content{'locale'} ||= ''; - my $new_content = qsearchs('template_content', { - 'msgnum' => $self->msgnum, - 'locale' => $content{'locale'}, - } ); - if ( $new_content ) { - $new_content->subject($content{'subject'}); - $new_content->body($content{'body'}); - $error = $new_content->replace; - } - else { - $content{'msgnum'} = $self->msgnum; - $new_content = new FS::template_content \%content; - $error = $new_content->insert; - } + + my $error = $new->SUPER::replace($old, @_); + + my $extension = $new->_extension; + if ( $extension ) { + # merge changes into the extension record and replace it + $extension->{Hash} = { $extension->hash, $new->hash }; + $error ||= $extension->replace; } if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; + dbh->rollback if $oldAutoCommit; + } else { + dbh->commit if $oldAutoCommit; } - - warn "committing FS::msg_template->replace\n" if $DEBUG and $oldAutoCommit; - $dbh->commit if $oldAutoCommit; - return; + $error; } - +sub replace_check { + my $self = shift; + my $old = $self->replace_old; + # don't allow changing msgclass, except null to not-null (for upgrade) + if ( $old->msgclass ) { + if ( !$self->msgclass ) { + $self->set('msgclass', $old->msgclass); + } elsif ( $old->msgclass ne $self->msgclass ) { + return "Can't change message template class from ".$old->msgclass. + " to ".$self->msgclass."."; + } + } + ''; +} =item check @@ -204,8 +249,12 @@ sub check { || $self->ut_text('msgname') || $self->ut_foreign_keyn('agentnum', 'agent', 'agentnum') || $self->ut_textn('mime_type') - || $self->ut_enum('disabled', [ '', 'Y' ] ) + || $self->ut_enum('disabled', [ '', 'Y', 'D', 'S' ] ) || $self->ut_textn('from_addr') + || $self->ut_textn('bcc_addr') + # fine for now, but change this to some kind of dynamic check if we + # ever have more than two msgclasses + || $self->ut_enum('msgclass', [ qw(email http) ]), ; return $error if $error; @@ -214,25 +263,10 @@ sub check { $self->SUPER::check; } -=item content_locales - -Returns a hashref of the L<FS::template_content> objects attached to -this template, with the locale as key. - -=cut - -sub content_locales { - my $self = shift; - return $self->{'_content_locales'} ||= +{ - map { $_->locale , $_ } - qsearch('template_content', { 'msgnum' => $self->msgnum }) - }; -} - =item prepare OPTION => VALUE -Fills in the template and returns a hash of the 'from' address, 'to' -addresses, subject line, and body. +Fills in the template and returns an L<FS::cust_msg> object, containing the +message to be sent. This method must be provided by the subclass. Options are passed as a list of name/value pairs: @@ -276,18 +310,23 @@ A hash reference of additional substitutions =cut sub prepare { + die "unimplemented"; +} + +=item prepare_substitutions OPTION => VALUE ... + +Takes the same arguments as L</prepare>, and returns a hashref of the +substitution variables. + +=cut + +sub prepare_substitutions { my( $self, %opt ) = @_; my $cust_main = $opt{'cust_main'}; # or die 'cust_main required'; my $object = $opt{'object'} or die 'object required'; - # localization - my $locale = $cust_main && $cust_main->locale || ''; - warn "no locale for cust#".$cust_main->custnum."; using default content\n" - if $DEBUG and $cust_main && !$locale; - my $content = $self->content($locale); - - warn "preparing template '".$self->msgname."\n" + warn "preparing substitutions for '".$self->msgname."'\n" if $DEBUG; my $subs = $self->substitutions; @@ -340,110 +379,19 @@ sub prepare { $hash{$_} = $opt{substitutions}->{$_} foreach keys %{$opt{substitutions}}; } - $_ = encode_entities($_ || '') foreach values(%hash); - - ### - # clean up template - ### - my $subject_tmpl = new Text::Template ( - TYPE => 'STRING', - SOURCE => $content->subject, - ); - my $subject = $subject_tmpl->fill_in( HASH => \%hash ); - - my $body = $content->body; - my ($skin, $guts) = eviscerate($body); - @$guts = map { - $_ = decode_entities($_); # turn all punctuation back into itself - s/\r//gs; # remove \r's - s/<br[^>]*>/\n/gsi; # and <br /> tags - s/<p>/\n/gsi; # and <p> - s/<\/p>//gsi; # and </p> - s/\240/ /gs; # and - $_ - } @$guts; - - $body = '{ use Date::Format qw(time2str); "" }'; - while(@$skin || @$guts) { - $body .= shift(@$skin) || ''; - $body .= shift(@$guts) || ''; - } - - ### - # fill-in - ### - - my $body_tmpl = new Text::Template ( - TYPE => 'STRING', - SOURCE => $body, - ); - - $body = $body_tmpl->fill_in( HASH => \%hash ); - - ### - # and email - ### - - my @to; - if ( exists($opt{'to'}) ) { - @to = split(/\s*,\s*/, $opt{'to'}); - } elsif ( $cust_main ) { - @to = $cust_main->invoicing_list_emailonly; - } else { - die 'no To: address or cust_main object specified'; - } - - my $from_addr = $self->from_addr; - - if ( !$from_addr ) { - - my $agentnum = $cust_main ? $cust_main->agentnum : ''; - - if ( $opt{'from_config'} ) { - $from_addr = $conf->config($opt{'from_config'}, $agentnum); - } - $from_addr ||= $conf->invoice_from_full($agentnum); - } -# my @cust_msg = (); -# if ( $conf->exists('log_sent_mail') and !$opt{'preview'} ) { -# my $cust_msg = FS::cust_msg->new({ -# 'custnum' => $cust_main->custnum, -# 'msgnum' => $self->msgnum, -# 'status' => 'prepared', -# }); -# $cust_msg->insert; -# @cust_msg = ('cust_msg' => $cust_msg); -# } - - my $text_body = encode('UTF-8', - HTML::FormatText->new(leftmargin => 0, rightmargin => 70) - ->format( HTML::TreeBuilder->new_from_content($body) ) - ); - ( - 'custnum' => ( $cust_main ? $cust_main->custnum : ''), - 'msgnum' => $self->msgnum, - 'from' => $from_addr, - 'to' => \@to, - 'bcc' => $self->bcc_addr || undef, - 'subject' => $subject, - 'html_body' => $body, - 'text_body' => $text_body - ); - + return \%hash; } -=item send OPTION => VALUE +=item send OPTION => VALUE ... -Fills in the template and sends it to the customer. Options are as for -'prepare'. +Creates a message with L</prepare> (taking all the same options) and sends it. =cut -# broken out from prepare() in case we want to queue the sending, -# preview it, etc. sub send { my $self = shift; - send_email(generate_email($self->prepare(@_))); + my $cust_msg = $self->prepare(@_); + $self->send_prepared($cust_msg); } =item render OPTION => VALUE ... @@ -455,6 +403,9 @@ Options are as for 'prepare', but 'from' and 'to' are meaningless. =cut +# XXX not sure where this ends up post-refactoring--a separate template +# class? it doesn't use the same rendering OR output machinery as ::email + # will also have options to set paper size, margins, etc. sub render { @@ -507,8 +458,6 @@ my $usage_warning = sub { return ['', '', '']; }; -#my $conf = new FS::Conf; - #return contexts and fill-in values # If you add anything, be sure to add a description in # httemplate/edit/msg_template.html. @@ -686,19 +635,11 @@ sub substitutions { =item content LOCALE -Returns the L<FS::template_content> object appropriate to LOCALE, if there -is one. If not, returns the one with a NULL locale. +Stub, returns nothing. =cut -sub content { - my $self = shift; - my $locale = shift; - qsearchs('template_content', - { 'msgnum' => $self->msgnum, 'locale' => $locale }) || - qsearchs('template_content', - { 'msgnum' => $self->msgnum, 'locale' => '' }); -} +sub content {} =item agent @@ -719,20 +660,22 @@ sub _upgrade_data { [ 'decline_msgnum', 'declinetemplate', '', '', '' ], [ 'impending_recur_msgnum', 'impending_recur_template', '', '', 'impending_recur_bcc' ], [ 'payment_receipt_msgnum', 'payment_receipt_email', '', '', '' ], - [ 'welcome_msgnum', 'welcome_email', 'welcome_email-subject', 'welcome_email-from', '' ], - [ 'warning_msgnum', 'warning_email', 'warning_email-subject', 'warning_email-from', '' ], + [ 'welcome_msgnum', 'welcome_email', 'welcome_email-subject', 'welcome_email-from', '', 'welcome_email-mimetype' ], + [ 'threshold_warning_msgnum', 'warning_email', 'warning_email-subject', 'warning_email-from', 'warning_email-cc', 'warning_email-mimetype' ], ); my @agentnums = ('', map {$_->agentnum} qsearch('agent', {})); foreach my $agentnum (@agentnums) { foreach (@fixes) { - my ($newname, $oldname, $subject, $from, $bcc) = @$_; + my ($newname, $oldname, $subject, $from, $bcc, $mimetype) = @$_; + if ($conf->exists($oldname, $agentnum)) { my $new = new FS::msg_template({ + 'msgclass' => 'email', 'msgname' => $oldname, 'agentnum' => $agentnum, 'from_addr' => ($from && $conf->config($from, $agentnum)) || '', - 'bcc_addr' => ($bcc && $conf->config($from, $agentnum)) || '', + 'bcc_addr' => ($bcc && $conf->config($bcc, $agentnum)) || '', 'subject' => ($subject && $conf->config($subject, $agentnum)) || '', 'mime_type' => 'text/html', 'body' => join('<BR>',$conf->config($oldname, $agentnum)), @@ -743,6 +686,8 @@ sub _upgrade_data { $conf->delete($oldname, $agentnum); $conf->delete($from, $agentnum) if $from; $conf->delete($subject, $agentnum) if $subject; + $conf->delete($bcc, $agentnum) if $bcc; + $conf->delete($mimetype, $agentnum) if $mimetype; } } @@ -827,10 +772,16 @@ sub _upgrade_data { } $content{body} = $body; $msg_template->set('body', ''); - my $error = $msg_template->replace(%content); die $error if $error; } + + if ( !$msg_template->msgclass ) { + # set default message class + $msg_template->set('msgclass', 'email'); + my $error = $msg_template->replace; + die $error if $error; + } } ### @@ -863,56 +814,6 @@ sub _populate_initial_data { #class method } -sub eviscerate { - # Every bit as pleasant as it sounds. - # - # We do this because Text::Template::Preprocess doesn't - # actually work. It runs the entire template through - # the preprocessor, instead of the code segments. Which - # is a shame, because Text::Template already contains - # the code to do this operation. - my $body = shift; - my (@outside, @inside); - my $depth = 0; - my $chunk = ''; - while($body || $chunk) { - my ($first, $delim, $rest); - # put all leading non-delimiters into $first - ($first, $rest) = - ($body =~ /^((?:\\[{}]|[^{}])*)(.*)$/s); - $chunk .= $first; - # put a leading delimiter into $delim if there is one - ($delim, $rest) = - ($rest =~ /^([{}]?)(.*)$/s); - - if( $delim eq '{' ) { - $chunk .= '{'; - if( $depth == 0 ) { - push @outside, $chunk; - $chunk = ''; - } - $depth++; - } - elsif( $delim eq '}' ) { - $depth--; - if( $depth == 0 ) { - push @inside, $chunk; - $chunk = ''; - } - $chunk .= '}'; - } - else { - # no more delimiters - if( $depth == 0 ) { - push @outside, $chunk . $rest; - } # else ? something wrong - last; - } - $body = $rest; - } - (\@outside, \@inside); -} - =back =head1 BUGS diff --git a/FS/FS/msg_template/InitialData.pm b/FS/FS/msg_template/InitialData.pm index a4e27fdc9..dbb9f4037 100644 --- a/FS/FS/msg_template/InitialData.pm +++ b/FS/FS/msg_template/InitialData.pm @@ -3,6 +3,7 @@ package FS::msg_template::InitialData; sub _initial_data { [ { msgname => 'Password reset', + msgclass => 'email', mime_type => 'text/html', #multipart/alternative with a text part? # cranky mutt/pine users like me are rare diff --git a/FS/FS/msg_template/email.pm b/FS/FS/msg_template/email.pm new file mode 100644 index 000000000..377dbb17b --- /dev/null +++ b/FS/FS/msg_template/email.pm @@ -0,0 +1,592 @@ +package FS::msg_template::email; +use base qw( FS::msg_template ); + +use strict; +use vars qw( $DEBUG $conf ); + +# stuff needed for template generation +use Date::Format qw( time2str ); +use File::Temp; +use IPC::Run qw(run); +use Text::Template; + +use HTML::Entities qw( decode_entities encode_entities ) ; +use HTML::FormatText; +use HTML::TreeBuilder; +use Encode; + +# needed to send email +use FS::Misc qw( generate_email ); +use FS::Conf; +use Email::Sender::Simple qw( sendmail ); + +use FS::Record qw( qsearch qsearchs ); + +# needed to manage template_content objects +use FS::template_content; +use FS::UID qw( dbh ); + +# needed to manage prepared messages +use FS::cust_msg; + +FS::UID->install_callback( sub { $conf = new FS::Conf; } ); + +our $DEBUG = 0; +our $me = '[FS::msg_template::email]'; + +=head1 NAME + +FS::msg_template::email - Construct email notices with Text::Template. + +=head1 DESCRIPTION + +FS::msg_template::email is a message processor in which the template contains +L<Text::Template> strings for the message subject line and body, and the +message is delivered by email. + +Currently the C<from_addr> and C<bcc_addr> fields used by this processor are +in the main msg_template table. + +=head1 METHODS + +=over 4 + +=item insert [ CONTENT ] + +Adds this record to the database. If there is an error, returns the error, +otherwise returns false. + +A default (no locale) L<FS::template_content> object will be created. CONTENT +is an optional hash containing 'subject' and 'body' for this object. + +=cut + +sub insert { + my $self = shift; + my %content = @_; + + my $oldAutoCommit = $FS::UID::AutoCommit; + local $FS::UID::AutoCommit = 0; + my $dbh = dbh; + + my $error = $self->SUPER::insert; + if ( !$error ) { + $content{'msgnum'} = $self->msgnum; + $content{'subject'} ||= ''; + $content{'body'} ||= ''; + my $template_content = new FS::template_content (\%content); + $error = $template_content->insert; + } + + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + + $dbh->commit if $oldAutoCommit; + return; +} + +=item replace [ OLD_RECORD ] [ CONTENT ] + +Replaces the OLD_RECORD with this one in the database. If there is an error, +returns the error, otherwise returns false. + +CONTENT is an optional hash containing 'subject', 'body', and 'locale'. If +supplied, an L<FS::template_content> object will be created (or modified, if +one already exists for this locale). + +=cut + +sub replace { + my $self = shift; + my $old = ( ref($_[0]) and $_[0]->isa('FS::Record') ) + ? shift + : $self->replace_old; + my %content = @_; + + my $oldAutoCommit = $FS::UID::AutoCommit; + local $FS::UID::AutoCommit = 0; + my $dbh = dbh; + + my $error = $self->SUPER::replace($old); + + if ( !$error and %content ) { + $content{'locale'} ||= ''; + my $new_content = qsearchs('template_content', { + 'msgnum' => $self->msgnum, + 'locale' => $content{'locale'}, + } ); + if ( $new_content ) { + $new_content->subject($content{'subject'}); + $new_content->body($content{'body'}); + $error = $new_content->replace; + } + else { + $content{'msgnum'} = $self->msgnum; + $new_content = new FS::template_content \%content; + $error = $new_content->insert; + } + } + + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + + warn "committing FS::msg_template->replace\n" if $DEBUG and $oldAutoCommit; + $dbh->commit if $oldAutoCommit; + return; +} + +=item content_locales + +Returns a hashref of the L<FS::template_content> objects attached to +this template, with the locale as key. + +=cut + +sub content_locales { + my $self = shift; + return $self->{'_content_locales'} ||= +{ + map { $_->locale , $_ } + qsearch('template_content', { 'msgnum' => $self->msgnum }) + }; +} + +=item prepare OPTION => VALUE + +Fills in the template and returns an L<FS::cust_msg> object. + +Options are passed as a list of name/value pairs: + +=over 4 + +=item cust_main + +Customer object (required). + +=item object + +Additional context object (currently, can be a cust_main, cust_pkg, +cust_bill, cust_pay, cust_pay_pending, or svc_(acct, phone, broadband, +domain) ). If the object is a svc_*, its cust_pkg will be fetched and +used for substitution. + +As a special case, this may be an arrayref of two objects. Both +objects will be available for substitution, with their field names +prefixed with 'new_' and 'old_' respectively. This is used in the +rt_ticket export when exporting "replace" events. + +=item from_config + +Configuration option to use as the source address, based on the customer's +agentnum. If unspecified (or the named option is empty), 'invoice_from' +will be used. + +The I<from_addr> field in the template takes precedence over this. + +=item to + +Destination address. The default is to use the customer's +invoicing_list addresses. Multiple addresses may be comma-separated. + +=item substitutions + +A hash reference of additional substitutions + +=item msgtype + +A string identifying the kind of message this is. Currently can be "invoice", +"receipt", "admin", or null. Expand this list as necessary. + +=item override_content + +A string to use as the HTML body; if specified, replaces the entire +body of the message. This should be used ONLY by L<FS::report_batch> and may +go away in the future. + +=back + +=cut + +sub prepare { + + my( $self, %opt ) = @_; + + my $cust_main = $opt{'cust_main'}; # or die 'cust_main required'; + my $object = $opt{'object'} or die 'object required'; + + my $hashref = $self->prepare_substitutions(%opt); + + # localization + my $locale = $cust_main && $cust_main->locale || ''; + warn "no locale for cust#".$cust_main->custnum."; using default content\n" + if $DEBUG and $cust_main && !$locale; + my $content = $self->content($locale); + + warn "preparing template '".$self->msgname."\n" + if $DEBUG; + + $_ = encode_entities($_ || '') foreach values(%$hashref); + + ### + # clean up template + ### + my $subject_tmpl = new Text::Template ( + TYPE => 'STRING', + SOURCE => $content->subject, + ); + + warn "$me filling in subject template\n" if $DEBUG; + my $subject = $subject_tmpl->fill_in( HASH => $hashref ); + + my $body = $content->body; + my ($skin, $guts) = eviscerate($body); + @$guts = map { + $_ = decode_entities($_); # turn all punctuation back into itself + s/\r//gs; # remove \r's + s/<br[^>]*>/\n/gsi; # and <br /> tags + s/<p>/\n/gsi; # and <p> + s/<\/p>//gsi; # and </p> + s/\240/ /gs; # and + $_ + } @$guts; + + $body = '{ use Date::Format qw(time2str); "" }'; + while(@$skin || @$guts) { + $body .= shift(@$skin) || ''; + $body .= shift(@$guts) || ''; + } + + ### + # fill-in + ### + + my $body_tmpl = new Text::Template ( + TYPE => 'STRING', + SOURCE => $body, + ); + + warn "$me filling in body template\n" if $DEBUG; + $body = $body_tmpl->fill_in( HASH => $hashref ); + + # override $body if requested + if ( $opt{'override_content'} ) { + warn "$me overriding template body with requested content" if $DEBUG; + $body = $opt{'override_content'}; + } + + ### + # and email + ### + + my @to; + if ( exists($opt{'to'}) ) { + @to = split(/\s*,\s*/, $opt{'to'}); + } elsif ( $cust_main ) { + @to = $cust_main->invoicing_list_emailonly; + } else { + die 'no To: address or cust_main object specified'; + } + + my $from_addr = $self->from_addr; + + if ( !$from_addr ) { + + my $agentnum = $cust_main ? $cust_main->agentnum : ''; + + if ( $opt{'from_config'} ) { + $from_addr = $conf->config($opt{'from_config'}, $agentnum); + } + $from_addr ||= $conf->invoice_from_full($agentnum); + } + + my $text_body = encode('UTF-8', + HTML::FormatText->new(leftmargin => 0, rightmargin => 70) + ->format( HTML::TreeBuilder->new_from_content($body) ) + ); + + warn "$me constructing MIME entities\n" if $DEBUG; + my %email = generate_email( + 'from' => $from_addr, + 'to' => \@to, + 'bcc' => $self->bcc_addr || undef, + 'subject' => $subject, + 'html_body' => $body, + 'text_body' => $text_body, + ); + + warn "$me creating message headers\n" if $DEBUG; + my $env_from = $from_addr; + $env_from =~ s/^\s*//; $env_from =~ s/\s*$//; + if ( $env_from =~ /^(.*)\s*<(.*@.*)>$/ ) { + # a common idiom + $env_from = $2; + } + + my $domain; + if ( $env_from =~ /\@([\w\.\-]+)/ ) { + $domain = $1; + } else { + warn 'no domain found in invoice from address '. $env_from . + '; constructing Message-ID (and saying HELO) @example.com'; + $domain = 'example.com'; + } + my $message_id = join('.', rand()*(2**32), $$, time). "\@$domain"; + + my $time = time; + my $message = MIME::Entity->build( + 'From' => $from_addr, + 'To' => join(', ', @to), + 'Sender' => $from_addr, + 'Reply-To' => $from_addr, + 'Date' => time2str("%a, %d %b %Y %X %z", $time), + 'Subject' => Encode::encode('MIME-Header', $subject), + 'Message-ID' => "<$message_id>", + 'Encoding' => '7bit', + 'Type' => 'multipart/related', + ); + + #$message->head->replace('Content-type', + # 'multipart/related; '. + # 'boundary="' . $message->head->multipart_boundary . '"; ' . + # 'type=multipart/alternative' + #); + + # XXX a facility to attach additional parts is necessary at some point + foreach my $part (@{ $email{mimeparts} }) { + warn "$me appending part ".$part->mime_type."\n" if $DEBUG; + $message->add_part( $part ); + } + + # effective To: address (not in headers) + push @to, $self->bcc_addr if $self->bcc_addr; + my $env_to = join(', ', @to); + + my $cust_msg = FS::cust_msg->new({ + 'custnum' => $cust_main->custnum, + 'msgnum' => $self->msgnum, + '_date' => $time, + 'env_from' => $env_from, + 'env_to' => $env_to, + 'header' => $message->header_as_string, + 'body' => $message->body_as_string, + 'error' => '', + 'status' => 'prepared', + 'msgtype' => ($opt{'msgtype'} || ''), + 'preview' => $body, # html content only + }); + + return $cust_msg; +} + +=item render OPTION => VALUE ... + +Fills in the template and renders it to a PDF document. Returns the +name of the PDF file. + +Options are as for 'prepare', but 'from' and 'to' are meaningless. + +=cut + +# will also have options to set paper size, margins, etc. + +sub render { + my $self = shift; + eval "use PDF::WebKit"; + die $@ if $@; + my %opt = @_; + my %hash = $self->prepare(%opt); + my $html = $hash{'html_body'}; + + # Graphics/stylesheets should probably go in /var/www on the Freeside + # machine. + my $script_path = `/usr/bin/which freeside-wkhtmltopdf`; + chomp $script_path; + my $kit = PDF::WebKit->new(\$html); #%options + # hack to use our wrapper script + $kit->configure(sub { shift->wkhtmltopdf($script_path) }); + + $kit->to_pdf; +} + +=item print OPTIONS + +Render a PDF and send it to the printer. OPTIONS are as for 'render'. + +=cut + +sub print { + my( $self, %opt ) = @_; + do_print( [ $self->render(%opt) ], agentnum=>$opt{cust_main}->agentnum ); +} + +# helper sub for package dates +my $ymd = sub { $_[0] ? time2str('%Y-%m-%d', $_[0]) : '' }; + +# helper sub for money amounts +my $money = sub { ($conf->money_char || '$') . sprintf('%.2f', $_[0] || 0) }; + +# helper sub for usage-related messages +my $usage_warning = sub { + my $svc = shift; + foreach my $col (qw(seconds upbytes downbytes totalbytes)) { + my $amount = $svc->$col; next if $amount eq ''; + my $method = $col.'_threshold'; + my $threshold = $svc->$method; next if $threshold eq ''; + return [$col, $amount, $threshold] if $amount <= $threshold; + # this only returns the first one that's below threshold, if there are + # several. + } + return ['', '', '']; +}; + +=item content LOCALE + +Returns the L<FS::template_content> object appropriate to LOCALE, if there +is one. If not, returns the one with a NULL locale. + +=cut + +sub content { + my $self = shift; + my $locale = shift; + qsearchs('template_content', + { 'msgnum' => $self->msgnum, 'locale' => $locale }) || + qsearchs('template_content', + { 'msgnum' => $self->msgnum, 'locale' => '' }); +} + +=cut + +=item send_prepared CUST_MSG + +Takes the CUST_MSG object and sends it to its recipient. The "smtpmachine" +configuration option will be used to find the outgoing mail server. + +=cut + +sub send_prepared { + my $self = shift; + my $cust_msg = shift or die "cust_msg required"; + + my $domain = 'example.com'; + if ( $cust_msg->env_from =~ /\@([\w\.\-]+)/ ) { + $domain = $1; + } + + my @to = split(/\s*,\s*/, $cust_msg->env_to); + + my %smtp_opt = ( 'host' => $conf->config('smtpmachine'), + 'helo' => $domain ); + + my($port, $enc) = split('-', ($conf->config('smtp-encryption') || '25') ); + $smtp_opt{'port'} = $port; + + my $transport; + if ( defined($enc) && $enc eq 'starttls' ) { + $smtp_opt{$_} = $conf->config("smtp-$_") for qw(username password); + $transport = Email::Sender::Transport::SMTP::TLS->new( %smtp_opt ); + } else { + if ( $conf->exists('smtp-username') && $conf->exists('smtp-password') ) { + $smtp_opt{"sasl_$_"} = $conf->config("smtp-$_") for qw(username password); + } + $smtp_opt{'ssl'} = 1 if defined($enc) && $enc eq 'tls'; + $transport = Email::Sender::Transport::SMTP->new( %smtp_opt ); + } + + warn "$me sending message\n" if $DEBUG; + my $message = join("\n", $cust_msg->header, $cust_msg->body); + local $@; + eval { + sendmail( $message, { transport => $transport, + from => $cust_msg->env_from, + to => \@to }) + }; + my $error = ''; + if(ref($@) and $@->isa('Email::Sender::Failure')) { + $error = $@->code.' ' if $@->code; + $error .= $@->message; + } + else { + $error = $@; + } + + $cust_msg->set('error', $error); + $cust_msg->set('status', $error ? 'failed' : 'sent'); + if ( $cust_msg->custmsgnum ) { + $cust_msg->replace; + } else { + $cust_msg->insert; + } + + $error; +} + +=back + +=cut + +# internal use only + +sub eviscerate { + # Every bit as pleasant as it sounds. + # + # We do this because Text::Template::Preprocess doesn't + # actually work. It runs the entire template through + # the preprocessor, instead of the code segments. Which + # is a shame, because Text::Template already contains + # the code to do this operation. + my $body = shift; + my (@outside, @inside); + my $depth = 0; + my $chunk = ''; + while($body || $chunk) { + my ($first, $delim, $rest); + # put all leading non-delimiters into $first + ($first, $rest) = + ($body =~ /^((?:\\[{}]|[^{}])*)(.*)$/s); + $chunk .= $first; + # put a leading delimiter into $delim if there is one + ($delim, $rest) = + ($rest =~ /^([{}]?)(.*)$/s); + + if( $delim eq '{' ) { + $chunk .= '{'; + if( $depth == 0 ) { + push @outside, $chunk; + $chunk = ''; + } + $depth++; + } + elsif( $delim eq '}' ) { + $depth--; + if( $depth == 0 ) { + push @inside, $chunk; + $chunk = ''; + } + $chunk .= '}'; + } + else { + # no more delimiters + if( $depth == 0 ) { + push @outside, $chunk . $rest; + } # else ? something wrong + last; + } + $body = $rest; + } + (\@outside, \@inside); +} + +=head1 BUGS + +=head1 SEE ALSO + +L<FS::Record>, schema.html from the base documentation. + +=cut + +1; + diff --git a/FS/FS/msg_template/http.pm b/FS/FS/msg_template/http.pm new file mode 100644 index 000000000..9c4e68bd7 --- /dev/null +++ b/FS/FS/msg_template/http.pm @@ -0,0 +1,159 @@ +package FS::msg_template::http; +use base qw( FS::msg_template ); + +use strict; +use vars qw( $DEBUG $conf ); + +# needed to talk to the external service +use LWP::UserAgent; +use HTTP::Request::Common; +use JSON; + +# needed to manage prepared messages +use FS::cust_msg; + +our $DEBUG = 1; +our $me = '[FS::msg_template::http]'; + +sub extension_table { 'msg_template_http' } + +=head1 NAME + +FS::msg_template::http - Send messages via a web service. + +=head1 DESCRIPTION + +FS::msg_template::http is a message processor in which the message is exported +to a web service, at both the prepare and send stages. + +=head1 METHODS + +=cut + +sub check { + my $self = shift; + return + $self->ut_textn('prepare_url') + || $self->ut_textn('send_url') + || $self->ut_textn('username') + || $self->ut_textn('password') + || $self->ut_anything('content') + || $self->SUPER::check; +} + +sub prepare { + + my( $self, %opt ) = @_; + + my $json = JSON->new->canonical(1); + + my $cust_main = $opt{'cust_main'}; # or die 'cust_main required'; + my $object = $opt{'object'} or die 'object required'; + + my $hashref = $self->prepare_substitutions(%opt); + + my $document = $json->decode( $self->content || '{}' ); + $document = { + 'msgname' => $self->msgname, + 'msgtype' => $opt{'msgtype'}, + %$document, + %$hashref + }; + # put override content _somewhere_ so it can be used + if ( $opt{'override_content'} ) { + $document->{'content'} = $opt{'override_content'}; + } + + my $request_content = $json->encode($document); + warn "$me ".$self->prepare_url."\n" if $DEBUG; + warn "$request_content\n\n" if $DEBUG > 1; + my $ua = LWP::UserAgent->new; + my $request = POST( + $self->prepare_url, + 'Content-Type' => 'application/json', + 'Content' => $request_content, + ); + if ( $self->username ) { + $request->authorization_basic( $self->username, $self->password ); + } + my $response = $ua->request($request); + warn "$me received:\n" . $response->as_string . "\n\n" if $DEBUG; + + my $cust_msg = FS::cust_msg->new({ + 'custnum' => $cust_main->custnum, + 'msgnum' => $self->msgnum, + '_date' => time, + 'msgtype' => ($opt{'msgtype'} || ''), + }); + + if ( $response->is_success ) { + $cust_msg->set(body => $response->decoded_content); + $cust_msg->set(status => 'prepared'); + } else { + $cust_msg->set(status => 'failed'); + $cust_msg->set(error => $response->decoded_content); + } + + $cust_msg; +} + +=item send_prepared CUST_MSG + +Takes the CUST_MSG object and sends it to its recipient. + +=cut + +sub send_prepared { + my $self = shift; + my $cust_msg = shift or die "cust_msg required"; + # don't just fail if called as a class method + if (!ref $self) { + $self = $cust_msg->msg_template; + } + + # use cust_msg->header for anything? we _could_... + my $request_content = $cust_msg->body; + + warn "$me ".$self->send_url."\n" if $DEBUG; + warn "$request_content\n\n" if $DEBUG > 1; + my $ua = LWP::UserAgent->new; + my $request = POST( + $self->send_url, + 'Content-Type' => 'application/json', + 'Content' => $request_content, + ); + if ( $self->username ) { + $request->authorization_basic( $self->username, $self->password ); + } + my $response = $ua->request($request); + warn "$me received:\n" . $response->as_string . "\n\n" if $DEBUG; + + my $error; + if ( $response->is_success ) { + $cust_msg->set(status => 'sent'); + } else { + $error = $response->decoded_content; + $cust_msg->set(error => $error); + $cust_msg->set(status => 'failed'); + } + + if ( $cust_msg->custmsgnum ) { + $cust_msg->replace; + } else { + $cust_msg->insert; + } + + $error; +} + +=back + +=head1 BUGS + +=head1 SEE ALSO + +L<FS::Record>, schema.html from the base documentation. + +=cut + +1; diff --git a/FS/FS/o2m_Common.pm b/FS/FS/o2m_Common.pm index 4f6d2e781..430f00bbb 100644 --- a/FS/FS/o2m_Common.pm +++ b/FS/FS/o2m_Common.pm @@ -35,11 +35,19 @@ Available options: table (required) - Table into which the records are inserted. -num_col (optional) - Column in table which links to the primary key of the base table. If not specified, it is assumed this has the same name. - -params (required) - Hashref of keys and values, often passed as C<scalar($cgi->Vars)> from a form. - -fields (required) - Arrayref of field names for each record in table. Pulled from params as "pkeyNN_field" where pkey is table's primary key and NN is the entry's numeric identifier. +fields (required) - Arrayref of the field names in the "many" table. + +params (required) - Hashref of keys and values, often passed as +C<scalar($cgi->Vars)> from a form. This will be scanned for keys of the form +"pkeyNN" (where pkey is the primary key column name, and NN is an integer). +Each of these designates one record in the "many" table. The contents of +that record will be taken from other parameters with the names +"pkeyNN_myfield" (where myfield is one of the fields in the 'fields' +array). + +num_col (optional) - Name of the foreign key column in the "many" table, which +links to the primary key of the base table. If not specified, it is assumed +this has the same name as in the base table. =cut diff --git a/FS/FS/part_event.pm b/FS/FS/part_event.pm index d15f35b7d..9a1144c85 100644 --- a/FS/FS/part_event.pm +++ b/FS/FS/part_event.pm @@ -369,6 +369,7 @@ sub eventtable_labels { 'cust_pkg' => 'Package', 'cust_bill' => 'Invoice', 'cust_main' => 'Customer', + 'cust_pay' => 'Payment', 'cust_pay_batch' => 'Batch payment', 'cust_statement' => 'Statement', #too general a name here? "Invoice group"? 'svc_acct' => 'Login service', @@ -408,6 +409,7 @@ sub eventtable_pkey { 'cust_main' => 'custnum', 'cust_bill' => 'invnum', 'cust_pkg' => 'pkgnum', + 'cust_pay' => 'paynum', 'cust_pay_batch' => 'paybatchnum', 'cust_statement' => 'statementnum', 'svc_acct' => 'svcnum', diff --git a/FS/FS/part_event/Action/http.pm b/FS/FS/part_event/Action/http.pm new file mode 100644 index 000000000..b8715a714 --- /dev/null +++ b/FS/FS/part_event/Action/http.pm @@ -0,0 +1,85 @@ +package FS::part_event::Action::http; + +use strict; +use base qw( FS::part_event::Action ); +use LWP::UserAgent; +use HTTP::Request::Common; +use JSON::XS; +use FS::Misc::DateTime qw( iso8601 ); + +#sub description { 'Send an HTTP or HTTPS GET or POST request'; } +sub description { 'Send an HTTP or HTTPS POST request'; } + +sub eventtable_hashref { + { 'cust_bill' => 1, + 'cust_pay' => 1, + }, +} + +sub option_fields { + ( + 'method' => { label => 'Method', + type => 'select', + options => [qw( POST )], #GET )], + }, + 'url' => { label => 'URL', + type => 'text', + size => 120, + }, + 'ssl_no_verify' => { label => 'Skip SSL certificate validation', + type => 'checkbox', + }, + 'encoding' => { label => 'Encoding', + type => 'select', + options => [qw( JSON )], #XML, Form, etc. + }, + 'content' => { label => 'Content', #nneed better inline docs on format + type => 'textarea', + }, + #'response_error_param' => 'Response error parameter', + ); +} + +sub default_weight { 57; } + +our %content_type = ( + 'JSON' => 'application/json', +); + +sub do_action { + my( $self, $object ) = @_; + + my $cust_main = $self->cust_main($object); + + my %content = + map { + /^\s*(\S+)\s+(.*)$/ or /()()/; + my( $field, $value_expression ) = ( $1, $2 ); + my $value = eval $value_expression; + die $@ if $@; + ( $field, $value ); + } split(/\n/, $self->option('content') ); + + my $content = encode_json( \%content ); + + my @lwp_opts = (); + push @lwp_opts, 'ssl_opts'=>{ 'verify_hostname'=>0 } + if $self->option('ssl_no_verify'); + my $ua = LWP::UserAgent->new(@lwp_opts); + + my $req = HTTP::Request::Common::POST( + $self->option('url'), + Content_Type => $content_type{ $self->option('encoding') }, + Content => $content, + ); + + my $response = $ua->request($req); + + die $response->status_line if $response->is_error; + + my $response_json = decode_json( $response->content ); + die $response_json->{error} if $response_json->{error}; #XXX response_error_param + +} + +1; diff --git a/FS/FS/part_event/Condition.pm b/FS/FS/part_event/Condition.pm index 60697c196..36fbe9a0d 100644 --- a/FS/FS/part_event/Condition.pm +++ b/FS/FS/part_event/Condition.pm @@ -52,6 +52,7 @@ sub eventtable_hashref { { 'cust_main' => 1, 'cust_bill' => 1, 'cust_pkg' => 1, + 'cust_pay' => 1, 'cust_pay_batch' => 1, 'cust_statement' => 1, 'svc_acct' => 1, diff --git a/FS/FS/part_event_option.pm b/FS/FS/part_event_option.pm index 09b775609..6df9e84c1 100644 --- a/FS/FS/part_event_option.pm +++ b/FS/FS/part_event_option.pm @@ -183,7 +183,8 @@ sub check { $self->ut_numbern('optionnum') || $self->ut_foreign_key('eventpart', 'part_event', 'eventpart' ) || $self->ut_text('optionname') - || $self->ut_textn('optionvalue') + #|| $self->ut_textn('optionvalue') + || $self->ut_anything('optionvalue') #http.pm content has \n ; return $error if $error; diff --git a/FS/FS/part_pkg/discount_Mixin.pm b/FS/FS/part_pkg/discount_Mixin.pm index 31802758c..5de7d8ea5 100644 --- a/FS/FS/part_pkg/discount_Mixin.pm +++ b/FS/FS/part_pkg/discount_Mixin.pm @@ -28,11 +28,15 @@ sub calc_recur { =head METHODS -=item calc_discount +=item calc_discount CUST_PKG, SDATE, DETAILS_ARRAYREF, PARAM_HASHREF -Takes all the arguments of calc_recur. Calculates and returns the amount -by which to reduce the recurring fee; also increments months used on the -discount. +Takes all the arguments of calc_recur. Calculates and returns the amount +by which to reduce the charge; also increments months used on the discount. + +If there is a setup fee, this will be called once with 'setup_charge' => the +setup fee amount (and should return the discount to be applied to the setup +charge, if any), and again without it (for the recurring fee discount). +PARAM_HASHREF carries over between the two invocations. =cut @@ -40,9 +44,9 @@ sub calc_discount { my($self, $cust_pkg, $sdate, $details, $param ) = @_; my $conf = new FS::Conf; - my $br = $self->base_recur_permonth($cust_pkg, $sdate); - $br += $param->{'override_charges'} if $param->{'override_charges'}; - + my $br = $self->base_recur($cust_pkg, $sdate); + $br += $param->{'override_charges'} * ($cust_pkg->part_pkg->freq || 0) if $param->{'override_charges'}; + my $tot_discount = 0; #UI enforces just 1 for now, will need ordering when they can be stacked @@ -80,52 +84,125 @@ sub calc_discount { my $discount_left; my $discount = $cust_pkg_discount->discount; #UI enforces one or the other (for now? probably for good) + # $chg_months: the number of months we are charging recur for + # $months: $chg_months or the months left on the discount, whchever is less + + my $chg_months = $cust_pkg->part_pkg->freq || 1; + if ( defined($param->{'months'}) ) { # then override + $chg_months = $param->{'months'}; + } + + my $months = $chg_months; + if ( $discount->months ) { + $months = min( $chg_months, + $discount->months - $cust_pkg_discount->months_used ); + } + + # $amount is now the (estimated) discount amount on the recurring charge. + # if it's a percent discount, that's base recur * percentage. + my $amount = 0; - $amount += $discount->amount - if $cust_pkg->pkgpart == $param->{'real_pkgpart'}; - $amount += sprintf('%.2f', $discount->percent * $br / 100 ); - my $chg_months = defined($param->{'months'}) ? - $param->{'months'} : - $cust_pkg->part_pkg->freq; - - my $months = $discount->months - ? min( $chg_months, - $discount->months - $cust_pkg_discount->months_used ) - : $chg_months; if (defined $param->{'setup_charge'}) { + + # we are calculating the setup discount. + # if this discount doesn't apply to setup fees, skip it. + # if it's a percent discount, set $amount = percent * setup_charge. + # if it's a flat amount discount for one month: + # - if the discount amount > setup_charge, then set it to setup_charge, + # and set 'discount_left_recur' to the difference. + # - otherwise set it to just the discount amount. + # if it's a flat amount discount for other than one month: + # - skip the discount. unsure, leaving it alone for now. + next unless $discount->setup; + $months = 0; # never count a setup discount as a month of discount + # (the recur discount in the same month should do it) + if ( $discount->percent > 0 ) { - $amount = sprintf('%.2f', $discount->percent * $param->{'setup_charge'} / 100 ); - $months = 1; - } elsif ( $discount->amount > 0 && $discount->months == 1) { - $discount_left = $param->{'setup_charge'} - $discount->amount; - $amount = $param->{'setup_charge'} if $discount_left < 0; - $amount = $discount->amount if $discount_left >= 0; - $months = 1; - + $amount = $discount->percent * $param->{'setup_charge'} / 100; + } elsif ( $discount->amount > 0 && ($discount->months || 0) == 1) { + # apply the discount amount, up to a maximum of the setup charge + $amount = min($discount->amount, $param->{'setup_charge'}); + $discount_left = sprintf('%.2f', $discount->amount - $amount); # transfer remainder of discount, if any, to recur - $param->{'discount_left_recur'}{$discount->discountnum} = - 0 - $discount_left if $discount_left < 0; + $param->{'discount_left_recur'}{$discount->discountnum} = $discount_left; } else { + # I guess we don't allow multiple-month flat amount discounts to + # apply to setup? next; } - } elsif ( defined $param->{'discount_left_recur'}{$discount->discountnum} - && $param->{'discount_left_recur'}{$discount->discountnum} > 0 - ) { - # use up transferred remainder of discount from setup + + } else { + + # we are calculating a recurring fee discount. estimate the recurring + # fee: + # XXX it would be more accurate for calc_recur to just _tell us_ what + # it's going to charge + + my $recur_charge = $br * ($cust_pkg->quantity || 1) * $chg_months / $self->freq; + # round this, because the real recur charge is rounded + $recur_charge = sprintf('%.2f', $recur_charge); + + # if it's a percentage discount, calculate it based on that estimate. + # otherwise use the flat amount. + + if ( $discount->percent > 0 ) { + $amount = $recur_charge * $discount->percent / 100; + } elsif ( $discount->amount > 0 + and $cust_pkg->pkgpart == $param->{'real_pkgpart'} ) { + $amount = $discount->amount * $months; + } + + if ( exists $param->{'discount_left_recur'}{$discount->discountnum} ) { + # there is a discount_left_recur entry for this discountnum, so this + # is the second (recur) pass on the discount. use up transferred + # remainder of discount from setup. + # + # note that discount_left_recur can now be zero. $amount = $param->{'discount_left_recur'}{$discount->discountnum}; $param->{'discount_left_recur'}{$discount->discountnum} = 0; - $months = 1; - } elsif ( $discount->setup - && $discount->months == 1 - && $discount->amount > 0 - ) { - next; - } + $months = 1; # XXX really? not $chg_months? + } + #elsif ( $discount->setup + # && ($discount->months || 0) == 1 + # && $discount->amount > 0 + # ) { + # next; + # + # RT #11512: bugfix to prevent applying flat discount to both setup + # and recur. The original implementation ignored discount_left_recur + # if it was zero, so if the setup fee used up the entire flat + # discount, the recurring charge would get to use the entire flat + # discount also. This bugfix was a kludge. Instead, we now allow + # discount_left_recur to be zero in that case, and then the available + # recur discount is zero. + #} + + # transfer remainder of discount, if any, to setup + # this is used when the recur phase wants to add a setup fee + # (prorate_defer_bill): the "discount_left_setup" amount will + # be subtracted in _make_lines. + if ( $discount->setup && $discount->amount > 0 + && ($discount->months || 0) != 1 + ) + { + # $amount is no longer permonth at this point! correct. very good. + $discount_left = $amount - $recur_charge; # backward, as above + if ( $discount_left > 0 ) { + $amount = $recur_charge; + $param->{'discount_left_setup'}{$discount->discountnum} = + 0 - $discount_left; + } + } - if ( ! defined $param->{'setup_charge'} ) { + # cap the discount amount at the recur charge + $amount = min($amount, $recur_charge); + + # if this is the base pkgpart, schedule increment_months_used to run at + # the end of billing. (addon packages haven't been calculated yet, so + # don't let the discount expire during the billing process. RT#17045.) if ( $cust_pkg->pkgpart == $param->{'real_pkgpart'} ) { push @{ $param->{precommit_hooks} }, sub { my $error = $cust_pkg_discount->increment_months_used($months); @@ -133,63 +210,22 @@ sub calc_discount { }; } - $amount = min($amount, $br); - $amount *= $months; } $amount = sprintf('%.2f', $amount + 0.00000001 ); #so 1.005 rounds to 1.01 next unless $amount > 0; - # transfer remainder of discount, if any, to setup - if ( $discount->setup && $discount->amount > 0 - && (!$discount->months || $discount->months != 1) - && !defined $param->{'setup_charge'} - ) - { - $discount_left = $br - $amount; - if ( $discount_left < 0 ) { - $amount = $br; - $param->{'discount_left_setup'}{$discount->discountnum} = - 0 - $discount_left; - } - } - #record details in cust_bill_pkg_discount my $cust_bill_pkg_discount = new FS::cust_bill_pkg_discount { 'pkgdiscountnum' => $cust_pkg_discount->pkgdiscountnum, 'amount' => $amount, 'months' => $months, + # XXX should have a 'setuprecur' }; push @{ $param->{'discounts'} }, $cust_bill_pkg_discount; $tot_discount += $amount; - #add details on discount to invoice - # no longer! this is now done during rendering based on the existence - # of the cust_bill_pkg_discount record - # - #my $money_char = $conf->config('money_char') || '$'; - #$months = sprintf('%.2f', $months) if $months =~ /\./; - - #my $d = 'Includes '; - #my $format; - - #if ( $months eq '1' ) { - # $d .= "discount of $money_char$amount"; - # $d .= " each" if $cust_pkg->quantity > 1; - # $format = 'Undiscounted amount: %s%.2f'; - #} else { - # $d .= 'setup ' if defined $param->{'setup_charge'}; - # $d .= 'discount of '. $discount->description_short; - # $d .= " for $months months" - # unless defined $param->{'setup_charge'}; - # $d .= ": $money_char$amount" if $discount->percent; - # $format = 'Undiscounted monthly amount: %s%.2f'; - #} - - #push @$details, $d; - #push @$details, sprintf( $format, $money_char, $br ); - } sprintf('%.2f', $tot_discount); diff --git a/FS/FS/part_pkg/prorate_calendar.pm b/FS/FS/part_pkg/prorate_calendar.pm index 83a80f5d0..c50cae0d7 100644 --- a/FS/FS/part_pkg/prorate_calendar.pm +++ b/FS/FS/part_pkg/prorate_calendar.pm @@ -36,7 +36,7 @@ use base 'FS::part_pkg::flat'; }, 'fieldorder' => [ 'cutoff_day', 'prorate_defer_bill', 'prorate_round_day', 'prorate_verbose' ], 'freq' => 'm', - 'weight' => 20, + 'weight' => 23, ); my %freq_max_days = ( # the length of the shortest period of each cycle type diff --git a/FS/FS/part_pkg/sqlradacct_hour.pm b/FS/FS/part_pkg/sqlradacct_hour.pm index 79e64fbab..206bea0d0 100644 --- a/FS/FS/part_pkg/sqlradacct_hour.pm +++ b/FS/FS/part_pkg/sqlradacct_hour.pm @@ -105,7 +105,18 @@ sub calc_recur { 'AcctOutputOctets' ) / BU; - my $total = $input + $output - $self->option('recur_included_total'); + my $included_total = $self->option('recur_included_total') || 0; + my $addoncharge = 0; + foreach my $cust_pkg_usageprice ($cust_pkg->cust_pkg_usageprice) { + my $part_pkg_usageprice = $cust_pkg_usageprice->part_pkg_usageprice; + $included_total += $cust_pkg_usageprice->quantity * $part_pkg_usageprice->amount; + $addoncharge += $cust_pkg_usageprice->price; + } + my $raw_total = $input + $output; + push(@$details,sprintf( "%.3f %ss included, %.3f %ss used", $included_total, BA, $raw_total, BA )) + if $included_total; + + my $total = $input + $output - $included_total; $total = 0 if $total < 0; $input = $input - $self->option('recur_included_input'); $input = 0 if $input < 0; @@ -153,7 +164,7 @@ sub calc_recur { sprintf('%.1f', $hours). " hours: $hourscharge"; } - my $charges = $hourscharge + $inputcharge + $outputcharge + $totalcharge; + my $charges = $hourscharge + $inputcharge + $outputcharge + $totalcharge + $addoncharge; if ( $self->option('global_cap') && $charges > $self->option('global_cap') ) { $charges = $self->option('global_cap'); push @$details, "Usage charges capped at: $charges"; diff --git a/FS/FS/part_pkg_fcc_option.pm b/FS/FS/part_pkg_fcc_option.pm index 5c78e5f9e..3d821f502 100644 --- a/FS/FS/part_pkg_fcc_option.pm +++ b/FS/FS/part_pkg_fcc_option.pm @@ -148,7 +148,7 @@ tie our %spectrum_labels, 'Tie::IxHash', ( 95 => 'Wireless Communications Service (WCS) Band', 96 => 'Broadband Radio Service/Educational Broadband Service Band', 97 => 'Satellite (e.g. L-band, Big LEO, Little LEO)', - 98 => 'Unlicensed (including broadcast television “white spaces”) Bands', + 98 => 'Unlicensed (including broadcast television "white spaces") Bands', 99 => '600 MHz', 100 => 'H Block', 101 => 'Advanced Wireless Services (AWS) 3 Band', diff --git a/FS/FS/part_pkg_usageprice.pm b/FS/FS/part_pkg_usageprice.pm index 9c3b1be87..b33904e9e 100644 --- a/FS/FS/part_pkg_usageprice.pm +++ b/FS/FS/part_pkg_usageprice.pm @@ -111,13 +111,46 @@ sub check { || $self->ut_enum('action', [ 'increment', 'set' ]) || $self->ut_enum('target', [ 'svc_acct.totalbytes', 'svc_acct.seconds', 'svc_conferencing.participants', - 'svc_conferencing.confqualitynum' +# 'svc_conferencing.confqualitynum', + 'sqlradacct_hour.recur_included_total' ] ) || $self->ut_text('amount') ; return $error if $error; + #Check target against package + #UI doesn't currently prevent these from happing, + #so keep error messages informative + my $part_pkg = $self->part_pkg; + my $target = $self->target; + my $label = $self->target_info->{'label'}; + my ($needs_svcdb, $needs_plan); + if ( $target =~ /^svc_acct.(\w+)$/ ) { + $needs_svcdb = 'svc_acct'; + } elsif ( $target eq 'svc_conferencing.participants' ) { + $needs_svcdb = 'svc_conferencing'; + } elsif ( $target =~ /^sqlradacct_hour.(\w+)$/ ) { + $needs_plan = 'sqlradacct_hour'; + } + if ($needs_svcdb) { + my $has_svcdb = 0; + foreach my $pkg_svc ($part_pkg->pkg_svc) { + next unless $pkg_svc->quantity; + my $svcdb = $pkg_svc->part_svc->svcdb; + $has_svcdb = 1 + if $svcdb eq $needs_svcdb; + last if $has_svcdb; + } + return "Usage pricing add-on \'$label\' can only be used on packages with at least one $needs_svcdb service.\n" + unless $has_svcdb; + } + if ($needs_plan) { + return "Usage pricing add-on \'$label\' can only be used on packages with pricing plan \'" . + FS::part_pkg->plan_info->{$needs_plan}->{'shortname'} . "\'\n" + unless ref($part_pkg) eq 'FS::part_pkg::' . $needs_plan; + } + $self->SUPER::check; } @@ -147,10 +180,10 @@ sub targets { #'svc_acct.totalbytes' => { label => 'Megabytes', # multiplier => 1048576, # }, - 'svc_acct.totalbytes' => { label => 'Gigabytes', + 'svc_acct.totalbytes' => { label => 'Total Gigabytes', multiplier => 1073741824, }, - 'svc_acct.seconds' => { label => 'Hours', + 'svc_acct.seconds' => { label => 'Total Hours', multiplier => 3600, }, 'svc_conferencing.participants' => { label => 'Conference Participants', @@ -160,6 +193,11 @@ sub targets { # and then value comes from a select, not a text field # 'svc_conferencing.confqualitynum' => { label => 'Conference Quality', # }, + + # this bypasses usual apply methods, handled entirely in sqlradacct_hour + 'sqlradacct_hour.recur_included_total' => { label => 'Included Gigabytes', + multiplier => 1 }, #recur_included_total is stored in GB + ; \%targets; diff --git a/FS/FS/pay_batch.pm b/FS/FS/pay_batch.pm index df969a00f..d7dd7bbe4 100644 --- a/FS/FS/pay_batch.pm +++ b/FS/FS/pay_batch.pm @@ -10,10 +10,10 @@ use Time::Local; use Text::CSV_XS; use Date::Parse qw(str2time); use Business::CreditCard qw(cardtype); -use FS::Misc qw(send_email); # for error notification use FS::Record qw( dbh qsearch qsearchs ); use FS::Conf; use FS::cust_pay; +use FS::Log; =head1 NAME @@ -222,6 +222,8 @@ I<format> - an L<FS::pay_batch> module I<gateway> - an L<FS::payment_gateway> object for a batch gateway. This takes precedence over I<format>. +I<no_close> - do not try to close batches + Supported format keys (defined in the specified FS::pay_batch module) are: I<filetype> - required, can be CSV, fixed, variable, XML @@ -456,26 +458,28 @@ sub import_results { } # foreach (@all_values) # decide whether to close batches that had payments posted - foreach my $batchnum (keys %target_batches) { - my $pay_batch = FS::pay_batch->by_key($batchnum); - my $close = 1; - if ( defined($close_condition) ) { - # Allow the module to decide whether to close the batch. - # $close_condition can also die() to abort the whole import. - $close = eval { $close_condition->($pay_batch) }; - if ( $@ ) { - $dbh->rollback; - die $@; + if ( !$param->{no_close} ) { + foreach my $batchnum (keys %target_batches) { + my $pay_batch = FS::pay_batch->by_key($batchnum); + my $close = 1; + if ( defined($close_condition) ) { + # Allow the module to decide whether to close the batch. + # $close_condition can also die() to abort the whole import. + $close = eval { $close_condition->($pay_batch) }; + if ( $@ ) { + $dbh->rollback; + die $@; + } } - } - if ( $close ) { - my $error = $pay_batch->set_status('R'); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; + if ( $close ) { + my $error = $pay_batch->set_status('R'); + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } } - } - } + } # foreach $batchnum + } # if (!$param->{no_close}) $dbh->commit or die $dbh->errstr if $oldAutoCommit; ''; @@ -563,8 +567,8 @@ sub import_from_gateway { ); my @item_errors; - my $mail_on_error = $conf->config('batch-errors_to'); - if ( $mail_on_error ) { + my $errors_not_fatal = $conf->config('batch-errors_not_fatal'); + if ( $errors_not_fatal ) { # construct error trap $proc_opt{'on_parse_error'} = sub { my ($self, $line, $error) = @_; @@ -797,15 +801,10 @@ sub import_from_gateway { "Errors during batch import: ".scalar(@item_errors), @item_errors ); - if ( $mail_on_error ) { - my $subject = "Batch import errors"; #? - my $body = "Import from gateway ".$gateway->label."\n".$error_text; - send_email( - to => $mail_on_error, - from => $conf->invoice_from_full(), - subject => $subject, - body => $body, - ); + if ( $errors_not_fatal ) { + my $message = "Import from gateway ".$gateway->label." errors: ".$error_text; + my $log = FS::Log->new('FS::pay_batch::import_from_gateway'); + $log->error($message); } else { # Bail out. $dbh->rollback if $oldAutoCommit; diff --git a/FS/FS/pay_batch/RBC.pm b/FS/FS/pay_batch/RBC.pm index 53f810852..b0136786b 100644 --- a/FS/FS/pay_batch/RBC.pm +++ b/FS/FS/pay_batch/RBC.pm @@ -5,6 +5,7 @@ use vars qw(@ISA %import_info %export_info $name); use Date::Format 'time2str'; use FS::Conf; use Encode 'encode'; +use feature 'state'; my $conf; my ($client_num, $shortname, $longname, $trans_code, $testmode, $i, $declined, $totaloffset); @@ -30,9 +31,10 @@ $name = 'RBC'; 'filetype' => 'fixed', #this only really applies to Debit Detail, but we otherwise only need first char 'formatre' => - '^(.).{18}(.{4}).{3}(.).{11}(.{19}).{6}(.{30}).{17}(.{9})(.{18}).{6}(.{14}).{23}(.).{9}\r?$', + '^(.).{3}(.{10}).{5}(.{4}).{3}(.).{11}(.{19}).{6}(.{30}).{17}(.{9})(.{18}).{6}(.{14}).{23}(.).{9}\r?$', 'fields' => [ qw( recordtype + clientnum batchnum subtype paybatchnum @@ -43,15 +45,28 @@ $name = 'RBC'; status ) ], 'hook' => sub { - my $hash = shift; - $hash->{'paid'} = sprintf("%.2f", $hash->{'paid'} / 100 ); - $hash->{'_date'} = time; - $hash->{'payinfo'} =~ s/^(\S+).*/$1/; # these often have trailing spaces - $hash->{'payinfo'} = $hash->{'payinfo'} . '@' . $hash->{'bank'}; + # pull client_num from config and check it against what's in the batch + state $clientnum ||= do { + my $conf = FS::Conf->new; + my @config = $conf->config("batchconfig-RBC"); + $config[0]; + }; + + my $hash = shift; + $hash->{'paid'} = sprintf("%.2f", $hash->{'paid'} / 100 ); + $hash->{'_date'} = time; + $hash->{'payinfo'} =~ s/^(\S+).*/$1/; # these often have trailing spaces + $hash->{'payinfo'} = $hash->{'payinfo'} . '@' . $hash->{'bank'}; + + if ( $clientnum and $hash->{clientnum} ne $clientnum ) { + die "RBC client number in batch (".$hash->{clientnum}.") does not ". + "match configuration.\n"; + } + ''; }, 'approved' => sub { my $hash = shift; - $hash->{'status'} eq ' ' + ($hash->{'status'} eq ' ') || ($hash->{'status'} eq 'W'); }, 'declined' => sub { my $hash = shift; @@ -112,12 +127,6 @@ $name = 'RBC'; if $hash->{'status'} eq ' '; #false laziness with 'approved' above return 1; } - #skipping W for now (maybe it should be declined?) - if ($hash->{'status'} eq 'W') { - #file counts this as part of total, but we skip - $totaloffset += sprintf("%.2f", $hash->{'paid'} / 100 ); - return 1; - } return ($hash->{'recordtype'} eq '3') || #Account Trailer Record, concludes returned items ($hash->{'subtype'} ne '0'); #error messages, etc, too late to apply to previous entry diff --git a/FS/FS/payinfo_Mixin.pm b/FS/FS/payinfo_Mixin.pm index c66e3bc37..6b96bbe27 100644 --- a/FS/FS/payinfo_Mixin.pm +++ b/FS/FS/payinfo_Mixin.pm @@ -239,7 +239,11 @@ sub payby_payinfo_pretty { my $locale = shift; my $lh = FS::L10N->get_handle($locale); if ( $self->payby eq 'CARD' ) { - $lh->maketext('Card #') . $self->paymask; + if ($self->paymask =~ /tokenized/) { + $lh->maketext('Tokenized Card'); + } else { + $lh->maketext('Card #') . $self->paymask; + } } elsif ( $self->payby eq 'CHEK' ) { #false laziness w/view/cust_main/payment_history.html::translate_payinfo diff --git a/FS/FS/queue.pm b/FS/FS/queue.pm index 1b52ac4fc..67d124d02 100644 --- a/FS/FS/queue.pm +++ b/FS/FS/queue.pm @@ -97,6 +97,10 @@ Optional link to customer (see L<FS::cust_main>). Secure flag, 'Y' indicates that when using encryption, the job needs to be run on a machine with the private key. +=item usernum + +For access_user that created the job + =cut =back @@ -151,6 +155,8 @@ sub insert { $self->custnum( $args{'custnum'} ) if $args{'custnum'}; + $self->usernum($FS::CurrentUser::CurrentUser->usernum) unless $self->usernum; + my $error = $self->SUPER::insert; if ( $error ) { $dbh->rollback if $oldAutoCommit; @@ -235,6 +241,7 @@ sub check { || $self->ut_enum('status',['', qw( new locked failed done )]) || $self->ut_anything('statustext') || $self->ut_numbern('svcnum') + || $self->ut_foreign_keyn('usernum', 'access_user', 'usernum') ; return $error if $error; @@ -357,6 +364,21 @@ sub update_statustext { #''; } +# not needed in 4 +#=item access_user +# +#Returns FS::access_user object (if any) associated with this user. +# +#Returns nothing if not found. +# +#=cut +# +#sub access_user { +# my $self = shift; +# my $usernum = $self->usernum || return (); +# return qsearchs('access_user',{ 'usernum' => $usernum }) || (); +#} + =back =head1 SUBROUTINES diff --git a/FS/FS/rate.pm b/FS/FS/rate.pm index 8ee9a83be..d26d11697 100644 --- a/FS/FS/rate.pm +++ b/FS/FS/rate.pm @@ -469,8 +469,8 @@ sub process { warn "$rate replacing $old (". $param->{'ratenum'}. ")\n" if $DEBUG; my @param = ( 'job'=>$job ); - push @param, 'rate_detail'=>\@rate_detail - unless $param->{'preserve_rate_detail'}; + + $rate->default_detailnum($old->default_detailnum); $error = $rate->replace( $old, @param ); diff --git a/FS/FS/report_batch.pm b/FS/FS/report_batch.pm new file mode 100644 index 000000000..64412dfba --- /dev/null +++ b/FS/FS/report_batch.pm @@ -0,0 +1,321 @@ +package FS::report_batch; +use base qw( FS::Record ); + +use strict; +use FS::Record qw( qsearch qsearchs dbdef ); +use FS::msg_template; +use FS::cust_main; +use FS::Misc::DateTime qw(parse_datetime); +use FS::Mason qw(mason_interps); +use URI::Escape; +use HTML::Defang; + +our $DEBUG = 0; + +=head1 NAME + +FS::report_batch - Object methods for report_batch records + +=head1 SYNOPSIS + + use FS::report_batch; + + $record = new FS::report_batch \%hash; + $record = new FS::report_batch { 'column' => 'value' }; + + $error = $record->insert; + + $error = $new_record->replace($old_record); + + $error = $record->delete; + + $error = $record->check; + +=head1 DESCRIPTION + +An FS::report_batch object represents an order to send a batch of reports to +their respective customers or other contacts. FS::report_batch inherits from +FS::Record. The following fields are currently supported: + +=over 4 + +=item reportbatchnum + +primary key + +=item reportname + +The name of the report, which will be the same as the file name (minus any +directory names). There's an enumerated set of these; you can't use just any +report. + +=item send_date + +The date the report was sent. + +=item agentnum + +The agentnum to limit the report to, if any. + +=item sdate + +The start date of the report period. + +=item edate + +The end date of the report period. + +=item usernum + +The user who ordered the report. + +=back + +=head1 METHODS + +=over 4 + +=item new HASHREF + +Creates a new report batch. To add the record to the database, see L<"insert">. + +=cut + +sub table { 'report_batch'; } + +=item insert + +Adds this record to the database. If there is an error, returns the error, +otherwise returns false. + +=item delete + +Deletes this record from the database. + +=item replace OLD_RECORD + +Replaces the OLD_RECORD with this one in the database. If there is an error, +returns the error, otherwise returns false. + +=item check + +Checks all fields to make sure this is a valid record. If there is +an error, returns the error, otherwise returns false. Called by the insert +and replace methods. + +=cut + +sub check { + my $self = shift; + + my $error = + $self->ut_numbern('reportbatchnum') + || $self->ut_text('reportname') + || $self->ut_numbern('agentnum') + || $self->ut_numbern('sdate') + || $self->ut_numbern('edate') + || $self->ut_numbern('usernum') + ; + return $error if $error; + + $self->set('send_date', time); + + $self->SUPER::check; +} + +=back + +=head1 SUBROUTINES + +=over 4 + +=item process_send_report JOB, PARAMS + +Takes a hash of PARAMS, determines all contacts who need to receive a report, +and sends it to them. On completion, creates and stores a report_batch record. +JOB is a queue job to receive status messages. + +PARAMS can include: + +- reportname: the name of the report (listed in the C<%sendable_reports> hash). +Required. +- msgnum: the L<FS::msg_template> to use for this report. Currently the +content of the template is ignored, but the subject line and From/Bcc addresses +are still used. Required. +- agentnum: the agent to limit the report to. +- beginning, ending: the date range to run the report, as human-readable +dates (I<not> unix timestamps). + +=cut + +# trying to keep this data-driven, with parameters that tell how the report is +# to be handled rather than callbacks. +# - path: where under the document root the report is located +# - domain: which table to query for objects on which the report is run. +# Each record in that table produces one report. +# - cust_main: the method on that object that returns its linked customer (to +# which the report will be sent). If the table has a 'custnum' field, this +# can be omitted. +our %sendable_reports = ( + 'sales_commission_pkg' => { + 'name' => 'Sales commission per package', + 'path' => '/search/sales_commission_pkg.html', + 'domain' => 'sales', + 'cust_main' => 'sales_cust_main', + }, +); + +sub process_send_report { + my $job = shift; + my $param = shift; + + my $msgnum = $param->{'msgnum'}; + my $template = FS::msg_template->by_key($msgnum) + or die "msg_template $msgnum not found\n"; + + my $reportname = $param->{'reportname'}; + my $info = $sendable_reports{$reportname} + or die "don't know how to send report '$reportname'\n"; + + # the most important thing: which report is it? + my $path = $info->{'path'}; + + # find all targets for the report: + # - those matching the agentnum if there is one. + # - those that aren't disabled. + my $domain = $info->{domain}; + my $dbt = dbdef->table($domain); + my $hashref = {}; + if ( $param->{'agentnum'} and $dbt->column('agentnum') ) { + $hashref->{'agentnum'} = $param->{'agentnum'}; + } + if ( $dbt->column('disabled') ) { + $hashref->{'disabled'} = ''; + } + my @records = qsearch($domain, $hashref); + my $num_targets = scalar(@records); + return if $num_targets == 0; + my $sent = 0; + + my $outbuf; + my ($fs_interp) = mason_interps('standalone', 'outbuf' => \$outbuf); + # if generating the report fails, we want to capture the error and exit, + # not send it. + $fs_interp->error_mode('fatal'); + $fs_interp->error_format('brief'); + + # we have to at least have an RT::Handle + require RT; + RT::LoadConfig(); + RT::Init(); + + # hold onto all the reports until we're sure they generated correctly. + my %cust_main; + my %report_content; + + # grab the stylesheet + ### note: if we need the ability to support different stylesheets, this + ### is the place to put it in + eval { $fs_interp->exec('/elements/freeside.css') }; + die "couldn't load stylesheet via Mason: $@\n" if $@; + my $stylesheet = $outbuf; + + my $pkey = $dbt->primary_key; + foreach my $rec (@records) { + + $job->update_statustext(int( 100 * $sent / $num_targets )); + my $pkey_val = $rec->get($pkey); # e.g. sales.salesnum + + # find the customer we're sending to, and their email + my $cust_main; + if ( $info->{'cust_main'} ) { + my $cust_method = $info->{'cust_main'}; + $cust_main = $rec->$cust_method; + } elsif ( $rec->custnum ) { + $cust_main = FS::cust_main->by_key($rec->custnum); + } else { + warn "$pkey = $pkey_val has no custnum; not sending report\n"; + next; + } + my @email = $cust_main->invoicing_list_emailonly; + if (!@email) { + warn "$pkey = $pkey_val has no email destinations\n" if $DEBUG; + next; + } + + # params to send to the report (as if from the user's browser) + my @report_param = ( # maybe list these in $info + agentnum => $param->{'agentnum'}, + beginning => $param->{'beginning'}, + ending => $param->{'ending'}, + $pkey => $pkey_val, + _type => 'html-print', + ); + + # build a query string + my $query_string = ''; + while (@report_param) { + $query_string .= uri_escape(shift @report_param) + . '=' + . uri_escape(shift @report_param); + $query_string .= ';' if @report_param; + } + warn "$path?$query_string\n\n" if $DEBUG; + + # run the report! + $FS::Mason::Request::QUERY_STRING = $query_string; + $FS::Mason::Request::FSURL = ''; + $outbuf = ''; + eval { $fs_interp->exec($path) }; + die "creating report for $pkey = $pkey_val: $@" if $@; + + # make some adjustments to the report + my $html_defang; + $html_defang = HTML::Defang->new( + url_callback => sub { 1 }, # strip all URLs (they're not accessible) + tags_to_callback => [ 'body' ], # and after the BODY tag... + tags_callback => sub { + my $isEndTag = $_[4]; + $html_defang->add_to_output("\n<style>\n$stylesheet\n</style>\n") + unless $isEndTag; + }, + ); + $outbuf = $html_defang->defang($outbuf); + + $cust_main{ $cust_main->custnum } = $cust_main; + $report_content{ $cust_main->custnum } = $outbuf; + } # foreach $rec + + $job->update_statustext('Sending reports...'); + foreach my $custnum (keys %cust_main) { + # create an email message with the report as body + # change this when backporting to 3.x + $template->send( + cust_main => $cust_main{$custnum}, + object => $cust_main{$custnum}, + msgtype => 'report', + override_content => $report_content{$custnum}, + ); + } + + my $self = FS::report_batch->new({ + reportname => $param->{'reportname'}, + agentnum => $param->{'agentnum'}, + sdate => parse_datetime($param->{'beginning'}), + edate => parse_datetime($param->{'ending'}), + usernum => $job->usernum, + msgnum => $param->{'msgnum'}, + }); + my $error = $self->insert; + warn "error recording completion of report: $error\n" if $error; + +} + +=head1 SEE ALSO + +L<FS::Record> + +=cut + +1; + diff --git a/FS/FS/svc_Tower_Mixin.pm b/FS/FS/svc_Tower_Mixin.pm index 2555b9e50..d6776791c 100644 --- a/FS/FS/svc_Tower_Mixin.pm +++ b/FS/FS/svc_Tower_Mixin.pm @@ -27,7 +27,13 @@ sub tower_sector_sql { my $in = join(',', map { /^(\d+)$/ ? $1 : () } @$value); my @orwhere; push @orwhere, "tower_sector.$field IN ($in)" if $in; - push @orwhere, "tower_sector.$field IS NULL" if grep /^none$/, @$value; + if ( grep /^none$/, @$value ) { + # then allow this field to be null + push @orwhere, "tower_sector.$field IS NULL"; + # and if this field is the sector, also allow the default sector + # on the tower + push @orwhere, "sectorname = '_default'" if $field eq 'sectornum'; + } push @where, '( '.join(' OR ', @orwhere).' )'; } elsif ( $value =~ /^(\d+)$/ ) { diff --git a/FS/FS/svc_acct.pm b/FS/FS/svc_acct.pm index 0181b1e0e..f3070338b 100644 --- a/FS/FS/svc_acct.pm +++ b/FS/FS/svc_acct.pm @@ -17,8 +17,7 @@ use vars qw( $DEBUG $me $conf $skip_fuzzyfiles $username_slash $username_equals $username_pound $username_exclamation $password_noampersand $password_noexclamation - $warning_template $warning_from $warning_subject $warning_mimetype - $warning_cc + $warning_msgnum $smtpmachine $radius_password $radius_ip $dirhash @@ -90,22 +89,7 @@ FS::UID->install_callback( sub { $password_noampersand = $conf->exists('password-noexclamation'); $password_noexclamation = $conf->exists('password-noexclamation'); $dirhash = $conf->config('dirhash') || 0; - if ( $conf->exists('warning_email') ) { - $warning_template = new Text::Template ( - TYPE => 'ARRAY', - SOURCE => [ map "$_\n", $conf->config('warning_email') ] - ) or warn "can't create warning email template: $Text::Template::ERROR"; - $warning_from = $conf->config('warning_email-from'); # || 'your-isp-is-dum' - $warning_subject = $conf->config('warning_email-subject') || 'Warning'; - $warning_mimetype = $conf->config('warning_email-mimetype') || 'text/plain'; - $warning_cc = $conf->config('warning_email-cc'); - } else { - $warning_template = ''; - $warning_from = ''; - $warning_subject = ''; - $warning_mimetype = ''; - $warning_cc = ''; - } + $warning_msgnum = $conf->config('threshold_warning_msgnum'); $smtpmachine = $conf->config('smtpmachine'); $radius_password = $conf->config('radius-password') || 'Password'; $radius_ip = $conf->config('radius-ip') || 'Framed-IP-Address'; @@ -737,83 +721,8 @@ sub insert { my $msg_template = qsearchs('msg_template', { msgnum => $msgnum }); $error = $msg_template->send('cust_main' => $cust_main, 'object' => $self); + #should this do something on error? } - else { #!$msgnum - my ($to,$welcome_template,$welcome_from,$welcome_subject,$welcome_subject_template,$welcome_mimetype) - = ('','','','','',''); - - if ( $conf->exists('welcome_email', $agentnum) ) { - $welcome_template = new Text::Template ( - TYPE => 'ARRAY', - SOURCE => [ map "$_\n", $conf->config('welcome_email', $agentnum) ] - ) or warn "can't create welcome email template: $Text::Template::ERROR"; - $welcome_from = $conf->config('welcome_email-from', $agentnum); - # || 'your-isp-is-dum' - $welcome_subject = $conf->config('welcome_email-subject', $agentnum) - || 'Welcome'; - $welcome_subject_template = new Text::Template ( - TYPE => 'STRING', - SOURCE => $welcome_subject, - ) or warn "can't create welcome email subject template: $Text::Template::ERROR"; - $welcome_mimetype = $conf->config('welcome_email-mimetype', $agentnum) - || 'text/plain'; - } - if ( $welcome_template ) { - my $to = join(', ', grep { $_ !~ /^(POST|FAX)$/ } $cust_main->invoicing_list ); - if ( $to ) { - - my %hash = ( - 'custnum' => $self->custnum, - 'username' => $self->username, - 'password' => $self->_password, - 'first' => $cust_main->first, - 'last' => $cust_main->getfield('last'), - 'pkg' => $cust_pkg->part_pkg->pkg, - ); - my $wqueue = new FS::queue { - 'svcnum' => $self->svcnum, - 'job' => 'FS::svc_acct::send_email' - }; - my $error = $wqueue->insert( - 'to' => $to, - 'from' => $welcome_from, - 'subject' => $welcome_subject_template->fill_in( HASH => \%hash, ), - 'mimetype' => $welcome_mimetype, - 'body' => $welcome_template->fill_in( HASH => \%hash, ), - ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error queuing welcome email: $error"; - } - - if ( $options{'depend_jobnum'} ) { - warn "$me depend_jobnum found; adding to welcome email dependancies" - if $DEBUG; - if ( ref($options{'depend_jobnum'}) ) { - warn "$me adding jobs ". join(', ', @{$options{'depend_jobnum'}} ). - "to welcome email dependancies" - if $DEBUG; - push @jobnums, @{ $options{'depend_jobnum'} }; - } else { - warn "$me adding job $options{'depend_jobnum'} ". - "to welcome email dependancies" - if $DEBUG; - push @jobnums, $options{'depend_jobnum'}; - } - } - - foreach my $jobnum ( @jobnums ) { - my $error = $wqueue->depend_insert($jobnum); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error queuing welcome email job dependancy: $error"; - } - } - - } - - } # if $welcome_template - } # if !$msgnum } } # if $cust_pkg @@ -2119,23 +2028,17 @@ sub _op_usage { } } - if ($warning_template && &{$op2warncondition{$op}}($self, $column, $amount)) { + if ($warning_msgnum && &{$op2warncondition{$op}}($self, $column, $amount)) { my $wqueue = new FS::queue { 'svcnum' => $self->svcnum, 'job' => 'FS::svc_acct::reached_threshold', }; - my $to = ''; - if ($op eq '-'){ - $to = $warning_cc if &{$op2condition{$op}}($self, $column, $amount); - } - # x_threshold race my $error = $wqueue->insert( 'svcnum' => $self->svcnum, 'op' => $op, - 'column' => $column, - 'to' => $to, + 'column' => $column ); if ( $error ) { $dbh->rollback if $oldAutoCommit; @@ -2834,32 +2737,6 @@ sub _search_svc { =over 4 -=item send_email - -This is the FS::svc_acct job-queue-able version. It still uses -FS::Misc::send_email under-the-hood. - -=cut - -sub send_email { - my %opt = @_; - - eval "use FS::Misc qw(send_email)"; - die $@ if $@; - - $opt{mimetype} ||= 'text/plain'; - $opt{mimetype} .= '; charset="iso-8859-1"' unless $opt{mimetype} =~ /charset/; - - my $error = send_email( - 'from' => $opt{from}, - 'to' => $opt{to}, - 'subject' => $opt{subject}, - 'content-type' => $opt{mimetype}, - 'body' => [ map "$_\n", split("\n", $opt{body}) ], - ); - die $error if $error; -} - =item check_and_rebuild_fuzzyfiles =cut @@ -2973,46 +2850,33 @@ sub reached_threshold { my $error = $svc_acct->replace; die $error if $error; # email next time, i guess - if ( $warning_template ) { - eval "use FS::Misc qw(send_email)"; - die $@ if $@; + if ( $warning_msgnum ) { - my $cust_pkg = $svc_acct->cust_svc->cust_pkg; - my $cust_main = $cust_pkg->cust_main; + my $msg_template = qsearchs('msg_template',{ msgnum => $warning_msgnum }); + die "Could not load template for threshold_warning_msgnum ($warning_msgnum)" unless $msg_template; - my $to = join(', ', grep { $_ !~ /^(POST|FAX)$/ } - $cust_main->invoicing_list, - ($opt{'to'} ? $opt{'to'} : ()) - ); - - my $mimetype = $warning_mimetype; - $mimetype .= '; charset="iso-8859-1"' unless $opt{mimetype} =~ /charset/; - - my $body = $warning_template->fill_in( HASH => { - 'custnum' => $cust_main->custnum, - 'username' => $svc_acct->username, - 'password' => $svc_acct->_password, - 'first' => $cust_main->first, - 'last' => $cust_main->getfield('last'), - 'pkg' => $cust_pkg->part_pkg->pkg, - 'column' => $opt{'column'}, - 'amount' => $opt{'column'} =~/bytes/ - ? FS::UI::bytecount::display_bytecount($svc_acct->getfield($opt{'column'})) - : $svc_acct->getfield($opt{'column'}), - 'threshold' => $opt{'column'} =~/bytes/ - ? FS::UI::bytecount::display_bytecount($threshold) - : $threshold, - } ); - - - my $error = send_email( - 'from' => $warning_from, - 'to' => $to, - 'subject' => $warning_subject, - 'content-type' => $mimetype, - 'body' => [ map "$_\n", split("\n", $body) ], + my $cust_main = $svc_acct->cust_svc->cust_pkg->cust_main; + + my $to = join(', ', $cust_main->invoicing_list_emailonly ); + + my $error = $msg_template->send( + cust_main => $cust_main, + object => $svc_acct, + to => $to, + substitutions => { + # have to override these, because we changed threshold above + 'column' => $opt{'column'}, + 'amount' => $opt{'column'} =~/bytes/ + ? FS::UI::bytecount::display_bytecount($svc_acct->getfield($opt{'column'})) + : $svc_acct->getfield($opt{'column'}), + 'threshold' => $opt{'column'} =~/bytes/ + ? FS::UI::bytecount::display_bytecount($threshold) + : $threshold, + }, ); - die $error if $error; + + die "Error sending threshold warning email: $error" if $error; + } }else{ die "unknown op: " . $opt{'op'}; diff --git a/FS/FS/tax_rate.pm b/FS/FS/tax_rate.pm index 1094968c6..c6fe243d4 100644 --- a/FS/FS/tax_rate.pm +++ b/FS/FS/tax_rate.pm @@ -2328,7 +2328,7 @@ EOF my $dropstring = '%%%FREESIDE_CACHE%%%/cache.'. $FS::UID::datasrc. '/report.'; $reportname =~ s/^$dropstring//; - my $reporturl = "%%%ROOTURL%%%/misc/queued_report?report=$reportname"; + my $reporturl = "%%%ROOTURL%%%/misc/queued_report.html?report=$reportname"; die "<a href=$reporturl>view</a>\n"; } diff --git a/FS/FS/template_image.pm b/FS/FS/template_image.pm new file mode 100644 index 000000000..e7f4baba5 --- /dev/null +++ b/FS/FS/template_image.pm @@ -0,0 +1,222 @@ +package FS::template_image; +use base qw( FS::Agent_Mixin FS::Record ); + +use strict; +use FS::Record qw( qsearchs ); +use File::Slurp qw( slurp ); +use MIME::Base64 qw( encode_base64 ); + +my %ext_to_type = ( + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'png' => 'image/png', + 'gif' => 'image/gif', +); + +=head1 NAME + +FS::template_image - Object methods for template_image records + +=head1 SYNOPSIS + + use FS::template_image; + + $record = new FS::template_image { + 'name' => 'logo', + 'agentnum' => $agentnum, + 'base64' => encode_base64($rawdata), + 'mime_type' => 'image/jpg', + }; + + $error = $record->insert; + + $error = $new_record->replace($old_record); + + $error = $record->delete; + + $error = $record->check; + +=head1 DESCRIPTION + +An FS::template_image object represents an uploaded image for insertion into templates. +FS::template_image inherits from FS::Record. The following fields are currently supported: + +=over 4 + +=item imgnum - primary key + +=item name - unique name, for selecting/editing images + +=item agentnum - image agent + +=item mime-type - image mime-type + +=item base64 - base64-encoded raw contents of image file + +=back + +=head1 METHODS + +=over 4 + +=item new HASHREF + +Creates a new object. To add the object to the database, see L<"insert">. + +Note that this stores the hash reference, not a distinct copy of the hash it +points to. You can ask the object for a copy with the I<hash> method. + +=cut + +# the new method can be inherited from FS::Record, if a table method is defined + +sub table { 'template_image'; } + +=item insert + +Adds this record to the database. If there is an error, returns the error, +otherwise returns false. + +=cut + +# the insert method can be inherited from FS::Record + +=item delete + +Delete this record from the database. + +=cut + +# the delete method can be inherited from FS::Record + +=item replace OLD_RECORD + +Replaces the OLD_RECORD with this one in the database. If there is an error, +returns the error, otherwise returns false. + +=cut + +# the replace method can be inherited from FS::Record + +=item check + +Checks all fields to make sure this is a valid example. If there is +an error, returns the error, otherwise returns false. Called by the insert +and replace methods. + +=cut + +# the check method should currently be supplied - FS::Record contains some +# data checking routines + +sub check { + my $self = shift; + + my $error = + $self->ut_numbern('imgnum','agentnum') + || $self->ut_text('name','mime-type') + || $self->ut_anything('base64') + ; + return $error if $error; + + $self->SUPER::check; +} + +=item src + +Returns a data url for this image, incorporating mime_type & base64 + +=cut + +sub src { + my $self = shift; + 'data:' + . $self->mime_type + . ';base64,' + . $self->base64; +} + +=item html + +Returns html for a basic img tag for this image (no attributes) + +=cut + +sub html { + my $self = shift; + '<IMG SRC="' + . $self->src + . '">'; +} + +=item process_image_delete + +Process for deleting an image. Run as a job using L<FS::queue>. + +=cut + +sub process_image_delete { + my $job = shift; + my $param = shift; + my $template_image = qsearchs('template_image',{ 'imgnum' => $param->{'imgnum'} }) + or die "Could not load template_image"; + my $error = $template_image->delete; + die $error if $error; + ''; +} + +=item process_image_upload + +Process for uploading an image. Run as a job using L<FS::queue>. + +=cut + +sub process_image_upload { + my $job = shift; + my $param = shift; + + my $files = $param->{'uploaded_files'} + or die "No files provided.\n"; + + my (%files) = map { /^(\w+):([\.\w]+)$/ ? ($1,$2):() } split /,/, $files; + + my $dir = '%%%FREESIDE_CACHE%%%/cache.'. $FS::UID::datasrc. '/'; + my $file = $dir. $files{'file'}; + + my $type; + if ( $file =~ /\.(\w+)$/i ) { + my $ext = lc($1); + die "Unrecognized file extension $ext" + unless $ext_to_type{$ext}; + $type = $ext_to_type{$ext}; + } else { + die "Cannot upload image file without extension" + } + + my $template_image = new FS::template_image { + 'name' => $param->{'name'}, + 'mime_type' => $type, + 'agentnum' => $param->{'agentnum'}, + 'base64' => encode_base64( slurp($file, binmode => ':raw'), '' ), + }; + my $error = $template_image->insert(); + die $error if $error; + unlink $file; + ''; + +} + +=back + +=head1 BUGS + +Will be described here once found. + +=head1 SEE ALSO + +L<FS::Record> + +=cut + +1; + diff --git a/FS/MANIFEST b/FS/MANIFEST index 5b73b728c..5041ccd68 100644 --- a/FS/MANIFEST +++ b/FS/MANIFEST @@ -850,3 +850,11 @@ FS/part_svc_link.pm t/part_svc_link.t FS/access_user_log.pm t/access_user_log.t +FS/report_batch.pm +t/report_batch.t +FS/report_batch.pm +t/report_batch.t +FS/report_batch.pm +t/report_batch.t +FS/report_batch.pm +t/report_batch.t diff --git a/bin/cdr-a2billing.import b/FS/bin/freeside-cdr-a2billing-import index 6677fa0a0..a8469e744 100755 --- a/bin/cdr-a2billing.import +++ b/FS/bin/freeside-cdr-a2billing-import @@ -90,15 +90,18 @@ my %disposition = ( 9 => 'INVALIDARGS', ); -my @cols = ( qw( - id sessionid - starttime stoptime sessiontime real_sessiontime - terminatecauseid - calledstation src - id_tariffplan id_ratecard sessionbill -) ); +my @cols = ( + "$table.id as id", 'cc_card.username as username', + qw( sessionid + starttime stoptime sessiontime real_sessiontime + terminatecauseid + calledstation src + id_tariffplan id_ratecard sessionbill + ) +); my $sql = 'SELECT '.join(',', @cols). " FROM $table". + " LEFT JOIN cc_card ON ( $table.card_id = cc_card.id ) ". ' WHERE freesidestatus IS NULL' . ($start && " AND starttime >= '$start'") . ($end && " AND starttime < '$end'") ; @@ -128,6 +131,7 @@ while ( $row = $sth->fetchrow_hashref ) { billsec => $row->{real_sessiontime}, dst => $row->{calledstation}, src => $row->{src}, + charged_party => $row->{username}, upstream_rateplanid => $row->{id_tariffplan}, upstream_rateid => $row->{id_ratecard}, # I think? upstream_price => $row->{sessionbill}, @@ -153,7 +157,7 @@ $mysql->disconnect; sub usage { "Usage: - cdr-a2billing.import + freeside-cdr-a2billing-import [ -H host ] -D database -U user @@ -162,3 +166,44 @@ sub usage { freesideuser "; } + +=head1 NAME + +freeside-cdr-a2billing-import - Download CDRs from an A2Billing MySQL database + +=head1 SYNOPSIS + + freeside-cdr-a2billing-import [ -H host ] -D database -U user -P password + [ -T tablename ] + [ -s start ] [ -e end ] [ -c cdrtypenum ] + freesideuser + +-H: database hostname + +-D: database name + +-U: database username + +-P: database password + +-T: table to import, defaults to cc_call + +-s: start date, e.g. 4/20/2015 + +-e: end date, e.g. 12/25/2015 + +-c: cdrtypenum to set, defaults to none + +freesideuser: freeside username + +=head1 DESCRIPTION + +=head1 BUGS + +=head1 SEE ALSO + +L<FS::cdr> + +=cut + +1; diff --git a/FS/bin/freeside-daily b/FS/bin/freeside-daily index cb018d1df..6a2daf934 100755 --- a/FS/bin/freeside-daily +++ b/FS/bin/freeside-daily @@ -79,10 +79,6 @@ pay_batch_receive(%opt); use FS::Cron::export_batch qw(export_batch_submit); export_batch_submit(%opt); -#you can skip this by not having the config -use FS::Cron::agent_email qw(agent_email); -agent_email(%opt); - #clears out cacti imports & deletes select database cache files use FS::Cron::cleanup qw( cleanup cleanup_before_backup ); cleanup_before_backup(); diff --git a/FS/bin/freeside-fetch b/FS/bin/freeside-fetch deleted file mode 100755 index c1ab78373..000000000 --- a/FS/bin/freeside-fetch +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use LWP::UserAgent; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearchs); -use FS::Misc qw(send_email); - -my $user = shift or die &usage; -my $employeelist = shift or die &usage; -my $url = shift or die &usage; -adminsuidsetup $user; - -my @employees = split ',', $employeelist; - -foreach my $employee (@employees) { - - $employee =~ /^(\w+)$/; - - my $access_user = qsearchs( 'access_user', { 'username' => $1 } ); - unless ($access_user) { - warn "Can't find employee $employee... skipping"; - next; - } - - my $email_address = $access_user->option('email_address'); - unless ($email_address) { - warn "No email address for $employee... skipping"; - next; - } - - no warnings 'redefine'; - local *LWP::UserAgent::get_basic_credentials = sub { - return ($access_user->username, $access_user->_password); - }; - - my $ua = new LWP::UserAgent; - $ua->timeout(1800); #30m, some reports can take a while - $ua->agent("FreesideFetcher/0.1 " . $ua->agent); - - my $req = new HTTP::Request GET => $url; - my $res = $ua->request($req); - - my $conf = new FS::Conf; - my $subject = $conf->config('email_report-subject') || 'Freeside report'; - - my %options = ( 'from' => $email_address, - 'to' => $email_address, - 'subject' => $subject, - 'body' => $res->content, - ); - - $options{'content-type'} = $res->content_type - if $res->content_type; - $options{'content-encoding'} = $res->content_encoding - if $res->content_encoding; - - if ($res->is_success) { - send_email %options; - }else{ - warn "fetching $url failed for $employee: " . $res->status_line; - } -} - -sub usage { - die "Usage:\n\n freeside-fetch user employee[,employee ...] url\n\n"; -} - -=head1 NAME - -freeside-fetch - Send a freeside page to a list of employees. - -=head1 SYNOPSIS - - freeside-fetch user employee[,employee ...] url - -=head1 DESCRIPTION - - Fetches a web page specified by url as if employee and emails it to - employee. Useful when run out of cron to send freeside web pages. - - user: Freeside user - - employee: the username of an employee to receive the emailed page. May be a comma separated list - - url: the web page to be received - -=head1 BUGS - - Can leak employee usernames and passwords if requested to access inappropriate urls. - -=cut - diff --git a/FS/bin/freeside-queued b/FS/bin/freeside-queued index 7c4cf1b64..36871b295 100644 --- a/FS/bin/freeside-queued +++ b/FS/bin/freeside-queued @@ -219,7 +219,11 @@ while (1) { $log->info('starting job ('.$ljob->job.')'); warn 'running "&'. $ljob->job. '('. join(', ', @args). ")\n" if $DEBUG; local $FS::UID::AutoCommit = 0; # so that we can clean up failures - eval $eval; #throw away return value? suppose so + do { + # switch user only if a job user is available + local $FS::CurrentUser::CurrentUser = $ljob->access_user || $FS::CurrentUser::CurrentUser; + eval $eval; #throw away return value? suppose so + }; if ( $@ ) { dbh->rollback; my %hash = $ljob->hash; diff --git a/FS/bin/freeside-rbc-download b/FS/bin/freeside-rbc-download index 376b839e1..3f692fa0f 100755 --- a/FS/bin/freeside-rbc-download +++ b/FS/bin/freeside-rbc-download @@ -10,13 +10,13 @@ use FS::Record qw(qsearch qsearchs); use FS::pay_batch; use FS::Conf; -use vars qw( $opt_v $opt_a $opt_f ); -getopts('va:f:'); +use vars qw( $opt_v $opt_a $opt_f $opt_n ); +getopts('va:f:n'); #$Net::SFTP::Foreign::debug = -1; sub usage { " Usage: - freeside-rbc-download [ -v ] [ -a archivedir ] [ -f filename ] user\n + freeside-rbc-download [ -v ] [ -n ] [ -a archivedir ] [ -f filename ] user\n " } sub debug { @@ -102,6 +102,7 @@ for my $dir ( $ftp->nlst ) { my $error = FS::pay_batch->import_results( filehandle => $fh, format => 'RBC', + no_close => ($opt_n ? 1 : 0), ); if ( $error ) { @@ -146,6 +147,8 @@ matching the pattern. This can be used to reprocess a specific file. -a directory: Archive the files in the specified directory. +-n: Do not try to close batches after applying results. + user: freeside username =head1 BUGS diff --git a/FS/bin/freeside-reexport b/FS/bin/freeside-reexport index 54af9dd80..6b689178d 100644 --- a/FS/bin/freeside-reexport +++ b/FS/bin/freeside-reexport @@ -1,7 +1,7 @@ #!/usr/bin/perl -w use strict; -use vars qw($opt_s $opt_u $opt_p); +use vars qw($opt_s $opt_u $opt_p $opt_e); use Getopt::Std; use FS::UID qw(adminsuidsetup); use FS::Record qw(qsearch qsearchs); @@ -22,7 +22,7 @@ if ( $export_x =~ /^(\d+)$/ ) { or die "no exports of type $export_x found\n"; } -getopts('s:u:p:'); +getopts('s:u:p:e:'); my @svc_x = (); if ( $opt_s ) { @@ -38,16 +38,20 @@ if ( $opt_s ) { die "no services with svcpart $opt_p found\n" unless @svc_x; } +$opt_e ||= 'insert'; +die &usage unless grep { $_ eq $opt_e } qw( insert replace delete suspend unsuspend ); +my $method = 'export_' . $opt_e; + foreach my $part_export ( @part_export ) { foreach my $svc_x ( @svc_x ) { - my $error = $part_export->export_insert($svc_x); + my $error = $part_export->$method($svc_x,$svc_x); die $error if $error; } } sub usage { - die "Usage:\n\n freeside-reexport user exportnum|exporttype [ -s svcnum | -u username | -p svcpart ]\n"; + return "Usage:\n\n freeside-reexport user exportnum|exporttype [ -s svcnum | -u username | -p svcpart ] [ -e insert|replace|delete|suspend|unsuspend ]\n"; } =head1 NAME @@ -56,12 +60,13 @@ freeside-reexport - Command line tool to re-trigger export jobs for existing ser =head1 SYNOPSIS - freeside-reexport user exportnum|exporttype [ -s svcnum | -u username | -p svcpart ] + freeside-reexport user exportnum|exporttype [ -s svcnum | -u username | -p svcpart ] [ -e insert|replace|delete|suspend|unsuspend ] =head1 DESCRIPTION Re-queues the export job for the specified exportnum or exporttype(s) and - specified service (selected by svcnum or username). + specified service (selected by svcnum, username or svcpart). Optionally + specify the phase of export using the -e flag (default is insert.) =head1 SEE ALSO diff --git a/FS/t/report_batch.t b/FS/t/report_batch.t new file mode 100644 index 000000000..42fc8936a --- /dev/null +++ b/FS/t/report_batch.t @@ -0,0 +1,5 @@ +BEGIN { $| = 1; print "1..1\n" } +END {print "not ok 1\n" unless $loaded;} +use FS::report_batch; +$loaded=1; +print "ok 1\n"; diff --git a/bin/agent_email b/bin/agent_email deleted file mode 100755 index 2fe47c4ba..000000000 --- a/bin/agent_email +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Getopt::Std; -use FS::UID qw(adminsuidsetup); - -&untaint_argv; #what it sounds like (eww) -use vars qw(%opt); -getopts("a:", \%opt); - -my $user = shift or die &usage; -adminsuidsetup $user; - -use FS::Cron::agent_email qw(agent_email); -agent_email(%opt); - -### -# subroutines -### - -sub untaint_argv { - foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV - #$ARGV[$_] =~ /^([\w\-\/]*)$/ || die "Illegal arguement \"$ARGV[$_]\""; - # Date::Parse - $ARGV[$_] =~ /^(.*)$/ || die "Illegal arguement \"$ARGV[$_]\""; - $ARGV[$_]=$1; - } -} - -1; diff --git a/bin/cust_main-bulk_change b/bin/cust_main-bulk_change index 32a6d7bd6..e03901272 100755 --- a/bin/cust_main-bulk_change +++ b/bin/cust_main-bulk_change @@ -1,7 +1,7 @@ #!/usr/bin/perl use strict; -use vars qw( $opt_a $opt_p $opt_t $opt_k ); +use vars qw( $opt_a $opt_p $opt_t $opt_k $opt_c ); use Getopt::Std; use FS::UID qw(adminsuidsetup); use FS::Record qw(qsearch qsearchs); @@ -9,7 +9,7 @@ use FS::cust_main; use FS::cust_tag; use FS::cust_pkg; -getopts('a:p:t:k:'); +getopts('a:p:t:k:c:'); my $user = shift or &usage; adminsuidsetup $user; @@ -64,6 +64,11 @@ while (<STDIN>) { } } + if ( $opt_c ) { + my @error = $cust_main->cancel( 'reason' => $opt_c ); + die join(' / ', @error). "\n" if @error; + } + } sub usage { @@ -76,7 +81,7 @@ cust_main-bulk_change =head1 SYNOPSIS - cust_main-bulk_change [ -a agentnum ] [ -p NEW_PAYBY ] [ -t tagnum ] [ -k old_pkgpart:new_pkgpart,... ] username <custnums.txt + cust_main-bulk_change [ -a agentnum ] [ -p NEW_PAYBY ] [ -t tagnum ] [ -k old_pkgpart:new_pkgpart,... ] [ -c reasonnum ] username <custnums.txt =head1 DESCRIPTION @@ -90,6 +95,8 @@ Command-line tool to make bulk changes to a group of customers. -k: old_pkgpart:new_pkgpart, for example, I<5:4>. Multiple entries can be comma-separated. +-c: Cancel customer + user: Employee username =head1 BUGS diff --git a/bin/msg_template_http-demo.pl b/bin/msg_template_http-demo.pl new file mode 100755 index 000000000..8d184fc85 --- /dev/null +++ b/bin/msg_template_http-demo.pl @@ -0,0 +1,76 @@ +=head1 NAME + +FS::msg_template::http example server. + +=head1 DESCRIPTION + +This is an incredibly crude Mojo web service for demonstrating how to talk +to the HTTP customer messaging interface in Freeside. + +It implements an endpoint for the "password reset" messaging case which +creates a simple password reset message using some template variables, +and a "send" endpoint that just delivers the message by sendmail. The +configuration to use this as your password reset handler would be: + +prepare_url = 'http://localhost:3000/prepare/password_reset' +send_url = 'http://localhost:3000/send' +No username, no password, no additional content. + +=cut + +use Mojolicious::Lite; +use Mojo::JSON qw(decode_json encode_json); +use Email::Simple; +use Email::Simple::Creator; +use Email::Sender::Simple qw(sendmail); + +post '/prepare/password_reset' => sub { + my $self = shift; + + my $json_data = $self->req->body; + #print STDERR $json_data; + my $input = decode_json($json_data); + if ( $input->{username} ) { + my $output = { + 'to' => $input->{invoicing_email}, + 'subject' => "Password reset for $input->{username}", + 'body' => " +To complete your $input->{company_name} password reset, please go to +$input->{selfservice_server_base_url}/selfservice.cgi?action=process_forgot_password;session_id=$input->{session_id} + +This link will expire in 24 hours.", + }; + + return $self->render( json => $output ); + + } else { + + return $self->render( text => 'Username required', status => 500 ); + + } +}; + +post '/send' => sub { + my $self = shift; + + my $json_data = $self->req->body; + my $input = decode_json($json_data); + my $email = Email::Simple->create( + header => [ + From => $ENV{USER}.'@localhost', + To => $input->{to}, + Subject => $input->{subject}, + ], + body => $input->{body}, + ); + local $@; + eval { sendmail($email) }; + if ( $@ ) { + return $self->render( text => $@->message, status => 500 ); + } else { + return $self->render( text => '' ); + } +}; + +app->start; + diff --git a/conf/invoice_html b/conf/invoice_html index dfd87c79b..e1af70703 100644 --- a/conf/invoice_html +++ b/conf/invoice_html @@ -176,15 +176,28 @@ $OUT .= $header; $columncount = scalar(my @array = split /<\/th><th/i, $header); } else { - $OUT .= '<th align="center"></th>'. - '<th align="left">' . emt('Description') . '</th>'. - ( $unitprices - ? '<th align="right">' . emt('Unit Price') . '</th>'. - '<th align="right">' . emt('Quantity') . '</th>' - : '' ). - '<th align="right">' . emt('Amount') . '</th>'; + my @headings = ( '', 'Description', 'Amount' ); + my @aligns = ( 'center', 'left', 'right' ); + if ( $unitprices ) { + splice @headings, 2, 0, 'Unit Price', 'Quantity'; + splice @aligns, 2, 0, 'right', 'right'; + } + if ( $section->{usage_section} ) { + @headings = ( '', 'Description', 'Calls', 'Duration', 'Amount' ); + @aligns = ( '', 'left', 'right', 'right', 'right' ); + $columncount = 5; + } + + while ( @headings ) { + my $heading = shift @headings; + $heading = emt($heading) if $heading; + my $align = shift @aligns; + $OUT .= ' + <th align="' . $align . '">' . $heading . '</th>'; + } } - $OUT .= '</tr>'; + + $OUT .= '</tr>'; my $lastref = 0; foreach my $line ( @@ -197,6 +210,17 @@ if ( $section->{description_generator} ) { $OUT .= '<tr class="invoice_desc' . &{$section->{description_generator}}($line); + } elsif ( $section->{usage_section} ) { + my $minutes = sprintf('%d', $line->{'duration'} / 60); + my $seconds = $line->{'duration'} % 60; + $OUT .= ' + <tr class="invoice_desc_more"> + <td></td> + <td align="left">' . $line->{'description'} . '</td> + <td align="right">' . $line->{'quantity'} . '</td> + <td align="right">' . $minutes . 'm ' . $seconds . 's' . '</td> + <td align="right">' . $line->{'amount'} . '</td> + </tr>'; } else { my $class = 'invoice_desc_more'; if ( ($line->{'ref'} || 0) ne $lastref ) { @@ -257,7 +281,7 @@ } $OUT .= '</tr>'; } - } + } # if !$section->{summarized} if ($section->{'posttotal'}) { $OUT .= '<tr><td align="right" colspan='. $columncount. '>'; $OUT .= diff --git a/conf/invoice_latex b/conf/invoice_latex index c7c696b5d..ceff84bd2 100644 --- a/conf/invoice_latex +++ b/conf/invoice_latex @@ -196,7 +196,20 @@ \hline
}
-% ...description...
+\newcommand{\FSusagehead}{
+ \hline
+ \rule{0pt}{2.5ex}
+ \makebox[1.4cm]{} &
+ \multicolumn{4}{l}{
+ \makebox[\FSdescriptionlength][l]{\textbf{[@-- emt('Description') --@]}}
+ } &
+ \textbf{~~[@-- emt('Calls') --@]} &
+ \textbf{~~[@-- emt('Duration') --@]} &
+ \textbf{~~[@-- emt('Amount') --@]} \\
+ \hline
+}
+
+}% ...description...
\newcommand{\FSdesc}[5]{
\multicolumn{1}{c}{\rule{0pt}{2.5ex}\textbf{#1}} &
\multicolumn{[@-- $unitprices ? '4' : '6' --@]}{l}{\textbf{#2}} &
@@ -217,6 +230,15 @@ & \multicolumn{6}{l}{#1} & #2\\
}
+% ...usage class summary
+\newcommand{\FSusagedesc}[4]{
+ \multicolumn{1}{c}{\rule{0pt}{2.5ex}} &
+ \multicolumn{4}{l}{\textbf{#1}} &
+ \multicolumn{1}{r}{\textbf{#2}} &
+ \multicolumn{1}{r}{\textbf{#3}} &
+ \multicolumn{1}{r}{\textbf{#4}}
+ \\
+}
\begin{document}
% Headers and footers defined for the first page
@@ -289,6 +311,8 @@ $OUT .= '}\\\\';
if ($section->{header_generator}) {
$OUT .= &{$section->{header_generator}}();
+ } elsif ( $section->{usage_section} ) {
+ $OUT .= '\FSusagehead';
} else {
$OUT .= '\FShead';
}
@@ -296,6 +320,8 @@ $OUT .= '\multicolumn{7}{r}{\rule{0pt}{2.5ex}'.emt('Continued from previous page').'}\\\\';
if ($section->{header_generator}) {
$OUT .= &{$section->{header_generator}}();
+ } elsif ( $section->{usage_section} ) {
+ $OUT .= '\FSusagehead';
} else {
$OUT .= '\FShead';
}
@@ -343,6 +369,14 @@ $OUT .= "\\hline\n" if (($line->{'ref'} || 0) ne $lastref);
if ($section->{description_generator}) {
$OUT .= &{$section->{description_generator}}($line);
+ } elsif ($section->{usage_section}) {
+ my $minutes = sprintf('%d', $line->{'duration'} / 60);
+ my $seconds = $line->{'duration'} % 60;
+ $OUT .= '\FSusagedesc
+ {' . $line->{'description'} . '}
+ {' . $line->{'quantity'} . '}
+ {' . $minutes . 'm ' . $seconds . 's' . '}
+ {' . $line->{'amount'} . '}';
} else {
$OUT .= '\FSdesc'.
'{}'.
diff --git a/httemplate/browse/deploy_zone.html b/httemplate/browse/deploy_zone.html index 3bd9d07dd..a1bd57f15 100644 --- a/httemplate/browse/deploy_zone.html +++ b/httemplate/browse/deploy_zone.html @@ -17,6 +17,7 @@ 'Market', 'Advertised Mbps', 'Contractual Mbps', + 'Vertices', 'Census blocks', ], fields => [ 'zonenum', @@ -42,6 +43,9 @@ ) }, sub { my $self = shift; + FS::deploy_zone_vertex->count('zonenum = '.$self->zonenum) + }, + sub { my $self = shift; FS::deploy_zone_block->count('zonenum = '.$self->zonenum) }, ], @@ -53,7 +57,7 @@ '(cir_speed_down, cir_speed_up)', ], links => [ $link_fixed, $link_fixed, ], - align => 'clllllr', + align => 'cllllrrr', nohtmlheader => 1, disable_maxselect => 1, disable_total => 1, diff --git a/httemplate/browse/msg_template.html b/httemplate/browse/msg_template/email.html index ef0b2dafd..d0ef4e3e9 100644 --- a/httemplate/browse/msg_template.html +++ b/httemplate/browse/msg_template/email.html @@ -1,9 +1,9 @@ -<% include( 'elements/browse.html', +<& /browse/elements/browse.html, 'title' => 'Message templates', 'name_singular' => 'template', 'menubar' => \@menubar, - 'query' => { 'table' => 'msg_template', }, - 'count_query' => 'SELECT COUNT(*) FROM msg_template', + 'query' => $query, + 'count_query' => $count_query, 'disableable' => 1, 'disabled_statuspos' => (scalar(@locales) + 3), 'agent_virt' => 1, @@ -14,8 +14,7 @@ 'links' => [ $link, @locale_links, '' ], 'link_onclicks' => [ '', map('', @locale_links), $disable_link ], 'cell_style' => [ '', '', map ($locale_style, @locales), $locale_style ], - ) -%> +&> <%init> my $curuser = $FS::CurrentUser::CurrentUser; @@ -26,10 +25,21 @@ die "access denied" my @menubar = (); if ( $curuser->access_right(['Edit templates', 'Edit global templates']) ) { - push @menubar, 'Add a new template' => $p.'edit/msg_template.html'; + push @menubar, 'Add a new template' => $fsurl.'edit/msg_template/email.html'; } +push @menubar, 'Template images' => $fsurl.'browse/template_image.html'; -my $link = [ "${p}edit/msg_template.html?msgnum=", 'msgnum' ]; +push @menubar, 'External message interfaces' => $fsurl.'browse/msg_template/http.html'; + +my $query = { + 'table' => 'msg_template', + 'select' => '*', + 'hashref' => { 'msgclass' => 'email' }, +}; + +my $count_query = "SELECT COUNT(*) FROM msg_template WHERE msgclass = 'email'"; + +my $link = [ $fsurl.'edit/msg_template/email.html?msgnum=', 'msgnum' ]; my $locale_style = 'font-size:0.8em; padding:3px'; @@ -42,17 +52,17 @@ foreach my $l ( FS::Locales->locales ) { }; push @locale_links, sub { my $content = $_[0]->content_locales->{$l} or return ''; - [ "${p}edit/msg_template.html?locale=$l;msgnum=", 'msgnum' ]; + [ $fsurl."edit/msg_template/email.html?locale=$l;msgnum=", 'msgnum' ]; }; } my $disable_link = sub { my $template = shift; include('/elements/popup_link_onclick.html', - action => $p.'misc/disable-msg_template.cgi?msgnum=' . + action => $fsurl.'misc/disable-msg_template.cgi?msgnum=' . $template->msgnum . ($template->disabled ? ';enable=1' : ''), - actionlabel => 'Disable lemplate', + actionlabel => 'Disable template', ); }; diff --git a/httemplate/browse/msg_template/http.html b/httemplate/browse/msg_template/http.html new file mode 100644 index 000000000..888fda441 --- /dev/null +++ b/httemplate/browse/msg_template/http.html @@ -0,0 +1,68 @@ +<& /browse/elements/browse.html, + 'title' => 'External message interfaces', + 'name_singular' => 'interface', # what else do we call them? + 'menubar' => \@menubar, + 'query' => $query, + 'count_query' => $count_query, + 'disableable' => 1, + 'disabled_statuspos' => 4, + 'agent_virt' => 1, + 'agent_null_right' => ['View global templates','Edit global templates'], + 'agent_pos' => 1, + 'header' => [ 'Name', + # 'Agent', + 'Prepare', + 'Send', + '' ], + 'fields' => [ 'msgname', + 'prepare_url', + 'send_url', + $disable_link_label + ], + 'links' => [ $link, ], + 'link_onclicks' => [ '', '', '', $disable_link ], + 'cell_style' => [ '', '', $url_style, $url_style ], +&> +<%init> + +my $curuser = $FS::CurrentUser::CurrentUser; + +die "access denied" + unless $curuser->access_right([ 'View templates', 'View global templates', + 'Edit templates', 'Edit global templates', ]); + +my @menubar = (); +if ( $curuser->access_right(['Edit templates', 'Edit global templates']) ) { + push @menubar, 'Add a new interface' => $fsurl.'edit/msg_template/http.html'; +} +push @menubar, 'Email templates' => $fsurl.'browse/msg_template/email.html'; +push @menubar, 'Template images' => $fsurl.'browse/template_image.html'; + +my $query = { + 'table' => 'msg_template', + 'select' => '*', + 'hashref' => { 'msgclass' => 'http' }, +}; + +my $count_query = "SELECT COUNT(*) FROM msg_template WHERE msgclass = 'http'"; + +my $link = [ $fsurl.'edit/msg_template/http.html?msgnum=', 'msgnum' ]; + +my $url_style = 'font-size:0.8em; padding:3px'; # also for (disable) label + +my $disable_link = sub { + my $template = shift; + include('/elements/popup_link_onclick.html', + action => $fsurl.'misc/disable-msg_template.cgi?msgnum=' . + $template->msgnum . + ($template->disabled ? ';enable=1' : ''), + actionlabel => 'Disable template', + ); +}; + +my $disable_link_label = sub { + my $template = shift; + $template->disabled ? '(enable)' : '(disable)' ; +}; + +</%init> diff --git a/httemplate/browse/part_pkg.cgi b/httemplate/browse/part_pkg.cgi index c2f1430d7..07f104e55 100755 --- a/httemplate/browse/part_pkg.cgi +++ b/httemplate/browse/part_pkg.cgi @@ -591,6 +591,7 @@ push @fields, }, ]; } + sort grep { $options{$_} =~ /\S/ } grep { $_ !~ /^(setup|recur)_fee$/ and $_ !~ /^report_option_\d+$/ } diff --git a/httemplate/browse/part_svc.cgi b/httemplate/browse/part_svc.cgi index ec5f321dd..88f8d8d19 100755 --- a/httemplate/browse/part_svc.cgi +++ b/httemplate/browse/part_svc.cgi @@ -161,7 +161,7 @@ function part_export_areyousure(href) { % } % % my($n1)=''; -% foreach my $field ( @fields ) { +% foreach my $field ( sort @fields ) { % % #a few lines of false laziness w/edit/part_svc.cgi % my $def = FS::part_svc->svc_table_fields($svcdb)->{$field}; diff --git a/httemplate/browse/template_image.html b/httemplate/browse/template_image.html new file mode 100644 index 000000000..eb4325f15 --- /dev/null +++ b/httemplate/browse/template_image.html @@ -0,0 +1,68 @@ +<% include('/elements/init_overlib.html') %> + +<% include( 'elements/browse.html', + 'title' => 'Template images', + 'name_singular' => 'image', + 'menubar' => \@menubar, + 'query' => { 'table' => 'template_image', }, + 'count_query' => 'SELECT COUNT(*) FROM template_image', + 'agent_virt' => 1, + 'agent_null_right' => ['View global templates','Edit global templates'], + 'agent_pos' => 1, + 'header' => [ 'Name', '', '' ], + 'fields' => [ 'name', $tag, $delete_text ], + 'links' => [ '', '', '' ], + 'cell_style' => [ '', '', '' ], + ) +%> + +<% include('/elements/template_image-dialog.html', + 'url' => $p.'browse/template_image.html' + ) %> + +<%init> +use FS::template_image; + +my $curuser = $FS::CurrentUser::CurrentUser; + +die "access denied" + unless $curuser->access_right([ 'View templates', 'View global templates', + 'Edit templates', 'Edit global templates', ]); + +my $canedit = $curuser->access_right(['Edit templates', 'Edit global templates']); + +my @menubar = (); +if ($canedit) { + push @menubar, 'Upload a new image' => 'javascript:insertImageDialog(\'upload\')'; +} +push @menubar, ( 'View message templates' => $p.'browse/msg_template.html' ); + +my $tag = sub { qq!<A HREF="javascript:insertImageDialog(! . $_[0]->imgnum . qq!)">view</A>! }; + +my $delete_text = $canedit ? sub { + my $image = shift; + my $imgnum = $image->imgnum; + unless ($image->agentnum) { + unless ($FS::CurrentUser::CurrentUser->access_right('Edit global templates')) { + return ''; + } + } + my $out = <<EOF; +<FORM name="delete_template_image_$imgnum"> +<INPUT TYPE="hidden" name="imgnum" value="$imgnum"> +</FORM> +EOF + $out .= include('/elements/progress-init.html', + "delete_template_image_$imgnum", + [ 'imgnum' ], + $p.'misc/process/template_image-delete.cgi', + $p.'browse/template_image.html', + "imgnum$imgnum", + ); + my $onclick = 'if ( confirm(\''; + $onclick .= emt('Are you sure you want to delete template image ') . $imgnum; + $onclick .= '\') ) { imgnum' . $imgnum . 'process() }'; + return $out . '<A HREF="javascript:void(0)" ONCLICK="' . $onclick . '">delete</A>'; +} : ''; + +</%init> diff --git a/httemplate/edit/cust_refund.cgi b/httemplate/edit/cust_refund.cgi index fa049a39a..bfcbfe725 100755 --- a/httemplate/edit/cust_refund.cgi +++ b/httemplate/edit/cust_refund.cgi @@ -139,16 +139,8 @@ my $payinfo = $cgi->param('payinfo'); my $reason = $cgi->param('reason'); my $link = $cgi->param('popup') ? 'popup' : ''; -my @rights = (); -push @rights, 'Post refund' if $payby =~ /^(BILL|CASH|MCRD|MCHK)$/; -push @rights, 'Post check refund' if $payby eq 'BILL'; -push @rights, 'Post cash refund ' if $payby eq 'CASH'; -push @rights, 'Refund payment' if $payby =~ /^(CARD|CHEK)$/; -push @rights, 'Refund credit card payment' if $payby eq 'CARD'; -push @rights, 'Refund Echeck payment' if $payby eq 'CHEK'; - die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right(\@rights); + unless $FS::CurrentUser::CurrentUser->refund_access_right($payby); my( $paynum, $cust_pay ) = ( '', '' ); if ( $cgi->param('paynum') =~ /^(\d+)$/ ) { diff --git a/httemplate/edit/deploy_zone-fixed.html b/httemplate/edit/deploy_zone-fixed.html index 90d1b6667..b8d9f8bbc 100644 --- a/httemplate/edit/deploy_zone-fixed.html +++ b/httemplate/edit/deploy_zone-fixed.html @@ -54,29 +54,36 @@ value => 'Contractually guaranteed speed (Mbps)' }, 'cir_speed_down', 'cir_speed_up', - - { type => 'tablebreak-tr-title', value => 'Census blocks'}, - { field => 'file', - type => 'file-upload', - }, - { field => 'format', - type => 'hidden', - value => 'plain', - }, - { field => 'censusyear', - type => 'select', - options => [ '', qw( 2013 2012 2011 ) ], - }, - - { type => 'tablebreak-tr-title', value => '', }, - { field => 'blocknum', - type => 'deploy_zone_block', - o2m_table => 'deploy_zone_block', - m2_label => ' ', - m2_error_callback => $m2_error_callback, - }, + { type => 'tablebreak-tr-title', value => 'Footprint'}, + { field => 'vertices', + type => 'polygon', + curr_value_callback => sub { + my ($cgi, $object) = @_; + $cgi->param('vertices') || $object->vertices_json; + }, + } +# +# { type => 'tablebreak-tr-title', value => 'Census blocks'}, +# { field => 'file', +# type => 'file-upload', +# }, +# { field => 'format', +# type => 'hidden', +# value => 'plain', +# }, +# { field => 'censusyear', +# type => 'hidden', +# options => [ '', qw( 2013 2012 2011 ) ], +# }, +# +# { type => 'tablebreak-tr-title', value => '', }, +# { field => 'blocknum', +# type => 'deploy_zone_block', +# o2m_table => 'deploy_zone_block', +# m2_label => ' ', +# m2_error_callback => $m2_error_callback, +# }, ], - &> <%init> my $curuser = $FS::CurrentUser::CurrentUser; @@ -90,22 +97,22 @@ my $technology_labels = FS::part_pkg_fcc_option->technology_labels; my $media_types = FS::part_pkg_fcc_option->media_types; delete $media_types->{'Mobile Wireless'}; # cause this is the fixed zone page -my $m2_error_callback = sub { - my ($cgi, $deploy_zone) = @_; - my @blocknums = grep { - /^blocknum\d+/ and length($cgi->param($_.'_censusblock')) - } $cgi->param; - - sort { $a->censusblock <=> $b->censusblock } - map { - my $k = $_; - FS::deploy_zone_block->new({ - blocknum => scalar($cgi->param($k)), - zonenum => $deploy_zone->zonenum, - censusblock => scalar($cgi->param($k.'_censusblock')), - censusyear => scalar($cgi->param($k.'_censusyear')), - }) - } @blocknums; -}; +#my $m2_error_callback = sub { +# my ($cgi, $deploy_zone) = @_; +# my @blocknums = grep { +# /^blocknum\d+/ and length($cgi->param($_.'_censusblock')) +# } $cgi->param; +# +# sort { $a->censusblock <=> $b->censusblock } +# map { +# my $k = $_; +# FS::deploy_zone_block->new({ +# blocknum => scalar($cgi->param($k)), +# zonenum => $deploy_zone->zonenum, +# censusblock => scalar($cgi->param($k.'_censusblock')), +# censusyear => scalar($cgi->param($k.'_censusyear')), +# }) +# } @blocknums; +#}; </%init> diff --git a/httemplate/edit/deploy_zone-mobile.html b/httemplate/edit/deploy_zone-mobile.html index d049cb018..8cec298bf 100644 --- a/httemplate/edit/deploy_zone-mobile.html +++ b/httemplate/edit/deploy_zone-mobile.html @@ -49,14 +49,21 @@ 'adv_speed_down', 'adv_speed_up', { type => 'tablebreak-tr-title', value => 'Footprint'}, - { field => 'vertexnum', - type => 'deploy_zone_vertex', - o2m_table => 'deploy_zone_vertex', - m2_label => ' ', - m2_error_callback => $m2_error_callback, - }, - ], + { field => 'vertices', + type => 'polygon', + curr_value_callback => sub { + my ($cgi, $object) = @_; + $cgi->param('vertices') || $object->vertices_json; + }, + } +# { field => 'vertexnum', +# type => 'deploy_zone_vertex', +# o2m_table => 'deploy_zone_vertex', +# m2_label => ' ', +# m2_error_callback => $m2_error_callback, +# }, + ], &> <%init> my $curuser = $FS::CurrentUser::CurrentUser; diff --git a/httemplate/edit/msg_template.html b/httemplate/edit/msg_template.html index 7f3824127..889b10731 100644 --- a/httemplate/edit/msg_template.html +++ b/httemplate/edit/msg_template.html @@ -1,373 +1,9 @@ -<& elements/edit.html, - 'html_init' => '<TABLE id="outerTable"><TR><TD>', - 'body_etc' => $body_etc, - 'name_singular' => 'template', - 'table' => 'msg_template', - 'viewall_dir' => 'browse', - 'agent_virt' => 1, - 'agent_null' => 1, - 'agent_null_right' => [ 'View global templates', 'Edit global templates' ], - - 'fields' => \@fields, - 'labels' => { - 'msgnum' => 'Template', - 'agentnum' => 'Agent', - 'msgname' => 'Template name', - 'from_addr' => 'From: ', - 'bcc_addr' => 'Bcc: ', - 'locale' => 'Locale', - 'subject' => 'Subject: ', - 'body' => 'Message body', - }, - 'edit_callback' => \&edit_callback, - 'error_callback' => \&edit_callback, - 'html_bottom' => '</DIV>', - 'html_table_bottom'=> \&html_table_bottom, - 'html_foot' => ( $no_submit ? '' : "</TD>$sidebar</TR></TABLE>" ), - 'no_submit' => $no_submit, -&> <%init> - -my $curuser = $FS::CurrentUser::CurrentUser; - -die "access denied" - unless $curuser->access_right([ 'View templates', 'View global templates', - 'Edit templates', 'Edit global templates', - ]); - -my $body_etc = ''; -$body_etc = q!onload="document.getElementById('locale').onchange()"! - if $cgi->param('locale') eq 'new'; - -my $msgnum = $cgi->param('msgnum'); -my $msg_template = $msgnum ? qsearchs('msg_template', {msgnum=>$msgnum}) : ''; - -my $no_submit = 0; -my @fields = (); -if ( $curuser->access_right('Edit global templates') - || ( $curuser->access_right('Edit templates') - && $msg_template - && $msg_template->agentnum - && $curuser->agentnums_href->{$msg_template->agentnum} - ) - ) -{ - push @fields, - { field => 'agentnum', - type => 'select-agent', - }, - { field => 'msgname', size=>60, }, - { field => 'from_addr', size=>60, }, - { field => 'bcc_addr', size=>60, }, - { type => 'tablebreak-tabs', - include_opt_callback => \&menubar_opt_callback, - }, - # template_content fields - { field => 'locale', type => 'hidden' }, - { field => 'subject', size=>60, }, - { field => 'body', - type => 'htmlarea', - width => 763, - config=> { extraPlugins => 'blockprotect' }, - }, - ; -} else { #readonly - - $no_submit = 1; - - push @fields, - { field => 'agentnum', - type => 'select-agent', - fixed => 1, - }, - { field => 'msgname', type => 'fixed', }, - { field => 'from_addr', type => 'fixed', }, - { field => 'bcc_addr', type => 'fixed', }, - { type => 'tablebreak-tabs', - include_opt_callback => \&menubar_opt_callback, - }, - # template_content fields - { field => 'locale', type => 'hidden' }, - { field => 'subject', type => 'fixed', }, - { field => 'body', - type => 'fixed', - noescape => 1, - }, - ; - +my $msgclass = 'email'; +if ( $cgi->param('msgnum') =~ /^(\d+)$/ ) { + my $msg_template = FS::msg_template->by_key($1) + or die "unknown msgnum $1"; + $msgclass = $msg_template->msgclass; } - -sub new_callback { - my ($cgi, $object, $fields_listref, $opt_hashref) = @_; - my $template_content = new FS::template_content { 'locale' => '' }; - $object->{'Hash'} = { $object->hash, $template_content->hash }; -} - -sub edit_callback { - my ($cgi, $object, $fields_listref, $opt_hashref) = @_; - $cgi->param('locale') =~ /^(\w*)$/ or die 'bad locale '.$cgi->param('locale'); - my $locale = $1; - - # fetch the content object and merge its fields - my %args = ( - 'msgnum' => $object->msgnum, - 'locale' => $locale - ); - my $template_content = qsearchs('template_content', \%args) - || new FS::template_content( { %args }); - $object->{'Hash'} = { $object->hash, $template_content->hash }; - - # set up the locale selector if this is a new content - if ( $locale eq 'new' ) { - - # make a list of available locales - my $content_locales = $object->content_locales; - my @locales = grep { !exists($content_locales->{$_}) } - FS::Conf->new->config('available-locales'); - my %labels; - foreach (@locales) { - my %info = FS::Locales->locale_info($_); - $labels{$_} = $info{'label'}; - } - unshift @locales, 'new'; - $labels{'new'} = 'Select language'; - - # insert a field def - my $i = 0; - $i++ until ( $fields_listref->[$i]->{'field'} eq 'locale' ); - my $locale_field = $fields_listref->[$i]; - - my $onchange_locale = "document.getElementById('submit').disabled = - (this.options[this.selectedIndex].value == 'new');"; - - %$locale_field = ( - field => 'locale', - type => 'select', - options => \@locales, - labels => \%labels, - curr_value => 'new', - onchange => $onchange_locale, - ); - } -} - -sub menubar_opt_callback { - my $object = shift; - # generate no tabs for new msg_templates. - my $msgnum = $object->msgnum or return; - my (@tabs, @options, %labels); - push @tabs, mt('Default'), ''; - my $display_new = 0; - my $selected = ''; - foreach my $l (FS::Locales->locales) { - if ( exists $object->content_locales->{$l} ) { - my %info = FS::Locales->locale_info($l); - push @tabs, - $info{'label'}, - ';locale='.$l; - $selected = $info{'label'} if $object->locale eq $l; - } - else { - $display_new = 1; # there is at least one unused locale left - } - } - push @tabs, mt('New'), ';locale=new' if $display_new; - $selected = mt('New') if $object->locale eq 'new'; - $selected ||= mt('Default'); - ( - 'url_base' => $p.'edit/msg_template.html?msgnum='.$msgnum, - 'selected' => $selected, - 'tabs' => \@tabs - ); -} - -my $onchange_locale = ''; - -# Create hints pane - -my %substitutions = ( - 'cust_main' => [ - '$display_custnum'=> 'Customer#', - '$agentnum' => 'Agent#', - '$agent_name' => 'Agent name', - '$payby' => 'Payment method', - '$paymask' => 'Card/account# (masked)', - '$payname' => 'Name on card/bank name', - '$paytype' => 'Account type', - '$payip' => 'IP address used to submit payment info', - '$num_ncancelled_pkgs' => '# of active packages', - '$num_cancelled_pkgs' => '# of cancelled packages', - '$num_pkgs' => '# of packages', - '$classname' => 'Customer class', - '$categoryname' => 'Customer category', - '$balance' => 'Current balance', - '$credit_limit' => 'Credit limit', - '$invoicing_list_emailonly' => 'Billing email address', - #'$cust_status' => 'Status (raw internal label)', - '$cust_status_label' => 'Status (display label)', - '$cust_statuscolor' => 'Status color code', - '$company_name' => 'Our company name', - '$company_address'=> 'Our company address', - '$company_phonenum' => 'Our phone number', - '$selfservice_server_base_url' => 'Base URL of customer self-service', - ], - 'contact' => [ # duplicate this for shipping - '$name' => 'Company and contact name', - '$name_short' => 'Company or contact name', - '$company' => 'Company name', - '$contact' => 'Contact name (last, first)', - '$contact_firstlast'=> 'Contact name (first last)', - '$first' => 'First name', - '$last' => 'Last name', - '$address1' => 'Address line 1', - '$address2' => 'Address line 2', - '$city' => 'City', - '$county' => 'County', - '$state' => 'State', - '$zip' => 'Zip', - '$country' => 'Country', - '$daytime' => 'Day phone', - '$night' => 'Night phone', - '$mobile' => 'Mobile phone', - '$fax' => 'Fax', - ], - 'service' => [ - '$ship_address1' => 'Address line 1', - '$ship_address2' => 'Address line 2', - '$ship_city' => 'City', - '$ship_county' => 'County', - '$ship_state' => 'State', - '$ship_zip' => 'Zip', - '$ship_country' => 'Country', - ], - 'cust_bill' => [ - '$invnum' => 'Invoice#', - '$_date_pretty' => 'Invoice date', - '$due_date' => 'Invoice due date (timestamp)', - '$due_date2str' => 'Invoice due date (human readable)', - ], - 'cust_pkg' => [ - '$pkgnum' => 'Package#', - '$pkg' => 'Package description', - '$pkg_label' => 'Description + comment', - '$status' => 'Status', - '$statuscolor' => 'Status color code', - '$start_ymd' => 'Start date', - '$setup_ymd' => 'Setup date', - '$last_bill_ymd' => 'Last bill date', - '$next_bill_ymd' => 'Next bill date', - '$susp_ymd' => 'Suspended on date', - '$cancel_ymd' => 'Canceled on date', - '$adjourn_ymd' => 'Adjournment date', - '$expire_ymd' => 'Expiration date', - '$labels_short' => 'Service labels', - '$location_label' => 'Service location', - ], - 'svc_acct' => [ - '$svcnum' => 'Service#', - '$username' => 'Login name', - '$password' => 'Password', - '$domain' => 'Domain name', - ], - 'svc_domain' => [ - '$svcnum' => 'Service#', - '$domain' => 'Domain name', - '$registrar' => 'Registrar name', - '$catchall' => 'Catchall email', - ], - 'svc_phone' => [ - '$svcnum' => 'Service#', - '$phonenum' => 'Phone number', - '$countrycode' => 'Country code', - '$domain' => 'Domain name' - ], - 'svc_broadband' => [ - '$svcnum' => 'Service#', - '$ip_addr' => 'IP address', - '$mac_addr' => 'MAC address', - '$speed_up' => 'Upstream speed', - '$speed_down' => 'Downstream speed', - ], - 'cust_pay' => [ - '$paynum' => 'Payment#', - '$paid' => 'Amount', - '$payby' => 'Payment method', - '$date' => 'Payment date', - '$payinfo' => 'Card/account# (masked)', - '$error' => 'Decline reason', - ], -); - -tie my %sections, 'Tie::IxHash', ( -'contact' => 'Name and contact info (billing)', -'service' => 'Service address', -'cust_main' => 'Customer status and payment info', -'cust_pkg' => 'Package fields', -'cust_bill' => 'Invoice fields', -'cust_pay' => 'Payment fields', -'svc_acct' => 'Login service fields', -'svc_domain'=> 'Domain service fields', -'svc_phone' => 'Phone service fields', -'svc_broadband' => 'Broadband service fields', -); - -my $widget = new HTML::Widgets::SelectLayers( - 'options' => \%sections, - 'form_name' => 'dummy', - 'html_between'=>'</FORM><FONT SIZE=-1>', - 'selected_layer'=>(keys(%sections))[0], - 'layer_callback' => sub { - my $section = shift; - my $html = include('/elements/table-grid.html'); - my @hints = @{ $substitutions{$section} }; - while(@hints) { - my $key = shift @hints; - $html .= qq!\n<TR><TD><A href="javascript:insertHtml('{$key}')">$key</A></TD>!; - $html .= "\n<TD>".shift(@hints).'</TD></TR>'; - } - $html .= "\n</TABLE>"; - return $html; - }, -); - -my $sidebar = ' -<SCRIPT TYPE="text/javascript"> -function insertHtml(what) { - var oEditor = CKEDITOR.instances["body"]; - oEditor.insertHtml(what); -}; - -function areyousure(url, message) { - if (confirm(message)) - window.location.href = url; -} -</SCRIPT> -<TD valign="top"><FORM name="dummy"> -Substitutions: ' -. $widget->html . -'<BR>Click links to insert. -<BR>Enclose substitutions and other Perl expressions in braces: -<BR>{ $name } = ExampleCo (Smith, John) -<BR>{ time2str("%D", time) } = '.time2str("%D", time).' -</FONT></TD> -'; - -sub html_table_bottom { - my $object = shift; - $cgi->param('locale') =~ /^(\w+)$/; - my $locale = $1; - my $html; - if ( $locale and $locale ne 'new' ) { - # set up a delete link - my $msgnum = $object->msgnum; - my $url = $p."misc/delete-template_content.html?msgnum=$msgnum;locale=$1"; - my $link = qq!<A HREF="javascript:areyousure('$url','Really delete this template?')">! . - 'Delete this template' . - '</A>'; - $html = qq!<TR><TD></TD> - <TD STYLE="font-style: italic; font-size: small">$link</TD></TR>!; - } - $html; -} - +print $cgi->redirect($fsurl."edit/msg_template/$msgclass.html?".$cgi->query_string); </%init> diff --git a/httemplate/edit/msg_template/email.html b/httemplate/edit/msg_template/email.html new file mode 100644 index 000000000..dc70ef6ec --- /dev/null +++ b/httemplate/edit/msg_template/email.html @@ -0,0 +1,385 @@ +<& /edit/elements/edit.html, + 'post_url' => $fsurl.'edit/process/msg_template.html', + 'html_init' => '<TABLE id="outerTable"><TR><TD>', + 'body_etc' => $body_etc, + 'name_singular' => 'template', + 'table' => 'msg_template', + 'viewall_dir' => 'browse', + 'agent_virt' => 1, + 'agent_null' => 1, + 'agent_null_right' => [ 'View global templates', 'Edit global templates' ], + + 'fields' => \@fields, + 'labels' => { + 'msgnum' => 'Template', + 'agentnum' => 'Agent', + 'msgname' => 'Template name', + 'from_addr' => 'From: ', + 'bcc_addr' => 'Bcc: ', + 'locale' => 'Locale', + 'subject' => 'Subject: ', + 'body' => 'Message body', + }, + 'edit_callback' => \&edit_callback, + 'error_callback' => \&edit_callback, + 'html_bottom' => '</DIV>', + 'html_table_bottom'=> \&html_table_bottom, + 'html_foot' => ( $no_submit ? '' : "</TD>$sidebar</TR></TABLE>" ), + 'no_submit' => $no_submit, +&> +<%init> +use FS::template_image; + +my $curuser = $FS::CurrentUser::CurrentUser; + +die "access denied" + unless $curuser->access_right([ 'View templates', 'View global templates', + 'Edit templates', 'Edit global templates', + ]); + +my $body_etc = ''; +$body_etc = q!onload="document.getElementById('locale').onchange()"! + if $cgi->param('locale') eq 'new'; + +my $msgnum = $cgi->param('msgnum'); +my $msg_template = $msgnum ? qsearchs('msg_template', {msgnum=>$msgnum}) : ''; + +my $no_submit = 0; +my @fields = (); +if ( $curuser->access_right('Edit global templates') + || ( $curuser->access_right('Edit templates') + && $msg_template + && $msg_template->agentnum + && $curuser->agentnums_href->{$msg_template->agentnum} + ) + ) +{ + push @fields, + { field => 'msgclass', + type => 'hidden', + value => 'email', + }, + { field => 'agentnum', + type => 'select-agent', + }, + { field => 'msgname', size=>60, }, + { field => 'from_addr', size=>60, }, + { field => 'bcc_addr', size=>60, }, + { type => 'tablebreak-tabs', + include_opt_callback => \&menubar_opt_callback, + }, + # template_content fields + { field => 'locale', type => 'hidden' }, + { field => 'subject', size=>60, }, + { field => 'body', + type => 'htmlarea', + width => 763, + config=> { extraPlugins => 'blockprotect' }, + }, + ; +} else { #readonly + + $no_submit = 1; + + push @fields, + { field => 'agentnum', + type => 'select-agent', + fixed => 1, + }, + { field => 'msgname', type => 'fixed', }, + { field => 'from_addr', type => 'fixed', }, + { field => 'bcc_addr', type => 'fixed', }, + { type => 'tablebreak-tabs', + include_opt_callback => \&menubar_opt_callback, + }, + # template_content fields + { field => 'locale', type => 'hidden' }, + { field => 'subject', type => 'fixed', }, + { field => 'body', + type => 'fixed', + noescape => 1, + }, + ; + +} + +sub new_callback { + my ($cgi, $object, $fields_listref, $opt_hashref) = @_; + my $template_content = new FS::template_content { 'locale' => '' }; + $object->{'Hash'} = { $object->hash, $template_content->hash }; +} + +sub edit_callback { + my ($cgi, $object, $fields_listref, $opt_hashref) = @_; + $cgi->param('locale') =~ /^(\w*)$/ or die 'bad locale '.$cgi->param('locale'); + my $locale = $1; + + # fetch the content object and merge its fields + my %args = ( + 'msgnum' => $object->msgnum, + 'locale' => $locale + ); + my $template_content = qsearchs('template_content', \%args) + || new FS::template_content( { %args }); + $object->{'Hash'} = { $object->hash, $template_content->hash }; + + # set up the locale selector if this is a new content + if ( $locale eq 'new' ) { + + # make a list of available locales + my $content_locales = $object->content_locales; + my @locales = grep { !exists($content_locales->{$_}) } + FS::Conf->new->config('available-locales'); + my %labels; + foreach (@locales) { + my %info = FS::Locales->locale_info($_); + $labels{$_} = $info{'label'}; + } + unshift @locales, 'new'; + $labels{'new'} = 'Select language'; + + # insert a field def + my $i = 0; + $i++ until ( $fields_listref->[$i]->{'field'} eq 'locale' ); + my $locale_field = $fields_listref->[$i]; + + my $onchange_locale = "document.getElementById('submit').disabled = + (this.options[this.selectedIndex].value == 'new');"; + + %$locale_field = ( + field => 'locale', + type => 'select', + options => \@locales, + labels => \%labels, + curr_value => 'new', + onchange => $onchange_locale, + ); + } +} + +sub menubar_opt_callback { + my $object = shift; + # generate no tabs for new msg_templates. + my $msgnum = $object->msgnum or return; + my (@tabs, @options, %labels); + push @tabs, mt('Default'), ''; + my $display_new = 0; + my $selected = ''; + foreach my $l (FS::Locales->locales) { + if ( exists $object->content_locales->{$l} ) { + my %info = FS::Locales->locale_info($l); + push @tabs, + $info{'label'}, + ';locale='.$l; + $selected = $info{'label'} if $object->locale eq $l; + } + else { + $display_new = 1; # there is at least one unused locale left + } + } + push @tabs, mt('New'), ';locale=new' if $display_new; + $selected = mt('New') if $object->locale eq 'new'; + $selected ||= mt('Default'); + ( + 'url_base' => $fsurl.'edit/msg_template.html?msgnum='.$msgnum, + 'selected' => $selected, + 'tabs' => \@tabs + ); +} + +my $onchange_locale = ''; + +# Create hints pane + +my %substitutions = ( + 'cust_main' => [ + '$display_custnum'=> 'Customer#', + '$agentnum' => 'Agent#', + '$agent_name' => 'Agent name', + '$payby' => 'Payment method', + '$paymask' => 'Card/account# (masked)', + '$payname' => 'Name on card/bank name', + '$paytype' => 'Account type', + '$payip' => 'IP address used to submit payment info', + '$num_ncancelled_pkgs' => '# of active packages', + '$num_cancelled_pkgs' => '# of cancelled packages', + '$num_pkgs' => '# of packages', + '$classname' => 'Customer class', + '$categoryname' => 'Customer category', + '$balance' => 'Current balance', + '$credit_limit' => 'Credit limit', + '$invoicing_list_emailonly' => 'Billing email address', + #'$cust_status' => 'Status (raw internal label)', + '$cust_status_label' => 'Status (display label)', + '$cust_statuscolor' => 'Status color code', + '$company_name' => 'Our company name', + '$company_address'=> 'Our company address', + '$company_phonenum' => 'Our phone number', + '$selfservice_server_base_url' => 'Base URL of customer self-service', + ], + 'contact' => [ # duplicate this for shipping + '$name' => 'Company and contact name', + '$name_short' => 'Company or contact name', + '$company' => 'Company name', + '$contact' => 'Contact name (last, first)', + '$contact_firstlast'=> 'Contact name (first last)', + '$first' => 'First name', + '$last' => 'Last name', + '$address1' => 'Address line 1', + '$address2' => 'Address line 2', + '$city' => 'City', + '$county' => 'County', + '$state' => 'State', + '$zip' => 'Zip', + '$country' => 'Country', + '$daytime' => 'Day phone', + '$night' => 'Night phone', + '$mobile' => 'Mobile phone', + '$fax' => 'Fax', + ], + 'service' => [ + '$ship_address1' => 'Address line 1', + '$ship_address2' => 'Address line 2', + '$ship_city' => 'City', + '$ship_county' => 'County', + '$ship_state' => 'State', + '$ship_zip' => 'Zip', + '$ship_country' => 'Country', + ], + 'cust_bill' => [ + '$invnum' => 'Invoice#', + '$_date_pretty' => 'Invoice date', + '$due_date' => 'Invoice due date (timestamp)', + '$due_date2str' => 'Invoice due date (human readable)', + ], + 'cust_pkg' => [ + '$pkgnum' => 'Package#', + '$pkg' => 'Package description', + '$pkg_label' => 'Description + comment', + '$status' => 'Status', + '$statuscolor' => 'Status color code', + '$start_ymd' => 'Start date', + '$setup_ymd' => 'Setup date', + '$last_bill_ymd' => 'Last bill date', + '$next_bill_ymd' => 'Next bill date', + '$susp_ymd' => 'Suspended on date', + '$cancel_ymd' => 'Canceled on date', + '$adjourn_ymd' => 'Adjournment date', + '$expire_ymd' => 'Expiration date', + '$labels_short' => 'Service labels', + '$location_label' => 'Service location', + ], + 'svc_acct' => [ + '$svcnum' => 'Service#', + '$username' => 'Login name', + '$password' => 'Password', + '$domain' => 'Domain name', + ], + 'svc_domain' => [ + '$svcnum' => 'Service#', + '$domain' => 'Domain name', + '$registrar' => 'Registrar name', + '$catchall' => 'Catchall email', + ], + 'svc_phone' => [ + '$svcnum' => 'Service#', + '$phonenum' => 'Phone number', + '$countrycode' => 'Country code', + '$domain' => 'Domain name' + ], + 'svc_broadband' => [ + '$svcnum' => 'Service#', + '$ip_addr' => 'IP address', + '$mac_addr' => 'MAC address', + '$speed_up' => 'Upstream speed', + '$speed_down' => 'Downstream speed', + ], + 'cust_pay' => [ + '$paynum' => 'Payment#', + '$paid' => 'Amount', + '$payby' => 'Payment method', + '$date' => 'Payment date', + '$payinfo' => 'Card/account# (masked)', + '$error' => 'Decline reason', + ], +); + +tie my %sections, 'Tie::IxHash', ( +'contact' => 'Name and contact info (billing)', +'service' => 'Service address', +'cust_main' => 'Customer status and payment info', +'cust_pkg' => 'Package fields', +'cust_bill' => 'Invoice fields', +'cust_pay' => 'Payment fields', +'svc_acct' => 'Login service fields', +'svc_domain'=> 'Domain service fields', +'svc_phone' => 'Phone service fields', +'svc_broadband' => 'Broadband service fields', +); + +my $widget = new HTML::Widgets::SelectLayers( + 'options' => \%sections, + 'form_name' => 'dummy', + 'html_between'=>'</FORM><FONT SIZE=-1>', + 'selected_layer'=>(keys(%sections))[0], + 'layer_callback' => sub { + my $section = shift; + my $html = include('/elements/table-grid.html'); + my @hints = @{ $substitutions{$section} }; + while(@hints) { + my $key = shift @hints; + $html .= qq!\n<TR><TD><A href="javascript:insertHtml('{$key}')">$key</A></TD>!; + $html .= "\n<TD>".shift(@hints).'</TD></TR>'; + } + $html .= "\n</TABLE>"; + return $html; + }, +); + +my $sidebar = ' +<SCRIPT TYPE="text/javascript"> +function insertHtml(what) { + var oEditor = CKEDITOR.instances["body"]; + oEditor.insertHtml(what); +}; + +function areyousure(url, message) { + if (confirm(message)) + window.location.href = url; +} +</SCRIPT> +<TD valign="top"><FORM name="dummy"> +Substitutions: ' +. $widget->html . +'<P>Click above links to insert substitution code.</P> +<P> +Enclose substitutions and other Perl expressions in braces: +<BR>{ $name } = ExampleCo (Smith, John) +<BR>{ time2str("%D", time) } = '.time2str("%D", time).' +</P>'; +$sidebar .= include('/elements/template_image-dialog.html', + 'callback' => 'insertHtml' + ); +$sidebar .= '<P><A HREF="javascript:insertImageDialog()">Insert Uploaded Image</A></P> +</FONT></TD> +'; + +sub html_table_bottom { + my $object = shift; + $cgi->param('locale') =~ /^(\w+)$/; + my $locale = $1; + my $html; + if ( $locale and $locale ne 'new' ) { + # set up a delete link + my $msgnum = $object->msgnum; + my $url = $fsurl."misc/delete-template_content.html?msgnum=$msgnum;locale=$1"; + my $link = qq!<A HREF="javascript:areyousure('$url','Really delete this template?')">! . + 'Delete this template' . + '</A>'; + $html = qq!<TR><TD></TD> + <TD STYLE="font-style: italic; font-size: small">$link</TD></TR>!; + } + $html; +} + +</%init> diff --git a/httemplate/edit/msg_template/http.html b/httemplate/edit/msg_template/http.html new file mode 100644 index 000000000..e82cc0c60 --- /dev/null +++ b/httemplate/edit/msg_template/http.html @@ -0,0 +1,82 @@ +<& /edit/elements/edit.html, + 'post_url' => $fsurl.'edit/process/msg_template.html', + 'name_singular' => 'message interface', + 'table' => 'msg_template', + 'viewall_dir' => 'browse', + 'agent_virt' => 1, + 'agent_null' => 1, + 'agent_null_right' => [ 'View global templates', 'Edit global templates' ], + + 'fields' => [], # callback takes care of this + 'new_callback' => $edit_callback, + 'edit_callback' => $edit_callback, + 'error_callback' => $edit_callback, + 'labels' => \%labels, + 'no_submit' => $no_submit, +&> +<%init> +my $curuser = $FS::CurrentUser::CurrentUser; + +die "access denied" + unless $curuser->access_right([ 'View templates', 'View global templates', + 'Edit templates', 'Edit global templates', + ]); + +my %labels = ( + 'msgnum' => 'Template', # it's still a template number + 'agentnum' => 'Agent', + 'msgname' => 'Interface name', + 'prepare_url' => 'Prepare URL', + 'send_url' => 'Send URL', + 'username' => 'HTTP username', + 'password' => 'HTTP password', + 'content' => 'Additional POST content', +); + +my $no_submit = 0; + +my $edit_callback = sub { + my ($cgi, $msg_template, $fields, $opt) = @_; + if ( $curuser->access_right('Edit global templates') + || ( $curuser->access_right('Edit templates') + && $msg_template + && $msg_template->agentnum + && $curuser->agentnums_href->{$msg_template->agentnum} + ) + ) { + @$fields = ( + { field => 'msgclass', + type => 'hidden', + value => 'http', + }, + { field => 'agentnum', + type => 'select-agent', + }, + { field => 'msgname', size=>60, required => 1 }, + { field => 'prepare_url', size=>60, required => 1 }, + { field => 'send_url', size=>60, required => 1 }, + { field => 'username', size=>20 }, + { field => 'password', size=>20 }, + { field => 'content', type => 'textarea' }, + ); + } else { #readonly + + $no_submit = 1; + + @$fields = ( + { field => 'agentnum', + type => 'select-agent', + fixed => 1, + }, + { field => 'msgname', type => 'fixed', }, + { field => 'prepare_url', type => 'fixed', }, + { field => 'send_url', type => 'fixed', }, + { field => 'username', type => 'fixed', }, + { field => 'password', type => 'fixed', }, + { field => 'content', type => 'fixed' }, + ); + + } +}; + +</%init> diff --git a/httemplate/edit/part_pkg.cgi b/httemplate/edit/part_pkg.cgi index 9f5510d65..570c5ac75 100755 --- a/httemplate/edit/part_pkg.cgi +++ b/httemplate/edit/part_pkg.cgi @@ -989,9 +989,13 @@ my $html_bottom = sub { #$html .= '</SELECT></TD></TR>'; my $href = $plans{$layer}->{'fields'}; - my @fields = exists($plans{$layer}->{'fieldorder'}) - ? @{$plans{$layer}->{'fieldorder'}} - : keys %{ $href }; + my @fields; + if ( $plans{$layer}->{'fieldorder'} ) { + @fields = @{ $plans{$layer}->{'fieldorder'} }; + } else { + warn "FS::part_pkg::$layer has no fieldorder.\n"; + @fields = keys %$href; + } # hash of dependencies for each of the Pricing Plan fields. # make sure NOT to use double-quotes inside the 'msg' value. @@ -1015,7 +1019,7 @@ my $html_bottom = sub { } } }; - + foreach my $field ( grep $_ !~ /^(setup|recur)_fee$/, @fields ) { if(!exists($href->{$field})) { @@ -1029,7 +1033,8 @@ my $html_bottom = sub { next if !$display; } - $html .= '<TR><TD ALIGN="right">'. $href->{$field}{'name'}. '</TD><TD>'; + $html .= '<TR><TD ALIGN="right">'. $href->{$field}{'name'}. '</TD><TD> + '; my $format = sub { shift }; $format = $href->{$field}{'format'} if exists($href->{$field}{'format'}); @@ -1128,9 +1133,11 @@ my $html_bottom = sub { $html .= '</TD></TR>'; } $html .= '</TABLE>'; - - $html .= qq(<INPUT TYPE="hidden" NAME="${layer}__OPTIONS" VALUE="). - join(',', keys %{ $href } ). '">'; + + $html .= include('/elements/hidden.html', + field => $layer.'__OPTIONS', + value => join(',', @fields) + ); $html; diff --git a/httemplate/edit/process/change-cust_pkg.html b/httemplate/edit/process/change-cust_pkg.html index 046a9795c..308ea8ffd 100644 --- a/httemplate/edit/process/change-cust_pkg.html +++ b/httemplate/edit/process/change-cust_pkg.html @@ -59,6 +59,40 @@ unless ($error) { $error = $cust_pkg->change_later(\%change); } } else { + + # for now, can't change usageprice with change_later + my @old_cust_pkg_usageprice = $cust_pkg->cust_pkg_usageprice; + + # build new usageprice array + # false laziness with /edit/process/quick-cust_pkg.cgi + my @cust_pkg_usageprice = (); + foreach my $quantity_param ( grep { $cgi->param($_) && $cgi->param($_) > 0 } + grep /^usagepricenum(\d+)_quantity$/, + $cgi->param + ) + { + $quantity_param =~ /^usagepricenum(\d+)_quantity$/ or die 'unpossible'; + my $num = $1; + push @cust_pkg_usageprice, new FS::cust_pkg_usageprice { + usagepricepart => scalar($cgi->param("usagepricenum${num}_usagepricepart")), + quantity => scalar($cgi->param($quantity_param)), + }; + } + + # Need to figure out if usagepricepart quantities changed + my %oldup = map { $_->usagepricepart, $_->quantity } @old_cust_pkg_usageprice; + my %newup = map { $_->usagepricepart, $_->quantity } @cust_pkg_usageprice; + my $usagechanged = 0; + foreach my $up (keys %oldup) { + last if $usagechanged; + $usagechanged = 1 unless $oldup{$up} == $newup{$up}; + } + foreach my $up (keys %newup) { + last if $usagechanged; + $usagechanged = 1 unless $oldup{$up} == $newup{$up}; + } + $change{'cust_pkg_usageprice'} = \@cust_pkg_usageprice; + # special case: if there's a package change scheduled, and it matches # the parameters the user requested this time, then change to the existing # future package. @@ -68,12 +102,13 @@ unless ($error) { $change_to->pkgpart == $change{'pkgpart'} and $change_to->locationnum == $change{'locationnum'} and $change_to->quantity == $change{'quantity'} and - $change_to->contract_end == $change{'contract_end'} + $change_to->contract_end == $change{'contract_end'} and + !$usagechanged ) { %change = ( 'cust_pkg' => $change_to ); } } - + # do a package change right now my $pkg_or_error = $cust_pkg->change( \%change ); $error = ref($pkg_or_error) ? '' : $pkg_or_error; diff --git a/httemplate/edit/process/cust_credit_bill.cgi b/httemplate/edit/process/cust_credit_bill.cgi index d3847dc40..db15eac18 100755 --- a/httemplate/edit/process/cust_credit_bill.cgi +++ b/httemplate/edit/process/cust_credit_bill.cgi @@ -12,8 +12,7 @@ die "access denied" if ( $cgi->param('src_amount') ) { die "access denied" - unless ( $FS::CurrentUser::CurrentUser->access_right('Post credit') && - $FS::CurrentUser::CurrentUser->access_right('Delete credit') ); + unless $FS::CurrentUser::CurrentUser->access_right('Post credit') } </%init> diff --git a/httemplate/edit/process/cust_refund.cgi b/httemplate/edit/process/cust_refund.cgi index 52fede8ec..6ad468b6c 100755 --- a/httemplate/edit/process/cust_refund.cgi +++ b/httemplate/edit/process/cust_refund.cgi @@ -12,7 +12,7 @@ </BODY></HTML> % } else { -<% $cgi->redirect(popurl(3). "view/cust_main.cgi?$custnum") %> +<% $cgi->redirect(popurl(3). "view/cust_main.cgi?custnum=$custnum;show=payment_history") %> % } %} <%init> @@ -30,16 +30,8 @@ my $link = $cgi->param('popup') ? 'popup' : ''; my $payby = $cgi->param('payby'); -my @rights = (); -push @rights, 'Post refund' if $payby =~ /^(BILL|CASH|MCRD|MCHK)$/; -push @rights, 'Post check refund' if $payby eq 'BILL'; -push @rights, 'Post cash refund ' if $payby eq 'CASH'; -push @rights, 'Refund payment' if $payby =~ /^(CARD|CHEK)$/; -push @rights, 'Refund credit card payment' if $payby eq 'CARD'; -push @rights, 'Refund Echeck payment' if $payby eq 'CHEK'; - die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right(\@rights); + unless $FS::CurrentUser::CurrentUser->refund_access_right($payby); $cgi->param('reasonnum') =~ /^(-?\d+)$/ or die "Illegal reasonnum"; my ($reasonnum, $error) = $m->comp('/misc/process/elements/reason'); @@ -63,12 +55,19 @@ if ( $error ) { 'reason' => $reason, %options ); } else { - my $new = new FS::cust_refund ( { - map { - $_, scalar($cgi->param($_)); - } fields('cust_refund') #huh? , 'paynum' ) - } ); - $error = $new->insert; + my %hash = map { + $_, scalar($cgi->param($_)) + } fields('cust_refund'); + my $paynum = $cgi->param('paynum'); + $paynum =~ /^(\d*)$/ or die "Illegal paynum!"; + if ($paynum) { + my $cust_pay = qsearchs('cust_pay',{ 'paynum' => $paynum }); + die "Could not find paynum $paynum" unless $cust_pay; + $error = $cust_pay->refund(\%hash); + } else { + my $new = new FS::cust_refund ( \%hash ); + $error = $new->insert; + } } </%init> diff --git a/httemplate/edit/process/deploy_zone-fixed.html b/httemplate/edit/process/deploy_zone-fixed.html index eae3a746d..0033bbe52 100644 --- a/httemplate/edit/process/deploy_zone-fixed.html +++ b/httemplate/edit/process/deploy_zone-fixed.html @@ -3,12 +3,31 @@ error_redirect => popurl(2).'deploy_zone-fixed.html', table => 'deploy_zone', viewall_dir => 'browse', - process_o2m => { - 'table' => 'deploy_zone_block', - 'fields' => [qw( censusblock censusyear )] - }, - process_upload => { - 'process' => 'misc/process/deploy_zone-import.html', - 'fields' => [qw( censusyear format )], - }, + precheck_callback => $precheck_callback, + process_o2m => + { 'table' => 'deploy_zone_vertex', + 'fields' => [qw( latitude longitude )] + }, + progress_init => [ + 'PostForm', + [ 'zonenum' ], + $fsurl.'misc/process/deploy_zone-block_lookup.cgi', + $fsurl.'browse/deploy_zone.html', + ], &> +<%init> +my $precheck_callback = sub { + # convert the vertex list into a process_o2m-style parameter list + if ( $cgi->param('vertices') ) { + my $vertices = decode_json($cgi->param('vertices')); + my $i = 0; + foreach (@$vertices) { + $cgi->param("vertexnum${i}", ''); + $cgi->param("vertexnum${i}_latitude", $_->[0]); + $cgi->param("vertexnum${i}_longitude", $_->[1]); + $i++; + } + } + ''; +}; +</%init> diff --git a/httemplate/edit/process/deploy_zone-mobile.html b/httemplate/edit/process/deploy_zone-mobile.html index 7b8f911ec..d36d5d448 100644 --- a/httemplate/edit/process/deploy_zone-mobile.html +++ b/httemplate/edit/process/deploy_zone-mobile.html @@ -2,8 +2,25 @@ error_redirect => popurl(2).'deploy_zone-mobile.html', table => 'deploy_zone', viewall_dir => 'browse', - process_o2m => + precheck_callback => $precheck_callback, + process_o2m => { 'table' => 'deploy_zone_vertex', 'fields' => [qw( latitude longitude )] }, &> +<%init> +my $precheck_callback = sub { + # convert the vertex list into a process_o2m-style parameter list + if ( $cgi->param('vertices') ) { + my $vertices = decode_json($cgi->param('vertices')); + my $i = 0; + foreach (@$vertices) { + $cgi->param("vertexnum${i}", ''); + $cgi->param("vertexnum${i}_latitude", $_->[0]); + $cgi->param("vertexnum${i}_longitude", $_->[1]); + $i++; + } + } + ''; +}; +</%init> diff --git a/httemplate/edit/process/elements/process.html b/httemplate/edit/process/elements/process.html index 69bd605f6..fd12c61d9 100644 --- a/httemplate/edit/process/elements/process.html +++ b/httemplate/edit/process/elements/process.html @@ -160,7 +160,28 @@ process(); </script> <& /elements/footer.html &> -%} elsif ( $opt{'popup_reload'} ) { +% } elsif ( $opt{'progress_init'} ) { +% # some false laziness with the above +% my ($form_name, $job_fields) = @{ $opt{'progress_init'} }; +<form name="<% $form_name %>"> + <input type="hidden" name="<% $pkey %>" value="<% $new->get($pkey) %>"> +% foreach my $field (@$job_fields) { +% next if $field eq $pkey; + <input type="hidden" name="<% $field %>" value="<% $cgi->param($field) |h %>"> +% } +<& /elements/progress-init.html, + @{ $opt{'progress_init'} } +&> +<input type="submit" style="display:none"> +</form> +<script> +<&| /elements/onload.js &> +process(); +</&> +</script> +<& /elements/footer.html &> + +% } elsif ( $opt{'popup_reload'} ) { <% include('/elements/header-popup.html', $opt{'popup_reload'} ) %> diff --git a/httemplate/edit/process/msg_template.html b/httemplate/edit/process/msg_template.html index e146adf76..d8b125ae0 100644 --- a/httemplate/edit/process/msg_template.html +++ b/httemplate/edit/process/msg_template.html @@ -1,7 +1,7 @@ <% include( 'elements/process.html', 'table' => 'msg_template', - 'viewall_dir' => 'browse', - #'popup_reload'=> 1, + 'fields' => $fields, + 'viewall_url' => "browse/msg_template/$msgclass.html", 'debug' => 0, 'precheck_callback' => \&precheck_callback, 'args_callback' => \&args_callback, @@ -11,9 +11,21 @@ die "access denied" unless $FS::CurrentUser::CurrentUser->access_right(['Edit templates','Edit global templates']); +my $msgclass = 'email'; +if ( $cgi->param('msgclass') =~ /^(\w+)$/ ) { + $msgclass = $1; +} + +my $fields = [ fields('msg_template') ]; +my $class = "FS::msg_template::$msgclass"; +eval "use $class;"; +if ( $class->extension_table ) { + push @$fields, fields($class->extension_table); +} + sub precheck_callback { my $cgi = shift; - # validate some fields + # validate locale field (for email-type records) $cgi->param('locale') =~ /^(\w*)$/; my $locale = $1; return mt('Language required') if $locale eq 'new'; # the user didn't choose diff --git a/httemplate/edit/process/rate_detail.html b/httemplate/edit/process/rate_detail.html index 0709d5079..f8a744418 100644 --- a/httemplate/edit/process/rate_detail.html +++ b/httemplate/edit/process/rate_detail.html @@ -12,7 +12,6 @@ die "access denied" my $set_default_detail = sub { my ($cgi, $rate_detail) = @_; -warn Dumper $rate_detail; if (!$rate_detail->dest_regionnum) { # then this is a global default rate my $rate = $rate_detail->rate; diff --git a/httemplate/edit/rate.cgi b/httemplate/edit/rate.cgi index 183ea8a42..1b052d62d 100644 --- a/httemplate/edit/rate.cgi +++ b/httemplate/edit/rate.cgi @@ -5,7 +5,7 @@ <% include('/elements/progress-init.html', 'OneTrueForm', - [ 'rate', 'agentnum', 'preserve_rate_detail' ], # 'rate', 'min_', 'sec_' ], + [ 'rate', 'agentnum' ], 'process/rate.cgi', $p.'browse/rate.cgi', ) @@ -27,8 +27,6 @@ </TABLE> <BR> -<INPUT TYPE="hidden" NAME="preserve_rate_detail" VALUE="1"> - <INPUT NAME="submit" TYPE="button" VALUE="<% $rate->ratenum ? "Apply changes" : "Add rate plan" %>" onClick="document.OneTrueForm.submit.disabled=true; process();"> diff --git a/httemplate/elements/contact.html b/httemplate/elements/contact.html index ef74481c0..87e15debe 100644 --- a/httemplate/elements/contact.html +++ b/httemplate/elements/contact.html @@ -135,7 +135,7 @@ tie my %label, 'Tie::IxHash', my $first = 0; foreach my $phone_type ( qsearch({table=>'phone_type', order_by=>'weight'}) ) { - next if $phone_type->typename eq 'Home'; + next if $phone_type->typename =~ /^(Home|Fax)$/; my $f = 'phonetypenum'.$phone_type->phonetypenum; $label{$f} = $phone_type->typename. ' phone'; $size{$f} = $first++ ? 10 : 15; diff --git a/httemplate/elements/cust_pkg_usageprice.html b/httemplate/elements/cust_pkg_usageprice.html index 729099320..74b7842be 100644 --- a/httemplate/elements/cust_pkg_usageprice.html +++ b/httemplate/elements/cust_pkg_usageprice.html @@ -23,15 +23,16 @@ > % my $info = $part_pkg_usageprice->target_info; % my $amount = $part_pkg_usageprice->amount / ($info->{multiplier}||1); - <OPTION VALUE="">Additional <% $info->{label} %> + <OPTION VALUE="">Additional <% $info->{label} %></OPTION> % for (1..100) { #100? arbitrary. - <OPTION VALUE="<% $_ %>"><% +% my $selected = ($opt{'curr_quantity'} == $_) ? ' SELECTED' : ''; + <OPTION VALUE="<% $_ %>"<% $selected %>><% $money_char. sprintf('%.2f', $_ * $part_pkg_usageprice->price ). ' '. 'for'. #( $part_pkg_usageprice->action eq 'increment' ? 'per' : 'for' ). ' '. ( $_ * $amount ). ' '. $info->{label} - %> + %></OPTION> % } </SELECT> </TD> @@ -42,8 +43,6 @@ % } <%init> -#my $targets = FS::part_pkg_usageprice->targets; - my( %opt ) = @_; my $conf = new FS::Conf; diff --git a/httemplate/elements/email-link.html b/httemplate/elements/email-link.html index 2612faabb..16935cf98 100644 --- a/httemplate/elements/email-link.html +++ b/httemplate/elements/email-link.html @@ -10,7 +10,8 @@ die "'table' required" if !$table; die "'search_hash' required" if !$search_hash; my $uri = new URI; -$uri->query_form($search_hash); +my @params = map { $_, $search_hash->{$_} } sort keys %$search_hash; +$uri->query_form(@params); my $query = $uri->query; my $label = ($opt{'label'} || 'Email a notice to these customers'); </%init> diff --git a/httemplate/elements/form-create_ticket.html b/httemplate/elements/form-create_ticket.html index 362e82397..d76c0d83e 100644 --- a/httemplate/elements/form-create_ticket.html +++ b/httemplate/elements/form-create_ticket.html @@ -6,7 +6,7 @@ function updateTicketLink() { link.href = "<% $new_base.'?'. join(';', map( { ($_ eq 'Queue') ? () : "$_=$new_param{$_}"} - keys %new_param),'Queue=') %>" + selector.options[selector.selectedIndex].value; + sort keys %new_param),'Queue=') %>" + selector.options[selector.selectedIndex].value; } </SCRIPT> <A NAME="tickets"><FONT CLASS="fsinnerbox-title">Tickets</FONT></A> diff --git a/httemplate/elements/form-file_upload.html b/httemplate/elements/form-file_upload.html index 45b6c97f2..3542a5a8e 100644 --- a/httemplate/elements/form-file_upload.html +++ b/httemplate/elements/form-file_upload.html @@ -69,6 +69,7 @@ Example: <div style="display:none:" id="uploadError"></div> <FORM NAME = "<% $opt{name} %>" + ID = "<% $opt{id} %>" ACTION = "<% $fsurl %>misc/file-upload.html" METHOD = "POST" ENCTYPE = "multipart/form-data" diff --git a/httemplate/elements/htmlarea.html b/httemplate/elements/htmlarea.html index 7c40e61c7..d8b25121a 100644 --- a/httemplate/elements/htmlarea.html +++ b/httemplate/elements/htmlarea.html @@ -12,7 +12,7 @@ Example: </%doc> % #init -<SCRIPT TYPE="text/javascript" src="<% $p %>elements/ckeditor/ckeditor.js"> +<SCRIPT TYPE="text/javascript" src="<% $fsurl %>elements/ckeditor/ckeditor.js"> </SCRIPT> % #editor @@ -35,7 +35,7 @@ my $config = { 'skin' => 'kama', 'toolbarCanCollapse' => JSON::true, 'removePlugins' => 'elementspath', - 'basePath' => $p.'elements/ckeditor/', + 'basePath' => $fsurl.'elements/ckeditor/', 'enterMode' => 2, %{ $opt{config} || {} }, }; diff --git a/httemplate/elements/images/ui-icons_ef8c08_256x240.png b/httemplate/elements/images/ui-icons_ef8c08_256x240.png Binary files differnew file mode 100644 index 000000000..85e63e9f6 --- /dev/null +++ b/httemplate/elements/images/ui-icons_ef8c08_256x240.png diff --git a/httemplate/elements/menu.html b/httemplate/elements/menu.html index a5fb15bc2..ea6933198 100644 --- a/httemplate/elements/menu.html +++ b/httemplate/elements/menu.html @@ -381,6 +381,8 @@ if( $curuser->access_right('Financial reports') ) { $report_financial{'Tax Liability (vendor tax data)'} = [ $fsurl.'search/report_newtax.html', 'Tax liability report (vendor tax data)' ] if $taxproducts; + $report_financial{'Monthly Sales and Taxes'} = [$fsurl.'search/tax_sales.html', 'Monthly sales and taxes report']; + # most sites don't need this but there isn't really a config to enable it $report_financial{'E911 Fee Summary'} = [ $fsurl.'search/report_e911.html', 'E911 fee summary' ]; @@ -767,7 +769,7 @@ tie my %config_nms, 'Tie::IxHash', ; tie my %config_misc, 'Tie::IxHash'; -$config_misc{'Message templates'} = [ $fsurl.'browse/msg_template.html', 'Templates for customer notices' ] +$config_misc{'Message templates'} = [ $fsurl.'browse/msg_template/email.html', 'Templates for customer notices' ] if $curuser->access_right(['View templates', 'View global templates', 'Edit templates', 'Edit global templates', ]); $config_misc{'Advertising sources'} = [ $fsurl.'browse/part_referral.html', 'Where a customer heard about your service.' ] diff --git a/httemplate/elements/order_pkg.js b/httemplate/elements/order_pkg.js index 3586a54cb..a850d2193 100644 --- a/httemplate/elements/order_pkg.js +++ b/httemplate/elements/order_pkg.js @@ -1,10 +1,12 @@ function pkg_changed () { var form = document.OrderPkgForm; var discountnum = form.discountnum; + var opt = form.pkgpart.options[form.pkgpart.selectedIndex]; + + usageprice_pkg_changed( opt.value ); if ( form.pkgpart.selectedIndex > 0 ) { - var opt = form.pkgpart.options[form.pkgpart.selectedIndex]; var date_button = document.getElementById('start_date_button'); var date_button_disabled = document.getElementById('start_date_disabled'); var date_text = document.getElementById('start_date_text'); @@ -68,78 +70,14 @@ function pkg_changed () { } } - get_part_pkg_usageprice( opt.value, update_part_pkg_usageprice ); - } else { form.submitButton.disabled = true; if ( discountnum ) { form.discountnum.disabled = true; } discountnum_changed(form.discountnum); } -} - -function update_part_pkg_usageprice(part_pkg_usageprice) { - - var table = document.getElementById('cust_pkg_usageprice_table'); - - // black the current usage price rows - for ( var r = table.rows.length - 1; r >= 0; r-- ) { - table.deleteRow(r); - } - - // add the new usage price rows - var rownum = 0; - var usagepriceArray = eval('(' + part_pkg_usageprice + ')' ); - for ( var s = 0; s < usagepriceArray.length; s=s+2 ) { - //surely this should be some kind of JSON structure - var html = usagepriceArray[s+0]; - var javascript = usagepriceArray[s+1]; - - // a lot like ("inspiried by") edit/elements/edit.html function spawn_<%$field%> - - // XXX evaluate the javascript - //if (window.ActiveXObject) { - // window.execScript(newfunc); - //} else { /* (window.XMLHttpRequest) */ - // //window.eval(newfunc); - // setTimeout(newfunc, 0); - //} - - var row = table.insertRow(rownum++); - - //var label_cell = document.createElement('TD'); - - //label_cell.id = '<% $field %>_label' + <%$field%>_fieldnum; - - //label_cell.style.textAlign = "right"; - //label_cell.style.verticalAlign = "top"; - //label_cell.style.borderTop = "1px solid black"; - //label_cell.style.paddingTop = "5px"; - - //label_cell.innerHTML = '<% $label %>'; - - //row.appendChild(label_cell); - - var widget_cell = document.createElement('TD'); - - //widget_cell.style.borderTop = "1px solid black"; - widget_cell.style.paddingTop = "3px"; - widget_cell.colSpan = "2"; - - widget_cell.innerHTML = html; - - row.appendChild(widget_cell); - - } - - if ( rownum > 0 ) { - document.getElementById('cust_pkg_usageprice_title').style.display = ''; - } else { - document.getElementById('cust_pkg_usageprice_title').style.display = 'none'; - } } - function standardize_new_location() { var form = document.OrderPkgForm; var loc = form.locationnum; diff --git a/httemplate/elements/polygon.html b/httemplate/elements/polygon.html new file mode 100644 index 000000000..c26e98546 --- /dev/null +++ b/httemplate/elements/polygon.html @@ -0,0 +1,127 @@ +<%init> +my %opt = @_; +my $field = $opt{'field'}; +my $id = $opt{'id'} || $opt{'field'}; +my $div_id = "div_$id"; + +my $vertices_json = $opt{'curr_value'} || '[]'; +</%init> +<& hidden.html, %opt &> +<div id="<% $div_id %>" style="height: 600px; width: 600px"></div> + +<script src="https://maps.googleapis.com/maps/api/js?libraries=drawing"></script> +<script> +var map; +var drawingManager; + +function updateFormInput(event) { + var path = window.polygon.getPath(); + var vertices = []; // array of arrays, geoJSON style + for (var i =0; i < path.getLength(); i++) { + var xy = path.getAt(i); + vertices[i] = [ xy.lat(), xy.lng() ]; + } + console.log(vertices); //XXX + $('#<% $field %>').prop('value', JSON.stringify(vertices)); +} + +$(function() { + mapOptions = { + zoom: 4, + center: {lat: 39.40114, lng: -96.57127}, // continental U.S. + mapTypeId: google.maps.MapTypeId.ROADMAP, + panControl: true, + scaleControl: true, + streetViewControl: false, + }; + map = new google.maps.Map($('#<% $div_id %>')[0], mapOptions); + + var polygonComplete = function(p) { + window.polygon = p; + if (drawingManager) { + drawingManager.setDrawingMode(null); + drawingManager.setOptions({ drawingControl: false }); + } + // double click to delete a vertex (so long as it remains a polygon) + p.addListener('dblclick', function (mev) { + if (mev.vertex != null && window.polygon.getPath().length > 3) { + p.getPath().removeAt(mev.vertex); + } + }); + // any time the polygon is modified, update the vertex list + p.getPath().addListener('set_at', updateFormInput); + p.getPath().addListener('insert_at', updateFormInput); + p.getPath().addListener('remove_at', updateFormInput); + + // and also now + updateFormInput(); + }; + + var polygonOptions = { + fillColor: '#0000a0', + fillOpacity: 0.2, + strokeColor: '#0000a0', + strokeWeight: 2, + clickable: false, + editable: true, + zIndex: 1, + map: map, + }; + + var vertex_array = <% $vertices_json %>; + if ( vertex_array.length > 2 ) { + // then we already have a polygon. make it acceptable to google maps, + // and also create a bounding box for it and fit the map to that. + + var path = []; + var bounds = new google.maps.LatLngBounds(); + for (var i = 0; i < vertex_array.length; i++) { + var xy = new google.maps.LatLng(vertex_array[i][0], vertex_array[i][1]); + path.push(xy); + bounds.extend(xy); + } + + polygonOptions.paths = [ path ]; + polygonComplete(new google.maps.Polygon(polygonOptions)); + map.fitBounds(bounds); + + } else { + // there are no vertices, or not enough to make a polygon, so + // enable drawing mode to create a new one + + drawingManager = new google.maps.drawing.DrawingManager({ + drawingMode: google.maps.drawing.OverlayType.POLYGON, + drawingControl: true, + drawingControlOptions: { + position: google.maps.ControlPosition.TOP_CENTER, + drawingModes: [ + google.maps.drawing.OverlayType.POLYGON, + ] + }, + polygonOptions: polygonOptions, + }); + + // after a single polygon is drawn: remember it, add a listener to let + // nodes be deleted, and exit drawing mode + drawingManager.addListener('polygoncomplete', polygonComplete); + drawingManager.setMap(map); + + // center the map on the user (for lack of a better choice) + if (navigator.geolocation) { + navigator.geolocation.getCurrentPosition(function(position) { + var pos = { + lat: position.coords.latitude, + lng: position.coords.longitude + }; + + map.setCenter(pos); + map.setZoom(12); + }); + } // on error, or if geolocation isn't available, do nothing + } + +}); + + </script> + </body> +</html> diff --git a/httemplate/elements/popup_link-send_report_batch.html b/httemplate/elements/popup_link-send_report_batch.html new file mode 100644 index 000000000..5f4471054 --- /dev/null +++ b/httemplate/elements/popup_link-send_report_batch.html @@ -0,0 +1,28 @@ +<%doc> + +Example: + +<& /elements/popup_link-send_report_batch.html, + reportname => 'sales_commission_pkg', + label => 'Click here to send reports by email', +&> +</%doc> +<& /elements/popup_link.html, $params &>\ +<%init> + +my $params = { 'closetext' => emt('Close') }; + +if (ref($_[0]) eq 'HASH') { + $params = { %$params, %{ $_[0] } }; +} else { + $params = { %$params, @_ }; +} + +$params->{'label'} ||= emt('Send reports by email'); +$params->{'actionlabel'} ||= emt('Send reports'); +#$params->{'width'} ||= 350; +$params->{'height'} ||= 650; + +$params->{'action'} = $fsurl. 'misc/send-report.html?reportname='. $params->{'reportname'}; + +</%init> diff --git a/httemplate/elements/schedule-appointment.html b/httemplate/elements/schedule-appointment.html index 45a8a5bab..69b9f422b 100644 --- a/httemplate/elements/schedule-appointment.html +++ b/httemplate/elements/schedule-appointment.html @@ -12,7 +12,8 @@ my $custnum = encode_entities( $cgi->param('custnum') ); my $query = join('&', map "username=$_", @username). "&LengthMin=$LengthMin". - "&custnum=$custnum"; + "&custnum=$custnum". + "&RedirectToBasics=1"; #XXX '&pkgnum=$pkgnum";need to be for specific package/location, not just for a customer... default to active(/ordered) package in a pkg_class w/ticketing_queueid, otherwise, a popup? we're getting complicated like form-creat_ticket.html my $url = $p. 'rt/Search/Schedule.html?'. $query; diff --git a/httemplate/elements/select-terms.html b/httemplate/elements/select-terms.html index 716832f52..a330df17c 100644 --- a/httemplate/elements/select-terms.html +++ b/httemplate/elements/select-terms.html @@ -36,7 +36,7 @@ my $empty_value = $opt{'empty_value'} || ''; my @terms = ( emt('Payable upon receipt'), ( map "Net $_", - 0, 3, 5, 9, 10, 14, 15, 18, 20, 21, 25, 30, 45, 60, 90 ), + 0, 3, 5, 7, 9, 10, 14, 15, 18, 20, 21, 25, 30, 45, 60, 90 ), ); my @pre_options = $opt{pre_options} ? @{ $opt{pre_options} } : (); diff --git a/httemplate/elements/select-tower_sector.html b/httemplate/elements/select-tower_sector.html index a16d3bfa0..76ff25223 100644 --- a/httemplate/elements/select-tower_sector.html +++ b/httemplate/elements/select-tower_sector.html @@ -2,6 +2,8 @@ <& /elements/select-table.html, table => 'tower_sector', name_col => 'description', + addl_from => 'JOIN tower USING (towernum)', + extra_sql => q(WHERE disabled = '' OR disabled IS NULL), order_by => 'ORDER BY towernum,sectorname', empty_label => ' ', @_ @@ -11,8 +13,9 @@ <& /elements/select-table.html, table => 'tower', name_col => 'towername', + hashref => { 'disabled' => '', }, id => 'towernum', - field => 'dummy_towernum', + field => 'towernum', onchange => 'change_towernum(this.value);', element_etc => 'STYLE="vertical-align:top"', &> @@ -63,5 +66,5 @@ foreach my $towernum (keys %sectors_of) { } } -my $empty_label = $opt{'empty_label'} || 'Include services with no tower/sector'; +my $empty_label = $opt{'empty_label'} || 'Include services with no sector'; </%init> diff --git a/httemplate/elements/template_image-dialog.html b/httemplate/elements/template_image-dialog.html new file mode 100644 index 000000000..b471d28da --- /dev/null +++ b/httemplate/elements/template_image-dialog.html @@ -0,0 +1,279 @@ +<%doc> + +Creates a jquery dialog box that opens when javascript function insertImageDialog +is called, allows user to select an image and specify attributes for it, then passes +img tag with base64 encoded data url to a callback javascript function. + +Accepts the following options: + +callback - pass the html for the selected img to this javascript function; +if omitted, will only include fields for viewing/uploading image + +url - to redirect to after upload, otherwise just refreshes dialog window + +</%doc> + +<% include('/elements/xmlhttp.html', + 'url' => $fsurl.'misc/xmlhttp-template_image.cgi', + 'subs' => [ 'get_template_image' ], + ) %> + +<DIV ID="insert_image_dialog" title="Template Images"> + +<TABLE BORDER="0" STYLE="width: 100%"><TR><TD> + +<FORM ID="insert_image_form"> + +<% &ntable("#cccccc", 2) %> + + <TR> + <TH>Image</TH> + <TD> + <SELECT ID="insert_image_imgnum" ONCHANGE="insertImageDialog($('#insert_image_imgnum').val())"> + <OPTION VALUE="">(select an image)</OPTION> + </SELECT> + </TD> + </TR> +% if ($opt{'callback'}) { + <TR> + <TH>Width</TH> + <TD><INPUT TYPE="text" SIZE="5" ID="insert_image_width" ONCHANGE="previewInsertImage()"></TD> + </TR> + <TR> + <TH>Height</TH> + <TD><INPUT TYPE="text" SIZE="5" ID="insert_image_height" ONCHANGE="previewInsertImage()"></TD> + </TR> + <TR> + <TH>Align</TH> + <TD> + <SELECT ID="insert_image_float" ONCHANGE="previewInsertImage()"> + <OPTION VALUE="none">inline</OPTION> + <OPTION VALUE="left">left</OPTION> + <OPTION VALUE="right">right</OPTION> + </SELECT> + </TD> + </TR> + <TR> + <TH>Alt Text</TH> + <TD><INPUT TYPE="text" SIZE="20" ID="insert_image_alt" ONCHANGE="previewInsertImage()"></TD> + </TR> + <TR> + <TD COLSPAN="2" ALIGN="center" STYLE="padding-top:6px"> + <INPUT TYPE="button" ID="insert_image_button" VALUE="Insert Image" ONCLICK="insertImage()"> + </TD> + </TR> +% } # if $opt{'callback'} + +</TABLE> + +</FORM> + +% if ($canedit) { + +<P><B><% emt('Upload New Image') %></B></P> + +<% include('/elements/form-file_upload.html', + 'name' => 'TemplateImageUploadForm', + 'id' => 'TemplateImageUploadForm', + 'action' => $fsurl.'misc/process/template_image-upload.cgi', + 'num_files' => 1, + 'fields' => [ 'name', 'agentnum' ], + 'url' => $opt{'url'} || 'javascript:refreshImageList(1)', + ) + %> + + <% &ntable("#cccccc", 2) %> + + <% include( '/elements/tr-input-text.html', + 'field' => 'name', + 'label' => 'Name', + 'required' => 1, + 'id' => 'upload_form_name', + ) + %> + + <% include( '/elements/tr-select-agent.html', + 'label' => "<B>Agent</B>", + 'empty_label' => '(global)', + 'agent_virt' => 1, + 'agent_null_right' => 'Edit global templates', + ) + %> + + <% include( '/elements/tr-file-upload.html', + 'field' => 'file', + 'label' => 'File', + ) + %> + + <TR> + <TD COLSPAN="2" ALIGN="center" STYLE="padding-top:6px"> + <INPUT TYPE = "submit" + NAME = "submitButton" + ID = "submitButton" + VALUE = "Upload image" + > + </TD> + </TR> + +</TABLE> + +</FORM> + +% } #if canedit + +</TD><TD width="100%"> + +<DIV ID="insert_image_preview_box"> + <P><B><% emt('Image Preview') %></B></P> + <SPAN ID="insert_image_loading"><B>(<% emt('Loading image...') %>)</B></SPAN> + <IMG SRC="" ID="insert_image_preview"> +</DIV> + +</TD></TR></TABLE> +</DIV> + +<SCRIPT> + +// initialize & close dialog window, initialize imgobj cache && image list +$( '#insert_image_dialog' ).dialog({ + width: 800, + height: 550, + resizable: true, + autoOpen: false, +}); +var imgobj = new Object; +refreshImageList(0); + +// this is the main func to invoke from links outside this file. +// opens dialog if needed +// updates dialog with passed imgnum +// caches image info through an xmlhttp request if needed +// pass 'upload' as imgnum for upload-only view +function insertImageDialog (imgnum) { + if (imgnum == 'upload') { + $('#insert_image_form').hide(); + $('#insert_image_preview_box').hide(); + imgnum = undefined; + } else { + $('#insert_image_form').show(); + $('#insert_image_preview_box').show(); + } + if (imgnum && !imgobj[imgnum]) { + clearInsertImageDialog(); + $('#insert_image_loading').show(); + $('#insert_image_imgnum').val(imgnum); + get_template_image('imgnum',imgnum, + function (result) { + var images = JSON.parse(result) || []; + for (i = 0; i < images.length; i++) { + imgobj[images[i].imgnum] = images[i]; + } + updateInsertImageDialog(); + } + ); + } else if (imgnum) { + $('#insert_image_imgnum').val(imgnum); + updateInsertImageDialog(); + } else { + clearInsertImageDialog(); + } + if (!$( '#insert_image_dialog' ).dialog( 'isOpen' )) { + $( '#insert_image_dialog' ).dialog( 'open' ); + } +} + +// sets dialog values to a default "Loading..." state, including imgnum +function clearInsertImageDialog () { + $('#insert_image_imgnum').val(''); + $('#insert_image_preview').attr('src',''); + $('#insert_image_loading').hide(); +} + +// updates preview src from cache based on imgnum from form +// then calls previewInsertImage +function updateInsertImageDialog () { + var imgnum = $('#insert_image_imgnum').val(); + $('#insert_image_loading').hide(); + $('#insert_image_preview').attr('src',imgobj[imgnum].src); + previewInsertImage(); +} + +// updates preview width/height/alt/float based on current form values +function previewInsertImage () { + $('#insert_image_preview').css('width',$('#insert_image_width').val()); + $('#insert_image_preview').css('height',$('#insert_image_height').val()); + $('#insert_image_preview').css('float',$('#insert_image_float').val()); + $('#insert_image_preview').attr('alt',$('#insert_image_alt').val()); +} + +// constructs html based on the form contents, +// passes it to callback & closes dialog +function insertImage() { + var imgnum = $('#insert_image_imgnum').val(); + if (!(imgnum && imgobj[imgnum])) { + return ''; + } + var width = $('#insert_image_width').val() || ''; + var height = $('#insert_image_height').val() || ''; + var alt = $('#insert_image_alt').val() || ''; + var float = $('#insert_image_float').val(); + var imgtag = '<IMG SRC="' + imgobj[imgnum].src + '"'; + if (width) { + imgtag += ' WIDTH="' + width + '"'; + } + if (height) { + imgtag += ' HEIGHT="' + height + '"'; + } + if (alt) { + imgtag += ' ALT="' + alt + '"'; + } + if (float) { + imgtag += ' STYLE="float: ' + float + '"'; + } + imgtag += '>'; + <% $opt{'callback'} %>(imgtag); + $( '#insert_image_dialog' ).dialog( 'close' ); +} + +// uses xmlhttp request to initialize image list & refresh it after uploads +function refreshImageList (fromupload) { + get_template_image('no_src','1', + function (result) { + if (fromupload) { + $("#TemplateImageUploadForm")[0].reset(); + } + var images = JSON.parse(result) || []; + var latest; + for (i = 0; i < images.length; i++) { + if ( $("#insert_image_imgnum option[value='" + images[i].imgnum + "']").length == 0 ) { + $("#insert_image_imgnum").append('<OPTION VALUE="'+images[i].imgnum+'">'+images[i].name+'</OPTION>'); + latest = images[i].imgnum; + } + } + if (fromupload) { + location.hash = "insert_image_dialog"; + if (latest) { + // small risk of a race condition with other newly-uploaded images, + // but does no real damage (our image still shows up in the list) + insertImageDialog(latest); + } + } + } + ); +} + +</SCRIPT> + +<%init> +my %opt = @_; + +my $curuser = $FS::CurrentUser::CurrentUser; + +die "access denied" + unless $curuser->access_right([ 'View templates', 'View global templates', + 'Edit templates', 'Edit global templates', ]); + +my $canedit = $curuser->access_right([ 'Edit templates', 'Edit global templates' ]); +</%init> + diff --git a/httemplate/elements/tr-pkg_svc.html b/httemplate/elements/tr-pkg_svc.html index cfef51ce2..de3f95a3a 100644 --- a/httemplate/elements/tr-pkg_svc.html +++ b/httemplate/elements/tr-pkg_svc.html @@ -1,8 +1,13 @@ <TR> <TD CLASS="background" COLSPAN=99> +<SCRIPT> +var provision_hold_td = []; +var provision_hold_input = []; +</SCRIPT> + <% itable('', 4, 1) %><TR><TD VALIGN="top"> -<% $thead %> +<% pkg_svc_thead() %> %foreach my $part_svc ( @part_svc ) { % my $svcpart = $part_svc->svcpart; @@ -78,24 +83,52 @@ <INPUT TYPE="checkbox" NAME="no_bulk_skip<% $svcpart %>" VALUE="Y"<% $bulk_skip =~ /^Y/i ? '' : ' CHECKED' %>> </TD> - <TD ALIGN="center"> - <INPUT TYPE="checkbox" NAME="provision_hold<% $svcpart %>" VALUE="Y"<% $provision_hold =~ /^Y/i ? ' CHECKED' : ''%>> + <TD ALIGN="center" ID="td_provision_hold<% $svcpart %>"> + <INPUT TYPE="checkbox" ID="input_provision_hold<% $svcpart %>" NAME="provision_hold<% $svcpart %>" VALUE="Y"<% $provision_hold =~ /^Y/i ? ' CHECKED' : ''%>> </TD> +<SCRIPT> +provision_hold_td.push(document.getElementById('td_provision_hold<% $svcpart %>')); +provision_hold_input.push(document.getElementById('input_provision_hold<% $svcpart %>')); +</SCRIPT> </TR> % foreach ( 1 .. $columns-1 ) { % if ( $count == int( $_ * scalar(@part_svc) / $columns ) ) { % - </TABLE></TD><TD VALIGN="top"><% $thead %> + </TABLE></TD><TD VALIGN="top"><% pkg_svc_thead() %> % } % } % $count++; % -% } +% } # foreach $part_svc </TR></TABLE></TD></TR></TABLE> +<SCRIPT> +// start_on_hold from edit/part_pkg.cgi +// toggles display of provision_hold checkboxes when that changes +function provision_hold_check () { + var start_on_hold = document.getElementById('start_on_hold'); + if (start_on_hold) { + for (i = 0; i < provision_hold_td.length; i++) { + provision_hold_td[i].style.display = start_on_hold.checked ? '' : 'none'; + } + for (i = 0; i < provision_hold_input.length; i++) { + provision_hold_input[i].disabled = start_on_hold.checked ? false : true; + } + } +} +function provision_hold_init () { + var start_on_hold = document.getElementById('start_on_hold'); + if (start_on_hold) { + start_on_hold.onchange = provision_hold_check; + provision_hold_check(); + } +} +provision_hold_init(); +</SCRIPT> + % if ( scalar(@possible_exports) > 0 || scalar(@mapped_exports) > 0 ) { <TABLE><TR> <TH BGCOLOR="#dcdcdc">Export</TH> @@ -130,15 +163,21 @@ my %opt = @_; my $cgi = $opt{'cgi'}; -my $thead = "\n\n". ntable('#cccccc', 2). - '<TR>'. - '<TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Quan.</FONT></TH>'. - '<TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Primary</FONT></TH>'. - '<TH BGCOLOR="#dcdcdc">Service</TH>'. - '<TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Hide<BR>from<BR>Invoices</FONT></TH>'. - '<TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Bulk<BR>Charge</FONT></TH>'. - '<TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Hold<BR>Until<BR>Provision</FONT></TH>'. - '</TR>'; +my $thead_count = 0; +sub pkg_svc_thead { + $thead_count += 1; + return "\n\n". ntable('#cccccc', 2). + '<TR>'. + '<TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Quan.</FONT></TH>'. + '<TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Primary</FONT></TH>'. + '<TH BGCOLOR="#dcdcdc">Service</TH>'. + '<TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Hide<BR>from<BR>Invoices</FONT></TH>'. + '<TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Bulk<BR>Charge</FONT></TH>'. + '<TH BGCOLOR="#dcdcdc" ID="th_provision_hold' . $thead_count . '"><FONT SIZE=-1>Remove Hold After Provisioning</FONT></TH>'. + '</TR>'. + qq!<SCRIPT>provision_hold_td.push(document.getElementById('th_provision_hold$thead_count'))</SCRIPT>!; +; +} my $part_pkg = $opt{'object'}; my $pkgpart = $part_pkg->pkgpart; diff --git a/httemplate/elements/tr-polygon.html b/httemplate/elements/tr-polygon.html new file mode 100644 index 000000000..6990d3da6 --- /dev/null +++ b/httemplate/elements/tr-polygon.html @@ -0,0 +1,5 @@ +<tr> +<td colspan=2> +<& polygon.html, @_ &> +</td> +</tr> diff --git a/httemplate/elements/tr-select-months.html b/httemplate/elements/tr-select-months.html index 3ff28f99b..b90ce1ed7 100644 --- a/httemplate/elements/tr-select-months.html +++ b/httemplate/elements/tr-select-months.html @@ -7,6 +7,5 @@ $opt{labels} = { '' => '', map { $_ => emt('[quant,_1,month]', $_) } 1 .. $max }; -warn Dumper(\%opt); </%init> <& tr-select.html, %opt &> diff --git a/httemplate/elements/tr-td-label.html b/httemplate/elements/tr-td-label.html index 78690f1fb..f7067221b 100644 --- a/httemplate/elements/tr-td-label.html +++ b/httemplate/elements/tr-td-label.html @@ -9,7 +9,7 @@ Actually <TR> <TH> $label </TH> VALIGN = "<% $opt{'valign'} || 'top' %>" STYLE = "<% $style %>" ID = "<% $opt{label_id} || $opt{id}. '_label0' %>" - ><% $required %><% $opt{label} %></TD> + ><% $required %><% $opt{label} %></TH> <%init> diff --git a/httemplate/graph/cust_bill_pkg.cgi b/httemplate/graph/cust_bill_pkg.cgi index b5486f4af..83eb0e837 100644 --- a/httemplate/graph/cust_bill_pkg.cgi +++ b/httemplate/graph/cust_bill_pkg.cgi @@ -1,5 +1,4 @@ <% include('elements/monthly.html', - #Dumper( 'title' => $title, 'graph_type' => $graph_type, 'items' => \@items, @@ -28,6 +27,7 @@ my $bottom_link = "$link;"; my $use_usage = $cgi->param('use_usage') || 0; my $use_setup = $cgi->param('use_setup') || 0; my $use_discount = $cgi->param('use_discount') || 2; +my $use_taxes = $cgi->param('use_taxes') || 0; my $use_override = $cgi->param('use_override') ? 1 : 0; my $average_per_cust_pkg = $cgi->param('average_per_cust_pkg') ? 1 : 0; @@ -50,6 +50,7 @@ my %charge_labels = ( 'R' => 'recurring', 'U' => 'usage', 'D' => 'discount', + 'T' => 'taxes', ); #XXX or virtual @@ -194,8 +195,14 @@ if ( $use_discount == 1 ) { push @components, 'D'; } # else leave discounts off entirely; never combine them with setup/recur +# could in theory combine with setup/recur/usage, +# but would require reverse engineering the tax calculation +if ( $use_taxes == 1 ) { + push @components, 'T'; +} + # Categorization of line items goes -# Agent -> Referral -> Package class -> Component (setup/recur/usage) +# Agent -> Referral -> Package class -> Component (setup/recur/usage/discount/taxes) # If per-agent totals are enabled, they go under the Agent level. # There aren't any other kinds of subtotals. @@ -255,6 +262,8 @@ foreach my $agent ( $all_agent || $sel_agent || $FS::CurrentUser::CurrentUser->a if ( $component eq 'D' ) { # discounts ignore 'charges' and 'distribute' $row_link = "${p}search/cust_bill_pkg_discount.html?"; + } elsif ( $component eq 'T' ) { + $row_link = "${p}search/cust_bill_pkg.cgi?istax=1;"; } $row_link .= ($all_agent ? '' : "agentnum=$row_agentnum;"). @@ -314,6 +323,8 @@ foreach my $agent ( $all_agent || $sel_agent || $FS::CurrentUser::CurrentUser->a if ( $component eq 'D' ) { # discounts ignore 'charges' and 'distribute' $row_link ="${p}search/cust_bill_pkg_discount.html?"; + } elsif ( $component eq 'T' ) { + $row_link = "${p}search/cust_bill_pkg.cgi?istax=1;"; } $row_link .= ($all_agent ? '' : "agentnum=$row_agentnum;"). @@ -386,9 +397,8 @@ foreach my $agent ( $all_agent || $sel_agent || $FS::CurrentUser::CurrentUser->a $anum++; -} +} # foreach $agent -#use Data::Dumper; if ( $cgi->param('debug') == 1 ) { $FS::Report::Table::DEBUG = 1; } diff --git a/httemplate/graph/elements/report.html b/httemplate/graph/elements/report.html index f1b0d166d..b5d214816 100644 --- a/httemplate/graph/elements/report.html +++ b/httemplate/graph/elements/report.html @@ -11,6 +11,7 @@ Example: #these run parallel to items, and can be given as hashes 'row_labels' => \@row_labels, #required 'colors' => \@colors, #required + 'bgcolors' => \@bgcolors, #optional 'graph_labels' => \@graph_labels, #defaults to row_labels 'links' => \@links, #optional @@ -22,7 +23,7 @@ Example: #optional 'nototal' => 1, - 'graph_type' => 'LinesPoints', + 'graph_type' => 'LinesPoints', #can be 'none' for no graph 'bottom_total' => 1, 'sprintf' => '%u', #sprintf format, overrides default %.2f 'disable_money' => 1, @@ -231,7 +232,8 @@ any delimiter and linked from the elements in @data. % foreach my $row ( @items ) { % #make a style % my $color = shift @{ $opt{'colors'} }; -% push @styles, ".i$i { text-align: right; color: #$color; }"; +% my $bgcolor = $opt{'bgcolors'} ? (shift @{ $opt{'bgcolors'} }) : 'ffffff'; +% push @styles, ".i$i { text-align: right; color: #$color; background: #$bgcolor; }"; % #create the data row % my $links = shift @{$opt{'links'}} || ['']; % my $link_prefix = shift @$links; diff --git a/httemplate/graph/report_cust_bill_pkg.html b/httemplate/graph/report_cust_bill_pkg.html index 1db86e393..96bfdc09a 100644 --- a/httemplate/graph/report_cust_bill_pkg.html +++ b/httemplate/graph/report_cust_bill_pkg.html @@ -165,7 +165,6 @@ window.onload = class_mode_changed; </TR> - <TR> <TH CLASS="background" COLSPAN=2> </TH> </TR> @@ -196,6 +195,12 @@ window.onload = class_mode_changed; 'options' => [ 1, 2 ], 'labels' => { 1 => 'Separate', 2 => 'Do not show' }, &> +<& /elements/tr-select.html, + 'label' => 'Taxes', + 'field' => 'use_taxes', + 'options' => [ 1, 2 ], + 'labels' => { 1 => 'Separate', 2 => 'Do not show' }, +&> <TR> <TD ALIGN="right">Colors</TD> diff --git a/httemplate/misc/batch-cust_pay.html b/httemplate/misc/batch-cust_pay.html index 9f2540cc7..197ade14f 100644 --- a/httemplate/misc/batch-cust_pay.html +++ b/httemplate/misc/batch-cust_pay.html @@ -101,6 +101,10 @@ function select_discount_term(row) { var invoices_for_row = new Object; +var preloading = 0; // the number of preloading threads currently running + +// callback from toggle_application_row: we've received a list of +// the customer's open invoices. store them. function update_invoices(rownum, invoices) { invoices_for_row[rownum] = new Object; // only called before create_application_row @@ -113,6 +117,12 @@ function toggle_application_row(ev, next) { if (!next) next = function(){}; //optional continuation var rownum = this.getAttribute('rownum'); if ( this.checked ) { + // the user has opted to apply the payment to specific invoices. + // - lock the customer + // - fetch the list of open invoices + // - create a row to select an invoice + // - then optionally call "next", with this as the invocant + // and the rownum as argument; we use this to preload rows. var custnum = document.getElementById('custnum'+rownum).value; if (!custnum) return; lock_payment_row(rownum, true); @@ -124,6 +134,9 @@ function toggle_application_row(ev, next) { } ); } else { + // the user has opted not to do that. + // - remove all application rows + // - unlock the customer var row = document.getElementById('row'+rownum); var table_rows = row.parentNode.rows; for (i = row.sectionRowIndex; i < table_rows.count; i++) { @@ -183,6 +196,16 @@ function amount_unapplied(rownum) { var change_app_amount; +// the user has chosen an invoice. the previously chosen invoice is still +// in curr_invoice +// - if there is a value there, put it back on the invoices_for_row list for +// this customer. +// - then _remove_ the newly chosen invoice from that list. +// - find the "owed" element for this application row and set its value to the +// amount owed on that invoice. +// - find the "amount" element for this application row and set its value to +// either "owed" or the remaining payment amount, whichever is less. +// - call change_app_amount() on that element. function choose_app_invnum() { var rownum = this.getAttribute('rownum'); var appnum = this.getAttribute('appnum'); @@ -210,8 +233,10 @@ function choose_app_invnum() { } } +// the invoice selector has gained focus. clear its list of options, and +// replace them with the list of open invoices (from invoices_for_row). +// if there's already a selected invoice, prepend that to the list. function focus_app_invnum() { -% # invoice numbers just display as invoice numbers var rownum = this.getAttribute('rownum'); var add_opt = function(obj, value, label) { var o = document.createElement('OPTION'); @@ -233,14 +258,15 @@ function focus_app_invnum() { } } +// an application amount has been changed. if there's any unapplied payment +// amount, and any remaining invoices_for_row, add a blank application row. +// (but don't do this while preloading; it will unconditionally add enough +// rows to show all the attempted applications) function change_app_amount() { var rownum = this.getAttribute('rownum'); var appnum = this.getAttribute('appnum'); -%# maybe some kind of warning if amount_unapplied < 0? -%# only spawn a new application row if there are open invoices left, -%# and this is the highest-numbered application row for the customer, -%# and the sum of the applied amounts is < the amount of the payment, - if ( Object.keys(invoices_for_row[rownum]).length > 0 + if ( preloading == 0 + && Object.keys(invoices_for_row[rownum]).length > 0 && !document.getElementById( 'row'+rownum+'.'+(parseInt(appnum) + 1) ) && amount_unapplied(rownum) > 0 ) { @@ -248,6 +274,9 @@ function change_app_amount() { } } +// we're creating a payment application row. +// create the following elements: <TR>, <TD>s, "Apply to invoice" caption, +// invnum selector, "owed" display, amount input box, delete button. function create_application_row(rownum, appnum) { var payment_row = document.getElementById('row'+rownum); var tr_app = document.createElement('TR'); @@ -341,29 +370,45 @@ function preload() { var enable = document.getElementById('enable_app'+rownum); enable.checked = true; var preload_row = function(r) {//continuation from toggle_application_row - for (appnum=0; appnum < row_obj[r].length; appnum++) { - this_app = row_obj[r][appnum]; - var x = r + '.' + appnum; - //set invnum - var select_invnum = document.getElementById('invnum'+x); - focus_app_invnum.call(select_invnum); - for (i=0; i<select_invnum.options.length; i++) { - if (select_invnum.options[i].value == this_app.invnum) { - select_invnum.selectedIndex = i; + + preloading++; + + try { + for (appnum=0; appnum < row_obj[r].length; appnum++) { + this_app = row_obj[r][appnum]; + var x = r + '.' + appnum; + //set invnum + var select_invnum = document.getElementById('invnum'+x); + focus_app_invnum.call(select_invnum); + for (i=0; i<select_invnum.options.length; i++) { + if (select_invnum.options[i].value == this_app.invnum) { + select_invnum.selectedIndex = i; + } } - } - choose_app_invnum.call(select_invnum); - //set amount - var input_amount = document.getElementById('amount'+x); - input_amount.value = this_app.amount; - - //set error - var span_error = document.getElementById('error'+x); - span_error.innerHTML = this_app.error; - change_app_amount.call(input_amount); //creates next row - } //for appnum + choose_app_invnum.call(select_invnum); + //set amount + var input_amount = document.getElementById('amount'+x); + input_amount.value = this_app.amount; + + //set error + var span_error = document.getElementById('error'+x); + span_error.innerHTML = this_app.error; + + // create another row (unconditionally) + create_application_row(r, appnum + 1); + + } //for appnum + + } finally { + preloading--; + } + }; //preload_row function + + // enable application rows on the selected customer. this creates + // the first row, then kicks off preloading. toggle_application_row.call(enable, null, preload_row); + } // if (row_obj[rownum].length } //for rownum } diff --git a/httemplate/misc/change_pkg.cgi b/httemplate/misc/change_pkg.cgi index e74747e82..b562d24cd 100755 --- a/httemplate/misc/change_pkg.cgi +++ b/httemplate/misc/change_pkg.cgi @@ -19,13 +19,13 @@ <& /elements/tr-select-cust-part_pkg.html, 'pre_label' => emt('New'), - 'curr_value' => scalar($cgi->param('pkgpart')), + 'curr_value' => scalar($cgi->param('pkgpart')) || $cust_pkg->pkgpart, 'classnum' => $part_pkg->classnum, 'cust_main' => $cust_main, &> <& /elements/tr-input-pkg-quantity.html, - 'curr_value' => $cust_pkg->quantity + 'curr_value' => scalar($cgi->param('quantity')) || $cust_pkg->quantity &> % if ($use_contract_end) { @@ -39,6 +39,11 @@ </TABLE> <BR> +<% include('/misc/cust_pkg_usageprice.html', + 'pkgpart' => (scalar($cgi->param('pkgpart')) || $cust_pkg->pkgpart), + 'pkgnum' => ($cust_pkg->change_to_pkgnum || $pkgnum), + ) %> +<BR> <FONT CLASS="fsinnerbox-title"><% mt('Change') |h %></FONT> <% ntable('#cccccc') %> @@ -49,8 +54,16 @@ document.getElementById('start_date_text').disabled = !enable; document.getElementById('start_date_button').style.display = (enable ? '' : 'none'); - document.getElementById('start_date_button_disabled').style.display = - (enable ? 'none' : ''); + if (document.getElementById('start_date_button_disabled')) { // does this ever exist anymore? + document.getElementById('start_date_button_disabled').style.display = + (enable ? 'none' : ''); + } + if (enable) { + usageprice_disable(1); + } else { + var form = document.OrderPkgForm; + usageprice_disable(0,form.pkgpart.options[form.pkgpart.selectedIndex].value); + } } <&| /elements/onload.js &> delay_changed(); @@ -96,7 +109,7 @@ TYPE = "button" VALUE = "<% mt("Change package") |h %>" onClick = "this.disabled=true; standardize_new_location();" - <% scalar($cgi->param('pkgpart')) ? '' : 'DISABLED' %> + <% #scalar($cgi->param('pkgpart')) ? '' : 'DISABLED' %> > </FORM> diff --git a/httemplate/misc/cust_pkg_usageprice.html b/httemplate/misc/cust_pkg_usageprice.html new file mode 100644 index 000000000..f2e0f57e6 --- /dev/null +++ b/httemplate/misc/cust_pkg_usageprice.html @@ -0,0 +1,121 @@ +<%doc> +Sets up the xmlhttp, javascript and initial (empty) table for selecting cust_pkg_usageprice. +Available values are based on pkgpart, and can be updated when changing pkgpart +by passing the new pkgpart to the following javascript: + + usageprice_pkg_changed( pkgpart, pkgnum ) + +The pkgnum input is optional, and will be used to set initial selected values. + +If pkgpart is passed as an option to this element, will run usageprice_pkg_changed +once to initialize table; pkgnum can be passed as an option along with this. + +You can disable usageprice selection temporarily (remove the fields from the form) +with the javascript usageprice_disable(1), and restore it with usageprice_disable(0,pkgnum). +While disabled, calling usageprice_pkg_changed will have no effect. +</%doc> + +<& /elements/xmlhttp.html, + 'url' => $p.'misc/xmlhttp-part_pkg_usageprice.html', + 'subs' => [ 'get_part_pkg_usageprice' ], +&> + +<FONT CLASS = "fsinnerbox-title" + ID = "cust_pkg_usageprice_title" + STYLE = "display:none" +><% mt('Usage add-ons') |h %></FONT> +<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 ID="cust_pkg_usageprice_table"> + +</TABLE> + +<SCRIPT> + +var usagepriceCache = {}; +var usagepriceDisabled = 0; + +function usageprice_disable (disabled, pkgpart) { + if (disabled) { + usageprice_pkg_changed(0); + usagepriceDisabled = 1; + } else { + usagepriceDisabled = 0; + usageprice_pkg_changed(pkgpart); + } +} + +// main function to invoke when pkgpart changes +function usageprice_pkg_changed (pkgpart, pkgnum) { + if (usagepriceDisabled) return; + clear_part_pkg_usageprice(); + + if (pkgpart) { + if (usagepriceCache[pkgpart]) { + update_part_pkg_usageprice(pkgpart); + } else { + get_part_pkg_usageprice( pkgpart || 0, pkgnum || 0, download_part_pkg_usageprice ); + } + } +} + +// removes table rows & hides table title +function clear_part_pkg_usageprice () { + var table = document.getElementById('cust_pkg_usageprice_table'); + for ( var r = table.rows.length - 1; r >= 0; r-- ) { + table.deleteRow(r); + } + document.getElementById('cust_pkg_usageprice_title').style.display = 'none'; +} + +// catches response from xmlhttp request, updates cache & calls update function +function download_part_pkg_usageprice (part_pkg_usageprice) { + var usagepriceArray = JSON.parse(part_pkg_usageprice); + var pkgpart = usagepriceArray[0]; + usagepriceCache[pkgpart] = usagepriceArray; + update_part_pkg_usageprice(pkgpart); +} + +// updates from cache +function update_part_pkg_usageprice (pkgpart) { + if (usagepriceDisabled) return; + clear_part_pkg_usageprice(); + + var usagepriceArray = usagepriceCache[pkgpart]; + var table = document.getElementById('cust_pkg_usageprice_table'); + + // add the new usage price rows + var rownum = 0; + for ( var s = 1; s < usagepriceArray.length; s=s+2 ) { + var html = usagepriceArray[s]; + var javascript = usagepriceArray[s+1]; + + var row = table.insertRow(rownum++); + + var widget_cell = document.createElement('TD'); + widget_cell.style.paddingTop = "3px"; + widget_cell.colSpan = "2"; + widget_cell.innerHTML = html; + row.appendChild(widget_cell); + + } + + if ( rownum > 0 ) { + document.getElementById('cust_pkg_usageprice_title').style.display = ''; + } else { + document.getElementById('cust_pkg_usageprice_title').style.display = 'none'; + } + +} + +% if ($opt{'pkgpart'}) { +<&| /elements/onload.js &> +usageprice_pkg_changed(<% $opt{'pkgpart'} %>, <% $opt{'pkgnum'} %>); +</&> +% } + +</SCRIPT> + +<%init> +my %opt = @_; +</%init> + + diff --git a/httemplate/misc/delete-cust_credit.cgi b/httemplate/misc/delete-cust_credit.cgi deleted file mode 100755 index 03eb47299..000000000 --- a/httemplate/misc/delete-cust_credit.cgi +++ /dev/null @@ -1,21 +0,0 @@ -% if ( $error ) { -% errorpage($error); -% } else { -<% $cgi->redirect($p. "view/cust_main.cgi?". $custnum) %> -% } -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Delete credit'); - -#untaint crednum -my($query) = $cgi->keywords; -$query =~ /^(\d+)$/ || die "Illegal crednum"; -my $crednum = $1; - -my $cust_credit = qsearchs('cust_credit',{'crednum'=>$crednum}); -my $custnum = $cust_credit->custnum; - -my $error = $cust_credit->delete; - -</%init> diff --git a/httemplate/misc/delete-cust_pay.cgi b/httemplate/misc/delete-cust_pay.cgi deleted file mode 100755 index 38e7e4ba1..000000000 --- a/httemplate/misc/delete-cust_pay.cgi +++ /dev/null @@ -1,21 +0,0 @@ -% if ( $error ) { -% errorpage($error); -% } else { -<% $cgi->redirect($p. "view/cust_main.cgi?". $custnum) %> -% } -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Delete payment'); - -#untaint paynum -my($query) = $cgi->keywords; -$query =~ /^(\d+)$/ || die "Illegal paynum"; -my $paynum = $1; - -my $cust_pay = qsearchs('cust_pay',{'paynum'=>$paynum}); -my $custnum = $cust_pay->custnum; - -my $error = $cust_pay->delete; - -</%init> diff --git a/httemplate/misc/email-customers.html b/httemplate/misc/email-customers.html index 47e6a5b48..8e2863455 100644 --- a/httemplate/misc/email-customers.html +++ b/httemplate/misc/email-customers.html @@ -1,10 +1,11 @@ <%doc> -Allows emailing one or more customers, based on a search for customers. Search can -be specified either through cust_main fields as cgi params, or through a base64 encoded -frozen hash in the 'search' cgi param. Form allows selecting an existing msg_template, -or creating a custom message, and shows a preview of the message before sending. -If linked to as a popup, include the cgi parameter 'popup' for proper header handling. +Allows emailing one or more customers, based on a search for customers. +Search can be specified either through cust_main fields as cgi params, or +through a base64 encoded frozen hash in the 'search' cgi param. Form allows +selecting an existing msg_template, or creating a custom message, and shows a +preview of the message before sending. If linked to as a popup, include the +cgi parameter 'popup' for proper header handling. This may also be used as an element in other pages, enabling you to provide an alternate initial form while using this for search freezing/thawing and @@ -21,12 +22,13 @@ title - the title of the page no_search_fields - arrayref of additional fields that are not search parameters alternate_form - subroutine that returns alternate html for the initial form, -replaces msgnum/from/subject/html_body/action inputs and submit button, -not used if an action is specified +replaces msgnum/from/subject/body/action inputs and submit button, not +used if an action is specified -post_search_hook - sub hook for additional processing after search has been processed from cgi, -gets passed options 'conf' and 'search' (a reference to the unfrozen %search hash), -should be used to set msgnum or from/subject/html_body cgi params +post_search_hook - sub hook for additional processing after search has been +processed from cgi, gets passed options 'conf' and 'search' (a reference to +the unfrozen %search hash), should be used to set msgnum or +from/subject/body cgi params </%doc> % if ($popup) { @@ -35,8 +37,9 @@ should be used to set msgnum or from/subject/html_body cgi params <& /elements/header.html, $title &> % } +<& /elements/error.html &> -<FORM NAME="OneTrueForm" ACTION="<% $form_action %>" METHOD="GET"> +<FORM NAME="OneTrueForm" ACTION="<% $form_action %>" METHOD="POST"> <INPUT TYPE="hidden" NAME="table" VALUE="<% $table %>"> %# Mixing search params with from address, subject, etc. required special-case %# handling of those, risked name conflicts, and caused massive problems with @@ -46,48 +49,40 @@ should be used to set msgnum or from/subject/html_body cgi params <INPUT TYPE="hidden" NAME="popup" VALUE="<% $popup %>"> <INPUT TYPE="hidden" NAME="url" VALUE="<% $url | h %>"> -% if ( $cgi->param('action') eq 'send' ) { - - <FONT SIZE="+2">Sending notice</FONT> +% if ( $cgi->param('preview') ) { +% # preview mode: at this point we have a msg_template (either "real" or +% # draft) and $html_body and $text_body contain the preview message. +% # give the user a chance to back out (by going back to edit mode). + <FONT SIZE="+2">Preview notice</FONT> <& /elements/progress-init.html, 'OneTrueForm', - [ qw( search table from subject html_body text_body msgnum ) ], + [ qw( search table msgnum ) ], $process_url, $pdest, &> -% } elsif ( $cgi->param('action') eq 'preview' ) { - - <FONT SIZE="+2">Preview notice</FONT> - -% } - -% if ( $cgi->param('action') ) { - <TABLE CLASS="fsinnerbox"> - <INPUT TYPE="hidden" NAME="msgnum" VALUE="<% scalar($cgi->param('msgnum')) %>"> - -% if ( $msg_template ) { - <& /elements/tr-fixed.html, - 'label' => 'Template:', - 'value' => $msg_template->msgname, - &> -% } + <INPUT TYPE="hidden" NAME="msgnum" VALUE="<% $msg_template->msgnum %>"> +% # kludge these through hidden inputs because they're not really part +% # of the template, but should be sticky during draft editing + <INPUT TYPE="hidden" NAME="from_name" VALUE="<% $cgi->param('from_name') %>"> + <INPUT TYPE="hidden" NAME="from_addr" VALUE="<% $cgi->param('from_addr') %>"> + +% if ( !$msg_template->disabled ) { + <& /elements/tr-td-label.html, 'label' => 'Template:' &> + <td><% $msg_template->msgname |h %></td> + </tr> +% } - <& /elements/tr-fixed.html, - 'field' => 'from', - 'label' => 'From:', - 'value' => $from, - &> + <& /elements/tr-td-label.html, 'label' => 'From:' &> + <td><% $from |h %></td> + </tr> - <& /elements/tr-fixed.html, - 'field' => 'subject', - 'label' => 'Subject:', - 'value' => $subject, - &> + <& /elements/tr-td-label.html, 'label' => 'Subject:' &> + <td><% $subject |h %></td> + </tr> - <INPUT TYPE="hidden" NAME="html_body" VALUE="<% $html_body |h %>"> <TR><TD COLSPAN=2> </TD></TR> <TR> <TH ALIGN="right" VALIGN="top">Message (HTML display): </TD> @@ -99,7 +94,6 @@ should be used to set msgnum or from/subject/html_body cgi params % $html_body % ) % ); - <INPUT TYPE="hidden" NAME="text_body" VALUE="<% $text_body |h %>"> <TR><TD COLSPAN=2> </TD></TR> <TR> <TH ALIGN="right" VALIGN="top">Message (Text display): </TD> @@ -112,38 +106,37 @@ should be used to set msgnum or from/subject/html_body cgi params </TABLE> -% if ( $cgi->param('action') eq 'preview' ) { + <SCRIPT> - <SCRIPT> - - function showtext() { - $('#email-message-text-view').css('display','none'); - $('#email-message-text-hide').css('display',''); - $('#email-message-text').slideDown(); - } + function showtext() { + $('#email-message-text-view').css('display','none'); + $('#email-message-text-hide').css('display',''); + $('#email-message-text').slideDown(); + } - function hidetext() { - $('#email-message-text-view').css('display',''); - $('#email-message-text-hide').css('display','none'); - $('#email-message-text').slideUp(); - } + function hidetext() { + $('#email-message-text-view').css('display',''); + $('#email-message-text-hide').css('display','none'); + $('#email-message-text').slideUp(); + } - function areyousure(href) { - return confirm("Send this notice to <% ($num_cust > 1) ? "$num_cust customers" : '1 customer' %> ?"); + function areyousure(href) { + if (confirm("Send this notice to <% ($num_cust > 1) ? "$num_cust customers" : '1 customer' %> ?")) { + process(); } - </SCRIPT> + } + </SCRIPT> - <BR> - <INPUT TYPE="hidden" NAME="action" VALUE="send"> - <INPUT TYPE="submit" VALUE="Send notice" onClick="return areyousure()"> - -% } + <BR> + <INPUT TYPE="submit" NAME="edit" VALUE="Edit"> + <INPUT TYPE="button" VALUE="Send notice" onClick="areyousure()"> % } elsif ($opt{'alternate_form'}) { <% &{$opt{'alternate_form'}}() %> % } else { +% # Edit mode. <SCRIPT TYPE="text/javascript"> function toggle(obj) { @@ -151,11 +144,20 @@ function toggle(obj) { } </SCRIPT> +% if ( $msg_template and $msg_template->disabled ) { +% # if we've already established a draft template, don't let msgnum be changed + <& /elements/hidden.html, + field => 'msgnum', + curr_value => ($cgi->param('msgnum') || ''), + &> +% } else { Template: <& /elements/select-msg_template.html, - onchange => 'toggle(this)', + onchange => 'toggle(this)', + curr_value => ($cgi->param('msgnum') || ''), &> <BR> +% } <TABLE BGCOLOR="#cccccc" CELLSPACING=0 WIDTH="100%" id="table_no_template"> <& /elements/tr-td-label.html, 'label' => 'From:' &> <TD><& /elements/input-text.html, @@ -163,46 +165,41 @@ Template: 'value' => $conf->config('invoice_from_name', $agent_virt_agentnum) || $conf->config('company_name', $agent_virt_agentnum), #? 'size' => 20, + 'curr_value' => $cgi->param('from_name'), &> <\ <& /elements/input-text.html, 'field' => 'from_addr', 'type' => 'email', # HTML5, woot 'value' => $conf->config('invoice_from', $agent_virt_agentnum), 'size' => 20, + 'curr_value' => $cgi->param('from_addr'), &>></TD> <& /elements/tr-input-text.html, 'field' => 'subject', 'label' => 'Subject:', 'size' => 50, + 'curr_value' => $subject, &> <TR> <TD ALIGN="right" VALIGN="top" STYLE="padding-top:3px">Message: </TD> <TD><& /elements/htmlarea.html, - 'field' => 'html_body', + 'field' => 'body', 'width' => 763, + 'curr_value' => $body, &> </TD> </TR> </TABLE> -%#Substitution vars: - - <INPUT TYPE="hidden" NAME="action" VALUE="preview"> - <INPUT TYPE="submit" VALUE="Preview notice"> + <INPUT TYPE="submit" NAME="preview" VALUE="Preview notice"> % } #end not action or alternate form </FORM> -% if ( $cgi->param('action') eq 'send' ) { - <SCRIPT TYPE="text/javascript"> - process(); - </SCRIPT> -% } - <& /elements/footer.html &> <%init> @@ -215,7 +212,7 @@ die "access denied" unless $FS::CurrentUser::CurrentUser->access_right($opt{'acl'}); my $conf = FS::Conf->new; -my @no_search_fields = qw( action table from subject html_body text_body popup url ); +my @no_search_fields = qw( table from subject html_body text_body popup url ); my $form_action = $opt{'form_action'} || 'email-customers.html'; my $process_url = $opt{'process_url'} || 'process/email-customers.html'; @@ -259,12 +256,26 @@ if ( $cgi->param('from') ) { $from = $cgi->param('from_addr'); } -my $subject = $cgi->param('subject') || ''; -my $html_body = $cgi->param('html_body') || ''; - my $msg_template = ''; +if ( $cgi->param('msgnum') =~ /^(\d+)$/ ) { + $msg_template = FS::msg_template->by_key($1) + or die "template not found: ".$cgi->param('msgnum'); +} -if ( $cgi->param('action') eq 'preview' ) { +my $subject = $cgi->param('subject'); +my $body = $cgi->param('body'); +my ($html_body, $text_body); + +if ( !$cgi->param('preview') ) { + + # edit mode: initialize the fields from the saved draft, if there is one + if ( $msg_template and $msg_template->disabled eq 'D' ) { + my $content = $msg_template->content(''); # no localization on these yet + $subject ||= $content->subject; + $body ||= $content->body; + } + +} else { my $sql_query = "FS::$table"->search(\%search); my $count_query = delete($sql_query->{'count_query'}); @@ -275,10 +286,40 @@ if ( $cgi->param('action') eq 'preview' ) { my $count_arrayref = $count_sth->fetchrow_arrayref; $num_cust = $count_arrayref->[0]; - if ( $cgi->param('msgnum') ) { - $msg_template = qsearchs('msg_template', - { msgnum => scalar($cgi->param('msgnum')) } ) - or die "template not found: ".$cgi->param('msgnum'); + if ( !$msg_template or $msg_template->disabled eq 'D' ) { + # then this is a one-off template; edit it in place + my $subject = $cgi->param('subject') || ''; + my $body = $cgi->param('body') || ''; + + # create a draft template + $msg_template ||= FS::msg_template->new({ + msgclass => 'email', + disabled => 'D', + }); + # anyone have a better idea for msgname? + $msg_template->set('msgname' => "Notice " . DateTime->now->iso8601); + $msg_template->set('from_addr' => $from); + my %content = ( + subject => $subject, + body => $body, + ); + my $error; + if ( $msg_template->msgnum ) { + $error = $msg_template->replace(%content); + } else { + $error = $msg_template->insert(%content); + } + + if ( $error ) { + $cgi->param('error', $error); + $cgi->delete('preview'); # don't go on to preview stage yet + undef $msg_template; + } + } + # unless creating the msg_template failed, we now have one, so construct a + # preview message from the first customer/whatever in the search results + + if ( $msg_template ) { $sql_query->{'extra_sql'} .= ' LIMIT 1'; $sql_query->{'select'} = "$table.*"; $sql_query->{'order_by'} = ''; @@ -288,8 +329,13 @@ if ( $cgi->param('action') eq 'preview' ) { 'cust_main' => $cust, 'object' => $object, ); - my %message = $msg_template->prepare(%msgopts); - ($from, $subject, $html_body) = @message{'from', 'subject', 'html_body'}; + + my $cust_msg = $msg_template->prepare(%msgopts); + $from = $cust_msg->env_from; + $html_body = $cust_msg->preview; + if ( $cust_msg->header =~ /^subject: (.*)/mi ) { + $subject = $1; + } } } diff --git a/httemplate/misc/order_pkg.html b/httemplate/misc/order_pkg.html index 799165fe0..cb2bd4832 100644 --- a/httemplate/misc/order_pkg.html +++ b/httemplate/misc/order_pkg.html @@ -5,11 +5,6 @@ } &> -<& /elements/xmlhttp.html, - 'url' => $p.'misc/xmlhttp-part_pkg_usageprice.html', - 'subs' => [ 'get_part_pkg_usageprice' ], -&> - <& /elements/init_calendar.html &> <SCRIPT TYPE="text/javascript" SRC="../elements/order_pkg.js"></SCRIPT> @@ -121,19 +116,9 @@ </TABLE><BR> -%#so: -%# - hide until you selecdt a pacakge with add-ons -%# -lookup and display the available add-ons when -%# -add them to the (recur if there is one, otherwise setup) price and display magically like processing fees do on edit/cust_pay.cgi - -%# better label? -<FONT CLASS = "fsinnerbox-title" - ID = "cust_pkg_usageprice_title" - STYLE = "display:none" -><% mt('Usage add-ons') |h %></FONT> -<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 ID="cust_pkg_usageprice_table"> - -</TABLE> +<% include('/misc/cust_pkg_usageprice.html', + 'pkgpart' => $pkgpart + ) %> <BR> % my $discount_cust_pkg = $curuser->access_right('Discount customer package'); diff --git a/httemplate/misc/process/deploy_zone-block_lookup.cgi b/httemplate/misc/process/deploy_zone-block_lookup.cgi new file mode 100644 index 000000000..8f4eac7e9 --- /dev/null +++ b/httemplate/misc/process/deploy_zone-block_lookup.cgi @@ -0,0 +1,13 @@ +<% $server->process %> +<%init> +my $curuser = $FS::CurrentUser::CurrentUser; +die "access denied" + unless $curuser->access_right([ + 'Edit FCC report configuration', + 'Edit FCC report configuration for all agents', + ]); + +my $server = FS::UI::Web::JSRPC->new( + 'FS::deploy_zone::process_block_lookup', $cgi +); +</%init> diff --git a/httemplate/misc/process/payment.cgi b/httemplate/misc/process/payment.cgi index 27b818660..efba9ed9a 100644 --- a/httemplate/misc/process/payment.cgi +++ b/httemplate/misc/process/payment.cgi @@ -74,11 +74,13 @@ $cgi->param('balance') =~ /^\s*(\-?\s*\d*(\.\d\d)?)\s*$/ my $balance = $1; my $payinfo; +my $paymask; # override only used by loaded cust payinfo, only implemented for realtime processing my $paycvv = ''; if ( $payby eq 'CHEK' ) { if ($cgi->param('payinfo1') =~ /xx/i || $cgi->param('payinfo2') =~ /xx/i ) { $payinfo = $cust_main->payinfo; + $paymask = $cust_main->paymask; } else { $cgi->param('payinfo1') =~ /^(\d+)$/ or errorpage("Illegal account number ". $cgi->param('payinfo1')); @@ -99,6 +101,7 @@ if ( $payby eq 'CHEK' ) { $payinfo = $cgi->param('payinfo'); if ($payinfo eq $cust_main->paymask) { $payinfo = $cust_main->payinfo; + $paymask = $cust_main->paymask; } $payinfo =~ s/\D//g; $payinfo =~ /^(\d{13,16}|\d{8,9})$/ @@ -135,6 +138,46 @@ $cgi->param('discount_term') =~ /^(\d*)$/ or errorpage("illegal discount_term"); my $discount_term = $1; +# save first, for proper tokenization later +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->payinfo($payinfo); # sets default paymask, but not if it's already tokenized + $new->paymask($paymask) if $paymask; # in case it's been tokenized, override with loaded paymask + $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 + if ( $payby eq 'CARD' && + grep { $_ eq cardtype($payinfo) } $conf->config('cvv-save') ) { + $new->set( 'paycvv' => $paycvv ); + } else { + $new->set( 'paycvv' => ''); + } + + if ( $payby eq 'CARD' ) { + my $bill_location = FS::cust_location->new; + $bill_location->set( $_ => $cgi->param($_) ) + foreach @{$payby2fields{$payby}}; + $new->set('bill_location' => $bill_location); + # will do nothing if the fields are all unchanged + } else { + $new->set( $_ => $cgi->param($_) ) foreach @{$payby2fields{$payby}}; + } + + my $error = $new->replace($cust_main); + errorpage("error saving info, payment not processed: $error") + if $error; + $cust_main = $new; +} + my $error = ''; my $paynum = ''; if ( $cgi->param('batch') ) { @@ -160,6 +203,7 @@ if ( $cgi->param('batch') ) { 'manual' => 1, 'balance' => $balance, 'payinfo' => $payinfo, + 'paymask' => $paymask, 'paydate' => "$year-$month-01", 'payname' => $payname, 'payunique' => $payunique, @@ -190,44 +234,6 @@ if ( $cgi->param('batch') ) { } -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' => $cust_main->card_token || $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 - if ( $payby eq 'CARD' && - grep { $_ eq cardtype($payinfo) } $conf->config('cvv-save') ) { - $new->set( 'paycvv' => $paycvv ); - } else { - $new->set( 'paycvv' => ''); - } - - if ( $payby eq 'CARD' ) { - my $bill_location = FS::cust_location->new; - $bill_location->set( $_ => $cgi->param($_) ) - foreach @{$payby2fields{$payby}}; - $new->set('bill_location' => $bill_location); - # will do nothing if the fields are all unchanged - } else { - $new->set( $_ => $cgi->param($_) ) foreach @{$payby2fields{$payby}}; - } - - my $error = $new->replace($cust_main); - errorpage("payment processed successfully, but error saving info: $error") - if $error; - $cust_main = $new; -} - #success! </%init> diff --git a/httemplate/misc/process/send-report.html b/httemplate/misc/process/send-report.html new file mode 100644 index 000000000..3bceebc0c --- /dev/null +++ b/httemplate/misc/process/send-report.html @@ -0,0 +1,7 @@ +<%init> +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('Send reports to customers'); + +my $server = FS::UI::Web::JSRPC->new('FS::report_batch::process_send_report', $cgi); +</%init> +<% $server->process %> diff --git a/httemplate/misc/process/template_image-delete.cgi b/httemplate/misc/process/template_image-delete.cgi new file mode 100644 index 000000000..58c3f2c68 --- /dev/null +++ b/httemplate/misc/process/template_image-delete.cgi @@ -0,0 +1,28 @@ +<% $server->process %> + +<%init> + +my $curuser = $FS::CurrentUser::CurrentUser; + +# make sure user can generally edit +die "access denied" + unless $curuser->access_right([ 'Edit templates', 'Edit global templates' ]); + +# make sure user can edit this particular image +my %arg = $cgi->param('arg'); +my $imgnum = $arg{'imgnum'}; +die "bad imgnum" unless $imgnum =~ /^\d+$/; +die "access denied" unless qsearchs({ + 'table' => 'template_image', + 'select' => 'imgnum', + 'hashref' => { 'imgnum' => $imgnum }, + 'extra_sql' => ' AND ' . + $curuser->agentnums_sql( + 'null_right' => ['Edit global templates'] + ), + }); + +my $server = + new FS::UI::Web::JSRPC 'FS::template_image::process_image_delete', $cgi; + +</%init> diff --git a/httemplate/misc/process/template_image-upload.cgi b/httemplate/misc/process/template_image-upload.cgi new file mode 100644 index 000000000..c3c905981 --- /dev/null +++ b/httemplate/misc/process/template_image-upload.cgi @@ -0,0 +1,26 @@ +<% $server->process %> + +<%init> + +my $curuser = $FS::CurrentUser::CurrentUser; + +die "access denied" + unless $curuser->access_right([ 'Edit templates', 'Edit global templates' ]); + +my %arg = $cgi->param('arg'); +my $agentnum = $arg{'agentnum'}; + +if (!$agentnum) { + die "access denied" + unless $curuser->access_right([ 'Edit global templates' ]); +} else { + die "bad agentnum" + unless $agentnum =~ /^\d+$/; + die "access denied" + unless $curuser->agentnum($agentnum); +} + +my $server = + new FS::UI::Web::JSRPC 'FS::template_image::process_image_upload', $cgi; + +</%init> diff --git a/httemplate/misc/process/void-cust_bill.html b/httemplate/misc/process/void-cust_bill.html index accee27fd..7773b0ba9 100755 --- a/httemplate/misc/process/void-cust_bill.html +++ b/httemplate/misc/process/void-cust_bill.html @@ -21,6 +21,6 @@ my $cust_bill = qsearchs('cust_bill',{'invnum'=>$invnum}); my $custnum = $cust_bill->custnum; -my $error = $cust_bill->void( $cgi->param('reason') ); +my $error = $cust_bill->void( scalar($cgi->param('reason')) ); </%init> diff --git a/httemplate/misc/send-report.html b/httemplate/misc/send-report.html new file mode 100644 index 000000000..557767a57 --- /dev/null +++ b/httemplate/misc/send-report.html @@ -0,0 +1,166 @@ +<%doc> + +Parameters: + +- reportname: the report name (per FS::report_batch) + +</%doc> +<& /elements/header-popup.html, { title => $report_info->{name} } &> +<script type="text/javascript"> + +$().ready(function() { + var agent_info = <% encode_json(\%agent) %>; + + $('#agentnum').on('change', function() { + var agentnum = this.value; + if ( agent_info[agentnum] ) { + $('#msgnum').prop('value', agent_info[agentnum]['msgnum']); + $('#beginning_text').prop('value', agent_info[agentnum]['beginning']); + $('#ending_text').prop('value', agent_info[agentnum]['ending']); + } else { + $('#msgnum').prop('value', ''); + $('#beginning_text').prop('value', ''); + $('#ending_text').prop('value', ''); + } + }); + + $('#agentnum').trigger('change'); + +}); + +</script> +<FORM NAME="OneTrueForm" ACTION="process/send-report.html" METHOD="POST"> + +<table class="inv"> + <input type="hidden" name="reportname" value="<% $cgi->param('reportname') |h %>"> + + <& /elements/tr-select-agent.html &> + + <& /elements/tr-td-label.html, label => emt('Message template') &> + <TD> + <& /elements/select-msg_template.html, field => 'msgnum' &> + </TD> + </TR> + + <& /elements/tr-input-beginning_ending.html &> + + <& /elements/progress-init.html, + 'OneTrueForm', + [ qw( reportname msgnum agentnum beginning ending ) ], + $p.'misc/process/send-report.html', + { message => 'Reports sent', + url => $cgi->referer } + &> + +</table> + +<INPUT TYPE="button" onclick="process()" VALUE="<% emt('Send reports') %>" /> +</FORM> + +<style> +table.grid { + border-collapse: collapse; + margin-top: 1ex; + margin-left: auto; + margin-right: auto; +} +.grid caption { + font-weight: bold; + margin-bottom: 0.5ex; +} +.grid th,td { + padding-left: 3px; + padding-right: 3px; + padding-bottom: 2px; + border: none; + empty-cells: show; +} +.grid th { + border-bottom: 1px solid #999999; + font-size: 90%; + vertical-align: bottom; +} +</style> + +% if ( @report_history ) { +<hr> +<table class="grid"> +<caption><% emt('Report history') %></caption> +<thead> + <th>Agent</th> + <th>Sent on</th> + <th colspan=2>Date range</th> + <th>User</th> +</thead> +<tbody> +% my $row = 0; +% foreach my $report (@report_history) { +% my $agent = ($report->agentnum ? +% $report->agent->agent : 'All agents'); + <tr class="row<% $row % 2 %>"> + <td><% $agent %></td> + <td><% time2str($date_format, $report->send_date) %></td> + <td><% time2str($date_format, $report->sdate) %></td> + <td><% time2str($date_format, $report->edate) %></td> + <td><% $report->access_user->username %></td> + </tr> +% $row++; +% } +</tbody> +</table> +% } + +<& /elements/footer.html &> + +<%init> + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('Send reports to customers'); + +$cgi->param('reportname') =~ /^(\w+)$/ + or die "bad reportname"; +my $reportname = $1; +my $report_info = $FS::report_batch::sendable_reports{$reportname} + or die "bad reportname"; + +my $date_format = FS::Conf->new->config('date_format') || '%x'; + +my @report_history = qsearch({ + table => 'report_batch', + hashref => { reportname => $reportname }, + order_by => ' ORDER BY send_date DESC', +}); + +# defaults per agent that could be selected for the report +my %agent; + +foreach my $report ( @report_history ) { + my $agentnum = $report->agentnum; + next if $agent{$agentnum}; + + # estimate the width of the report period, in months + my $last_sdate = DateTime->from_epoch( epoch => $report->sdate ); + my $last_edate = DateTime->from_epoch( epoch => $report->edate ); + + my $days = $last_sdate->delta_days( $last_edate )->delta_days; + my $months = sprintf('%.0f', $days / 6) / 5; + + my $next_sdate = $last_edate->clone->add(days => 1); + my $next_edate = $next_sdate->clone; + if ( $months >= 1 ) { # then treat as an interval in months + $next_edate->add( months => sprintf('%.0f', $months) ); + $next_edate->subtract(days => 1); + } else { # treat as a number of days + $next_edate->add( days => $days ); + } + + my $name = $agentnum ? FS::agent->by_key($agentnum)->agent : 'All agents'; + $agent{$agentnum} = { + name => $name, + beginning => $next_sdate->strftime($date_format), + ending => $next_edate->strftime($date_format), + msgnum => $report->msgnum, + }; +} + +</%init> diff --git a/httemplate/misc/unapply-cust_pay.cgi b/httemplate/misc/unapply-cust_pay.cgi index 8cdac180b..b0343d034 100755 --- a/httemplate/misc/unapply-cust_pay.cgi +++ b/httemplate/misc/unapply-cust_pay.cgi @@ -12,9 +12,7 @@ my $paynum = $1; my $cust_pay = qsearchs('cust_pay', { 'paynum' => $paynum } ); my $custnum = $cust_pay->custnum; -foreach my $cust_bill_pay ( $cust_pay->cust_bill_pay ) { - my $error = $cust_bill_pay->delete; - errorpage($error) if $error; -} +my $error = $cust_pay->delete_cust_bill_pay; +errorpage($error) if $error; </%init> diff --git a/httemplate/misc/void-cust_bill.html b/httemplate/misc/void-cust_bill.html index 1608fd051..39b071229 100644 --- a/httemplate/misc/void-cust_bill.html +++ b/httemplate/misc/void-cust_bill.html @@ -14,7 +14,7 @@ <% ntable("#cccccc", 2) %> <TR> <TD ALIGN="right">Reason</TD> - <TD><INPUT TYPE="text" NAME="reason" VALUE="<% $cgi->param('reason') |h %>"></TD> + <TD><INPUT TYPE="text" NAME="reason" VALUE="<% scalar($cgi->param('reason')) |h %>"></TD> </TR> </TABLE> diff --git a/httemplate/misc/xmlhttp-part_pkg_usageprice.html b/httemplate/misc/xmlhttp-part_pkg_usageprice.html index d4e2d8469..9decdeff9 100644 --- a/httemplate/misc/xmlhttp-part_pkg_usageprice.html +++ b/httemplate/misc/xmlhttp-part_pkg_usageprice.html @@ -1,24 +1,32 @@ <% encode_json( \@return ) %>\ <%init> -my( $pkgpart ) = $cgi->param('arg'); +my( $pkgpart, $pkgnum ) = $cgi->param('arg'); #could worry about agent-virting this so you can't see the add-on pricing of # other agents, but not a real-world big worry my $part_pkg = qsearchs( 'part_pkg', { pkgpart=>$pkgpart } ); +my %curr_quantity; +if ($pkgnum) { + my $cust_pkg = qsearchs( 'cust_pkg', { pkgnum=>$pkgnum } ); + %curr_quantity = map { $_->usagepricepart, $_->quantity } $cust_pkg->cust_pkg_usageprice; +} + my $num = 0; -my @return = map { +# probably don't need to be returning js_only anymore? +my @return = ($pkgpart, map { + my $usagepricepart = $_->usagepricepart; my @inc = ('/elements/cust_pkg_usageprice.html', - 'usagepricepart' => $_->usagepricepart, + 'usagepricepart' => $usagepricepart, ); - + push(@inc,'curr_quantity',($curr_quantity{$usagepricepart} || 0)); ( include(@inc, field=>'usagepricenum'.$num, html_only=>1 ), include(@inc, field=>'usagepricenum'.$num++, js_only=>1 ), ); } - $part_pkg->part_pkg_usageprice; + $part_pkg->part_pkg_usageprice); </%init> diff --git a/httemplate/misc/xmlhttp-template_image.cgi b/httemplate/misc/xmlhttp-template_image.cgi new file mode 100644 index 000000000..a8c50edf0 --- /dev/null +++ b/httemplate/misc/xmlhttp-template_image.cgi @@ -0,0 +1,48 @@ +<%doc> +Returns JSON encoded array of objects with details about FS::template_image +objects. Attributes in each returned object are imgnum, name, and src. + +Accepts the following options: + +imgnum - only return object for this imgnum + +no_src - do not include the src field + +</%doc> +<% encode_json(\@result) %>\ +<%init> +use FS::template_image; + +my $curuser = $FS::CurrentUser::CurrentUser; + +die "access denied" + unless $curuser->access_right([ 'View templates', 'View global templates', + 'Edit templates', 'Edit global templates', ]); + +my %arg = $cgi->param('arg'); + +my $search = { + 'table' => 'template_image', + 'hashref' => {}, +}; + +my $imgnum = $arg{'imgnum'} || ''; +die "Bad imgnum" unless $imgnum =~ /^\d*$/; +$search->{'hashref'}->{'imgnum'} = $imgnum if $imgnum; + +$search->{'select'} = 'imgnum, name' if $arg{'no_src'}; + +$search->{'extra_sql'} = ($imgnum ? ' AND ' : ' WHERE ') + . $curuser->agentnums_sql( + 'null_right' => ['View global templates','Edit global templates'] + ); + +my @images = qsearch($search); #needs agent virtualization + +my @result = map { +{ + 'imgnum' => $_->imgnum, + 'name' => $_->name, + 'src' => $arg{'no_src'} ? '' : $_->src, +} } @images; + +</%init> diff --git a/httemplate/misc/xmlhttp-ticket-update.html b/httemplate/misc/xmlhttp-ticket-update.html new file mode 100644 index 000000000..147fbef16 --- /dev/null +++ b/httemplate/misc/xmlhttp-ticket-update.html @@ -0,0 +1,66 @@ +<% encode_json($return) %>\ +<%init> + +my $id = $cgi->param('id'); +my $starts = $cgi->param('starts'); +my $due = $cgi->param('due'); +my $username = $cgi->param('username'); + +my $ticket = FS::TicketSystem->get_ticket_object( \%session, ticket_id=>$id ); + +#hmm, this should happen in a single transaction and either commit or rollback, +# but in reality failures "Don't Happen" so its not like a ticket gets +# half changed + +my $return; +if ( $ticket ) { + + my($orv, $omsg) = $ticket->SetOwner( $username, 'Steal' ); + $orv = 1 if ! $orv && $omsg =~ /already owns/i; + + if ( $orv ) { + + my $date = RT::Date->new( $session{CurrentUser} ); + $date->Set( Format=>'unix', Value=>$starts, ); + my($srv, $smsg) = $ticket->SetStarts( $date->ISO ); + + my $ddate; + unless ( ! $srv ) { + $ddate = RT::Date->new( $session{CurrentUser} ); + $ddate->Set( Format=>'unix', Value=>$due, ); + my($drv, $dmsg) = $ticket->SetDue( $ddate->ISO ); + #XXX lame + } + + if ( $srv ) { + + my ($sm, $sh) = ( $date->Localtime('user'))[1,2]; + my ($em, $eh) = ($ddate->Localtime('user'))[1,2]; + + #false laziness w/CalendarSlotSchedule and CalendarDaySchedule + my %hash = $m->comp('/rt/Ticket/Elements/Customers', Ticket => $ticket); + my @cust_main = values( %{$hash{cust_main}} ); + + $return = { 'error' => '', + #'starts' => $starts, + #'due' => $due, + #'username' => $username, + #false laziness w/CalendarSlotSchedule + 'sched_label' => + FS::sched_avail::pretty_time($sh*60+$sm). '-'. + FS::sched_avail::pretty_time($eh*60+$em). ': '. + $cust_main[0]->_FreesideURILabel, + }; + } else { + $return = { 'error' => $smsg }; + } + + } else { + $return = { 'error' => $omsg }; + } + +} else { + $return = { 'error' => 'Unknown ticket id' }; +} + +</%init> diff --git a/httemplate/search/cust_bill.html b/httemplate/search/cust_bill.html index 017e8298f..6e3617b28 100755 --- a/httemplate/search/cust_bill.html +++ b/httemplate/search/cust_bill.html @@ -196,7 +196,7 @@ my $html_init = join("\n", map { ( my $action = $_ ) =~ s/_$//; include('/elements/progress-init.html', $_.'form', - [ keys %search ], + [ sort keys %search ], "../misc/${_}invoices.cgi", { 'message' => "Invoices re-${action}ed" }, #would be nice to show the number of them, but... $_, #key @@ -206,7 +206,7 @@ my $html_init = join("\n", map { my @values = ref($search{$f}) ? @{ $search{$f} } : $search{$f}; map qq!<INPUT TYPE="hidden" NAME="$f" VALUE="$_">!, @values; } - keys %search + sort keys %search ), qq!</FORM>! } qw( print_ email_ fax_ ftp_ spool_ ) ). diff --git a/httemplate/search/cust_bill_pkg.cgi b/httemplate/search/cust_bill_pkg.cgi index 82e87fba9..ab5aad776 100644 --- a/httemplate/search/cust_bill_pkg.cgi +++ b/httemplate/search/cust_bill_pkg.cgi @@ -44,8 +44,8 @@ @currency, 'invnum', '_date', - '', #'pay_amount', - '', #'credit_amount', + 'pay_amount', + 'credit_amount', FS::UI::Web::cust_sort_fields(), ], 'links' => [ @@ -461,12 +461,6 @@ if ( $cgi->param('nottax') ) { } - my $credit_sub = 'SELECT SUM(amount) AS credit_amount, billpkgnum - FROM cust_credit_bill_pkg GROUP BY billpkgnum'; - - $join_pkg .= " LEFT JOIN ($credit_sub) AS item_credit - ON (cust_bill_pkg.billpkgnum = item_credit.billpkgnum)"; - if ( @tax_where or $cgi->param('taxable') ) { # process tax restrictions unshift @tax_where, @@ -579,51 +573,61 @@ if ( $cgi->param('nottax') ) { } elsif ( $cgi->param('istax') ) { - @peritem = ( 'setup' ); # taxes only have setup - @peritem_desc = ( 'Tax charge' ); + # ensure that it is a tax: + push @where, 'cust_bill_pkg.pkgnum = 0', + 'cust_bill_pkg.feepart IS NULL'; - push @where, 'cust_bill_pkg.pkgnum = 0'; + # We MUST NOT join cust_bill_pkg to any table that it's 1:many to. + # Otherwise we get duplication of the cust_bill_pkg records, + # inaccurate totals, nonsensical paging behavior, etc. + # We CAN safely join it to a subquery that has unique billpkgnums, and + # that's what we'll do. + + my $tax_subquery; + my @tax_where; # tax location when using tax_rate_location if ( $cgi->param('vendortax') ) { - $join_pkg .= ' LEFT JOIN cust_bill_pkg_tax_rate_location USING ( billpkgnum ) '. - ' LEFT JOIN tax_rate_location USING ( taxratelocationnum )'; + $tax_subquery = ' + SELECT billpkgnum, SUM(amount) as tax_total + FROM cust_bill_pkg_tax_rate_location AS tax + JOIN tax_rate_location USING (taxratelocationnum) + '; foreach (qw( state county city locationtaxid)) { if ( scalar($cgi->param($_)) ) { my $place = dbh->quote( $cgi->param($_) ); - push @where, "tax_rate_location.$_ = $place"; + push @tax_where, "tax_rate_location.$_ = $place"; } } - push @total, 'SUM( - COALESCE(cust_bill_pkg_tax_rate_location.amount, - cust_bill_pkg.setup + cust_bill_pkg.recur) - )'; - push @total_desc, "$money_char%.2f total"; + # itemdesc, for breakdown from the vendor tax report + # (this is definitely used) + if ( $cgi->param('itemdesc') ) { + if ( $cgi->param('itemdesc') eq 'Tax' ) { + push @where, "($itemdesc = 'Tax' OR $itemdesc is null)"; + } else { + push @where, "$itemdesc = ". dbh->quote($cgi->param('itemdesc')); + } + } } else { # the internal-tax case - $join_pkg .= ' - LEFT JOIN cust_bill_pkg_tax_location USING (billpkgnum) - JOIN cust_main_county USING (taxnum) - '; - - # don't double-count the components of consolidated taxes - @total = ( 'COUNT(DISTINCT cust_bill_pkg.billpkgnum)', - 'SUM(cust_bill_pkg_tax_location.amount)' ); - @total_desc = "$money_char%.2f total"; + my $tax_select = 'SELECT tax.billpkgnum, SUM(tax.amount) as tax_total'; + my $tax_from = ' FROM cust_bill_pkg_tax_location AS tax JOIN cust_main_county USING (taxnum)'; # package classnum if ( grep { $_ eq 'classnum' } $cgi->param ) { my @classnums = grep /^\d*$/, $cgi->param('classnum'); - $join_pkg .= ' - JOIN cust_pkg AS taxed_pkg - ON (cust_bill_pkg_tax_location.pkgnum = taxed_pkg.pkgnum) - JOIN part_pkg AS taxed_part_pkg - ON (taxed_pkg.pkgpart = taxed_part_pkg.pkgpart) + $tax_from .= ' + JOIN cust_bill_pkg AS taxed_item + ON (tax.taxable_billpkgnum = taxed_item.billpkgnum) + LEFT JOIN cust_pkg AS taxed_pkg ON (taxed_item.pkgnum = taxed_pkg.pkgnum) + LEFT JOIN part_pkg AS taxed_part_pkg ON (taxed_pkg.pkgpart = taxed_part_pkg.pkgpart) + LEFT JOIN part_fee AS taxed_part_fee ON (taxed_item.feepart = taxed_part_fee.feepart) '; - push @where, "COALESCE(taxed_part_pkg.classnum, 0) IN ( ". + push @tax_where, + "COALESCE(taxed_part_pkg.classnum, taxed_part_fee.classnum,0) IN ( ". join(',', @classnums ). ' )' if @classnums; @@ -631,19 +635,20 @@ if ( $cgi->param('nottax') ) { # taxclass if ( $cgi->param('taxclassNULL') ) { - push @where, 'cust_main_county.taxclass IS NULL'; + push @tax_where, 'cust_main_county.taxclass IS NULL'; } # taxname if ( $cgi->param('taxnameNULL') ) { - push @where, 'cust_main_county.taxname IS NULL OR '. + push @tax_where, 'cust_main_county.taxname IS NULL OR '. 'cust_main_county.taxname = \'Tax\''; } elsif ( $cgi->param('taxname') ) { - push @where, 'cust_main_county.taxname = '. + push @tax_where, 'cust_main_county.taxname = '. dbh->quote($cgi->param('taxname')); } # itemdesc, for breakdown from the vendor tax report + # (is this even used? vendor tax report shouldn't use cust_bill_pkg.cgi) if ( $cgi->param('itemdesc') ) { if ( $cgi->param('itemdesc') eq 'Tax' ) { push @where, "($itemdesc = 'Tax' OR $itemdesc is null)"; @@ -652,27 +657,46 @@ if ( $cgi->param('nottax') ) { } } - # specific taxnums + # specific taxnums (the usual way) if ( $cgi->param('taxnum') =~ /^([\d,]+)$/) { - push @where, "cust_main_county.taxnum IN ($1)"; + push @tax_where, "cust_main_county.taxnum IN ($1)"; } - } #end of "normal case" + $tax_subquery = "$tax_select $tax_from"; - # classnum (of underlying package) - # not specified: all classes - # 0: empty class - # N: classnum - if ( grep { $_ eq 'classnum' } $cgi->param ) { - my @classnums = grep /^\d+$/, $cgi->param('classnum'); - push @where, "COALESCE(part_fee.classnum, $part_pkg.classnum, 0) IN ( ". - join(',', @classnums ). - ' )' - if @classnums; + } # end of internal-tax case + + if (@tax_where) { + $tax_subquery .= ' + WHERE ' . join(' AND ', map "($_)", @tax_where); } + $tax_subquery .= ' GROUP BY tax.billpkgnum '; -} # nottax / istax + # now join THAT into the main report + # (inner join, so that tax line items that don't match the tax_where + # conditions don't appear in the output.) + + $join_pkg .= " JOIN ($tax_subquery) AS _istax USING (billpkgnum) "; + push @select, 'tax_total'; + + @peritem = ( 'setup' ); # total tax on the invoice, not just the filtered tax + @peritem_desc = ( 'Tax charge' ); + + @total = ( 'COUNT(cust_bill_pkg.billpkgnum)', + 'SUM(cust_bill_pkg.setup)' ); + @total_desc = ( "$money_char%.2f total tax" ); + + if ( @tax_where ) { + # then also show the filtered tax + push @peritem, 'tax_total'; + push @peritem_desc, 'Tax in category'; + push @total, 'SUM(tax_total)'; + push @total_desc, "$money_char%.2f tax in this category"; + # would also be nice to include a line explaining what the category is + } + +} # nottax / istax #total payments my $pay_sub = "SELECT SUM(cust_bill_pay_pkg.amount) @@ -681,87 +705,25 @@ my $pay_sub = "SELECT SUM(cust_bill_pay_pkg.amount) "; push @select, "($pay_sub) AS pay_amount"; - -# credit -if ( $cgi->param('credit') ) { - - my $credit_where; - +# showing credited amount, optionally with date filtering +my $credit_where = ''; +if ( $cgi->param('credit_begin') or $cgi->param('credit_end') ) { my($cr_begin, $cr_end) = FS::UI::Web::parse_beginning_ending($cgi, 'credit'); $credit_where = "WHERE cust_credit_bill._date >= $cr_begin " . "AND cust_credit_bill._date <= $cr_end"; +} - my $credit_sub; - - if ( $cgi->param('istax') ) { - # then we need to group/join by billpkgtaxlocationnum, to get only the - # relevant part of partial taxes - my $credit_sub = "SELECT SUM(cust_credit_bill_pkg.amount) AS credit_amount, - reason.reason as reason_text, access_user.username AS username_text, - billpkgtaxlocationnum, billpkgnum - FROM cust_credit_bill_pkg - JOIN cust_credit_bill USING (creditbillnum) - JOIN cust_credit USING (crednum) - LEFT JOIN reason USING (reasonnum) - LEFT JOIN access_user USING (usernum) - $credit_where - GROUP BY billpkgnum, billpkgtaxlocationnum, reason.reason, - access_user.username"; - - if ( $cgi->param('out') ) { - - # find credits that are applied to the line items, but not to - # a cust_bill_pkg_tax_location link - $join_pkg .= " LEFT JOIN ($credit_sub) AS item_credit - USING (billpkgnum)"; - push @where, 'item_credit.billpkgtaxlocationnum IS NULL'; - - } else { - - # find credits that are applied to the CBPTL links that are - # considered "interesting" by the report criteria - $join_pkg .= " LEFT JOIN ($credit_sub) AS item_credit - USING (billpkgtaxlocationnum)"; - - } - - } else { - # then only group by billpkgnum - my $credit_sub = "SELECT SUM(cust_credit_bill_pkg.amount) AS credit_amount, - reason.reason as reason_text, access_user.username AS username_text, - billpkgnum - FROM cust_credit_bill_pkg - JOIN cust_credit_bill USING (creditbillnum) - JOIN cust_credit USING (crednum) - LEFT JOIN reason USING (reasonnum) - LEFT JOIN access_user USING (usernum) - $credit_where - GROUP BY billpkgnum, reason.reason, access_user.username"; - $join_pkg .= " LEFT JOIN ($credit_sub) AS item_credit USING (billpkgnum)"; - } - - push @where, 'item_credit.billpkgnum IS NOT NULL'; - push @select, 'item_credit.credit_amount', - 'item_credit.username_text', - 'item_credit.reason_text'; - push @peritem, 'credit_amount', 'username_text', 'reason_text'; - push @peritem_desc, 'Credited', 'By', 'Reason'; - push @total, 'SUM(credit_amount)'; - push @total_desc, "$money_char%.2f credited"; - -} else { - - #still want a credit total column - - my $credit_sub = " - SELECT SUM(cust_credit_bill_pkg.amount) - FROM cust_credit_bill_pkg - WHERE cust_bill_pkg.billpkgnum = cust_credit_bill_pkg.billpkgnum - "; - push @select, "($credit_sub) AS credit_amount"; +my $credit_sub = "SELECT SUM(cust_credit_bill_pkg.amount) AS credit_amount, billpkgnum + FROM cust_credit_bill_pkg + JOIN cust_credit_bill USING (creditbillnum) + $credit_where + GROUP BY billpkgnum"; -} +$join_pkg .= " LEFT JOIN ($credit_sub) AS item_credit + ON (cust_bill_pkg.billpkgnum = item_credit.billpkgnum)"; +push @select, 'credit_amount'; +# standard customer fields push @select, 'cust_main.custnum', FS::UI::Web::cust_sql_fields(); #salesnum @@ -785,6 +747,10 @@ if ( $cgi->param('salesnum') =~ /^(\d+)$/ ) { $cgi->param('classnum', 0) unless $cgi->param('classnum'); } +#credit flag (include only those that have credit(s) applied) +if ( $cgi->param('credit') ) { + push @where, 'credit_amount > 0'; +} my $where = join(' AND ', @where); $where &&= "WHERE $where"; @@ -823,7 +789,13 @@ my $ilink = [ "${p}view/cust_bill.cgi?", 'invnum' ]; my $clink = [ "${p}view/cust_main.cgi?", 'custnum' ]; my $pay_link = ''; #[, 'billpkgnum', ]; -my $credit_link = [ "${p}search/cust_credit_bill_pkg.html?billpkgnum=", 'billpkgnum', ]; +my $credit_param = ''; +foreach ('credit_begin', 'credit_end') { + if ( $cgi->param($_) ) { + $credit_param .= "$_=" . $cgi->param($_) . ';'; + } +} +my $credit_link = [ "${p}search/cust_credit_bill_pkg.html?${credit_param}billpkgnum=", 'billpkgnum', ]; warn "\n\nQUERY:\n".Dumper($query)."\n\nCOUNT_QUERY:\n$count_query\n\n" if $cgi->param('debug'); diff --git a/httemplate/search/cust_credit_bill_pkg.html b/httemplate/search/cust_credit_bill_pkg.html index 63d70c27e..5facd4ab3 100644 --- a/httemplate/search/cust_credit_bill_pkg.html +++ b/httemplate/search/cust_credit_bill_pkg.html @@ -3,11 +3,12 @@ 'name_singular' => 'credit application', 'query' => $query, 'count_query' => $count_query, - 'count_addl' => [ $money_char. '%.2f total', ], + 'count_addl' => \@count_addl, 'header' => [ #'#', 'Amount', + 'Tax exempt', #credit 'Date', @@ -26,7 +27,9 @@ ], 'fields' => [ #'creditbillpkgnum', - sub { sprintf($money_char.'%.2f', shift->amount ) }, + sub { sprintf($money_char.'%.2f', shift->amount ) }, + + sub { sprintf($money_char.'%.2f', shift->get('exempt_credited') ) }, sub { time2str('%b %d %Y', shift->get('cust_credit_date') ) }, sub { shift->cust_credit_bill->cust_credit->otaker }, @@ -44,6 +47,7 @@ ], 'sort_fields' => [ 'amount', + 'exempt_credited', 'cust_credit_date', '', #'otaker', '', #reason @@ -61,6 +65,7 @@ '', '', '', + '', @post_desc_null, $ilink, $ilink, @@ -68,11 +73,12 @@ FS::UI::Web::cust_header() ), ], - 'align' => 'rrllll'. + 'align' => 'rrrllll'. $post_desc_align. 'rr'. FS::UI::Web::cust_aligns(), - 'color' => [ + 'color' => [ + '', '', '', '', @@ -91,6 +97,7 @@ '', '', '', + '', @post_desc_null, '', '', @@ -203,6 +210,7 @@ if ( $cgi->param('taxclass') my @loc_param = qw( district city county state country ); if ( $cgi->param('out') ) { + # probably don't need this part my ( $loc_sql, @param ) = FS::cust_pkg->location_sql( 'ornull' => 1 ); while ( $loc_sql =~ /\?/ ) { #easier to do our own substitution @@ -242,6 +250,8 @@ if ( $cgi->param('out') ) { #hacky, could be more efficient. care if it is ever used for more than the # tax-report_groups filtering kludge + # (does that even still exist? if so, correct this (or location_sql itself) + # to work with modern cust_location links) my $locs_sql = ' ( '. join(' OR ', map { @@ -266,15 +276,23 @@ if ( $cgi->param('out') ) { } else { - my %ph = map { $_ => dbh->quote( scalar($cgi->param($_)) ) } @loc_param; - - my ( $loc_sql, @param ) = FS::cust_pkg->location_sql; - while ( $loc_sql =~ /\?/ ) { #easier to do our own substitution - $loc_sql =~ s/\?/$ph{shift(@param)}/e; + my @loc_where; + foreach (@loc_param) { + if ( length($cgi->param($_)) ) { + my $quoted = dbh->quote($cgi->param($_)); + push @loc_where, "(COALESCE(cust_location.$_, '') = $quoted)"; + } } + my $loc_sql = join(' AND ', @loc_where); - push @where, $loc_sql; + #my %ph = map { $_ => dbh->quote( scalar($cgi->param($_)) ) } @loc_param; + # + #my ( $loc_sql, @param ) = FS::cust_pkg->location_sql; + #while ( $loc_sql =~ /\?/ ) { #easier to do our own substitution + # $loc_sql =~ s/\?/$ph{shift(@param)}/e; + #} + push @where, $loc_sql; } my($title, $name); @@ -357,7 +375,7 @@ if ( $cgi->param('report_group') =~ /^(=|!=) (.*)$/ && $cgi->param('istax') ) { } -push @where, 'cust_bill_pkg.pkgnum != 0' if $cgi->param('nottax'); +push @where, '(cust_bill_pkg.pkgnum != 0 OR cust_bill_pkg.feepart is not null)' if $cgi->param('nottax'); push @where, 'cust_bill_pkg.pkgnum = 0' if $cgi->param('istax'); if ( $cgi->param('cust_tax') ) { @@ -381,6 +399,9 @@ if ( $cgi->param('cust_tax') ) { my $count_query = "SELECT COUNT(DISTINCT creditbillpkgnum), SUM(cust_credit_bill_pkg.amount)"; +if ( $cgi->param('nottax') ) { + $count_query .= ", SUM(exempt_credited)"; +} my $join_cust = ' JOIN cust_bill ON ( cust_bill_pkg.invnum = cust_bill.invnum )'. @@ -393,6 +414,21 @@ my $join_cust_bill_pkg = 'LEFT JOIN cust_bill_pkg USING ( billpkgnum )'; if ( $cgi->param('nottax') ) { + # There can be multiple cust_tax_exempt_pkg records with the same + # creditbillpkgnum iff the line item is exempt from multiple taxes. + # They will all have the same amount, except in the case where there are + # different exemption types and so the exemption amounts are different. + # In that case, show the amount of the largest exemption. + + $join_cust_bill_pkg .= ' + LEFT JOIN( + SELECT creditbillpkgnum, + MAX(0 - cust_tax_exempt_pkg.amount) AS exempt_credited + FROM cust_tax_exempt_pkg + WHERE creditbillpkgnum IS NOT NULL + GROUP BY creditbillpkgnum + ) AS exempt_credit USING (creditbillpkgnum) + '; $join_pkg = ' LEFT JOIN cust_pkg USING ( pkgnum ) LEFT JOIN part_pkg USING ( pkgpart ) LEFT JOIN part_pkg AS override @@ -460,6 +496,12 @@ push @select, 'part_pkg.pkg' unless $cgi->param('istax'); push @select, 'cust_main.custnum', FS::UI::Web::cust_sql_fields(); +if ( $cgi->param('istax') ) { + push @select, 'NULL AS exempt_credited'; # just display zero +} elsif ( $cgi->param('nottax') ) { + push @select, 'exempt_credited'; +} + my @post_desc_header = (); my @post_desc = (); my @post_desc_null = (); @@ -543,4 +585,13 @@ my $location_sub = sub { }; +my @count_addl = ( $money_char. '%.2f total', ); +if ( $cgi->param('nottax') ) { + push @count_addl, ( $money_char. '%.2f tax exempt' ); +} + +if ( $cgi->param('debug') ) { + warn "\nQUERY:\n" . Dumper($query) . "\nCOUNT_QUERY:\n$count_query\n\n"; +} + </%init> diff --git a/httemplate/search/cust_msg.html b/httemplate/search/cust_msg.html index 401f52ebb..e9aece202 100644 --- a/httemplate/search/cust_msg.html +++ b/httemplate/search/cust_msg.html @@ -144,11 +144,12 @@ include('/elements/select.html', include('/elements/select.html', 'field' => 'msgtype', 'curr_value' => $cgi->param('msgtype') || '', - 'options' => [ '', 'invoice', 'receipt', 'admin' ], + 'options' => [ '', 'invoice', 'receipt', 'admin', 'report' ], 'labels' => { '' => '(any)', 'invoice' => 'Invoices', 'receipt' => 'Receipts', 'admin' => 'Admin notices', + 'report' => 'Reports', }, ) . '</TD> diff --git a/httemplate/search/cust_pay.html b/httemplate/search/cust_pay.html index 03474c1ef..e466f6afa 100755 --- a/httemplate/search/cust_pay.html +++ b/httemplate/search/cust_pay.html @@ -3,4 +3,5 @@ 'amount_field' => 'paid', 'name_singular' => emt('payment'), 'name_verb' => emt('paid'), + 'show_card_type' => 1, &> diff --git a/httemplate/search/cust_pkg.cgi b/httemplate/search/cust_pkg.cgi index c88b3a1d5..f1e686a83 100755 --- a/httemplate/search/cust_pkg.cgi +++ b/httemplate/search/cust_pkg.cgi @@ -310,11 +310,14 @@ my $process_svc_labels = sub { foreach ( map { [ $_->label ] } @{ $part_svc->cust_pkg_svc } ) { push @out, [ { 'data' => $_->[0]. ':', - 'align'=> 'right', }, + 'align'=> 'right', + }, + { 'data' => $_->[1], 'align'=> 'left', - 'link' => $p. 'view/' . - $_->[2]. '.cgi?'. $_->[3], }, + 'link' => $p. 'view/cust_svc.cgi?' . $_->[3], + }, + ]; } } diff --git a/httemplate/search/elements/cust_pay_or_refund.html b/httemplate/search/elements/cust_pay_or_refund.html index 5808e5f3e..1fea67c19 100755 --- a/httemplate/search/elements/cust_pay_or_refund.html +++ b/httemplate/search/elements/cust_pay_or_refund.html @@ -184,6 +184,16 @@ push @fields, 'payby_payinfo_pretty', push @link_onclicks, $sub_receipt, ''; push @sort_fields, 'paysort', $amount_field; +if ($opt{'show_card_type'}) { + push @header, emt('Card Type'); + $align .= 'r'; + push @links, ''; + push @fields, sub { + (($_[0]->payby eq 'CARD') && ($_[0]->paymask !~ /N\/A/)) ? cardtype($_[0]->paymask) : '' + }; + push @sort_fields, ''; +} + if ( $unapplied ) { push @header, emt('Unapplied'); $align .= 'r'; diff --git a/httemplate/search/elements/search.html b/httemplate/search/elements/search.html index beb017300..a279f5327 100644 --- a/httemplate/search/elements/search.html +++ b/httemplate/search/elements/search.html @@ -348,8 +348,8 @@ if ( $opt{'disableable'} ) { sub { shift->disabled ? 'FF0000' : '00CC00'; }; splice @{ $opt{'links'} }, $pos, 0, '' if $opt{'links'}; - splice @{ $opt{'link_onlicks'} }, $pos, 0, '' - if $opt{'link_onlicks'}; + splice @{ $opt{'link_onclicks'} }, $pos, 0, '' + if $opt{'link_onclicks'}; } #add show/hide disabled links diff --git a/httemplate/search/queue.html b/httemplate/search/queue.html index 141c535da..22032b13c 100644 --- a/httemplate/search/queue.html +++ b/httemplate/search/queue.html @@ -13,6 +13,7 @@ 'Date', 'Status', 'Account', # unless $hashref->{'svcnum'} + 'Employee', '', # checkbox column ], 'fields' => [ @@ -78,6 +79,11 @@ }, sub { my $queue = shift; + my $access_user = $queue->access_user; + return $access_user ? $access_user->username : ''; + }, + sub { + my $queue = shift; my $jobnum = $queue->jobnum; my $status = $queue->status; my $changable = $dangerous diff --git a/httemplate/search/report_sales_commission_pkg.html b/httemplate/search/report_sales_commission_pkg.html index 6adf090e9..27906e0c3 100644 --- a/httemplate/search/report_sales_commission_pkg.html +++ b/httemplate/search/report_sales_commission_pkg.html @@ -1,5 +1,15 @@ <& /elements/header.html, 'Sales commission report per package' &> +% if ($FS::CurrentUser::CurrentUser->access_right('Send reports to customers')) +% { +<P> +<& /elements/popup_link-send_report_batch.html, + reportname => 'sales_commission_pkg', + label => emt('Send these reports by email'), +&> +</P> +% } + <FORM ACTION="sales_commission_pkg.html"> <TABLE BGCOLOR="#cccccc" CELLSPACING=0> diff --git a/httemplate/search/report_tax-xls.cgi b/httemplate/search/report_tax-xls.cgi index d0ef434f4..773b403f1 100755 --- a/httemplate/search/report_tax-xls.cgi +++ b/httemplate/search/report_tax-xls.cgi @@ -122,7 +122,7 @@ my %default = ( border => 1, ); my @widths = ( #ick - 30, (13) x 5, 3, 7.5, 3, 11, 11, 3, 11, 3, 11 + 30, (13) x 6, 3, 7.5, 3, 11, 11, 3, 11, 3, 11 ); my @format = ( {}, {}, {} ); # white row, gray row, yellow (totals) row @@ -134,40 +134,46 @@ foreach (keys(%formatdef)) { italic => 1, %f); } -my $ws = $workbook->add_worksheet('taxreport'); +my $ws = $workbook->add_worksheet('Sales and Tax'); # main title $ws->merge_range(0, 0, 0, 14, $report->title, $format[0]->{title}); +$ws->set_row(0, 30); # excel position my $x = 0; my $y = 2; my $colhead = $format[0]->{colhead}; # print header -$ws->merge_range($y, 1, $y, 5, 'Sales', $colhead); -$ws->merge_range($y, 6, $y+1, 8, 'Rate', $colhead); -$ws->merge_range($y, 9, $y, 14, 'Tax', $colhead); +$ws->merge_range($y, 1, $y, 6, 'Sales', $colhead); +$ws->merge_range($y, 7, $y+1, 9, 'Rate', $colhead); +$ws->merge_range($y, 10, $y, 16, 'Tax', $colhead); $y++; $colhead = $format[0]->{colhead_small}; -$ws->write($y, 1, [ 'Total', 'Exempt customer', 'Exempt package', 'Monthly exemption', +$ws->write($y, 1, [ 'Total', + 'Exempt customer', + 'Exempt package', + 'Monthly exemption', + 'Credited', 'Taxable' ], $colhead); -$ws->write($y, 9, 'Estimated', $colhead); -$ws->write($y, 10, 'Invoiced', $colhead); -$ws->write($y, 12, 'Credited', $colhead); -$ws->write($y, 14, 'Net due', $colhead); +$ws->write($y, 10, 'Estimated', $colhead); +$ws->write($y, 11, 'Invoiced', $colhead); +$ws->write($y, 13, 'Credited', $colhead); +$ws->write($y, 15, 'Net due', $colhead); +$ws->write($y, 16, 'Collected',$colhead); $y++; # print data -my $rownum = 0; +my $rownum = 1; my $prev_row = { pkgclass => 'DUMMY PKGCLASS' }; foreach my $row (@rows) { $x = 0; if ( $row->{pkgclass} ne $prev_row->{pkgclass} ) { - $rownum = 0; + $rownum = 1; if ( $params{breakdown}->{pkgclass} ) { - $ws->merge_range($y, 0, $y, 14, + $ws->merge_range($y, 0, $y, 15, $pkgclass_name{$row->{pkgclass}}, $format[0]->{sectionhead} ); @@ -181,7 +187,7 @@ foreach my $row (@rows) { } $ws->write($y, $x, $row->{label}, $f->{rowhead}); $x++; - foreach (qw(sales exempt_cust exempt_pkg exempt_monthly taxable)) { + foreach (qw(sales exempt_cust exempt_pkg exempt_monthly sales_credited taxable)) { $ws->write($y, $x, $row->{$_} || 0, $f->{currency}); $x++; } @@ -206,6 +212,8 @@ foreach my $row (@rows) { $ws->write_string($y, $x, " = ", $f->{bigmath}); $x++; $ws->write($y, $x, $row->{tax} - $row->{credit}, $f->{currency}); + $x++; + $ws->write($y, $x, $row->{tax_paid} || 0, $f->{currency}); $rownum++; $y++; @@ -226,6 +234,69 @@ for my $x (0..scalar(@widths)-1) { $ws->set_column($x, $x, $widths[$x]); } +# do the same for the credit worksheet +$ws = $workbook->add_worksheet('Credits'); + +my $title = $report->title; +$title =~ s/Tax Report/Credits/; +# main title +$ws->merge_range(0, 0, 0, 14, $title, $format[0]->{title}); +$ws->set_row(0, 30); # height +# excel position +$x = 0; +$y = 2; + +$colhead = $format[0]->{colhead}; +# print header +$ws->merge_range($y, 1, $y+1, 1, 'Total', $colhead); +$ws->merge_range($y, 2, $y, 4, 'Applied to', $colhead); + +$y++; +$colhead = $format[0]->{colhead_small}; +$ws->write($y, 2, [ 'Taxable sales', + 'Tax-exempt sales', + 'Taxes' + ], $colhead); +$y++; + +# print data +$rownum = 1; +$prev_row = { pkgclass => 'DUMMY PKGCLASS' }; + +foreach my $row (@rows) { + $x = 0; + if ( $row->{pkgclass} ne $prev_row->{pkgclass} ) { + $rownum = 1; + if ( $params{breakdown}->{pkgclass} ) { + $ws->merge_range($y, 0, $y, 4, + $pkgclass_name{$row->{pkgclass}}, + $format[0]->{sectionhead} + ); + $y++; + } + } + # pick a format set + my $f = $format[$rownum % 2]; + if ( $row->{total} ) { + $f = $format[2]; + } + $ws->write($y, $x, $row->{label}, $f->{rowhead}); + $x++; + foreach (qw(credits sales_credited exempt_credited tax_credited)) { + $ws->write($y, $x, $row->{$_} || 0, $f->{currency}); + $x++; + } + + $rownum++; + $y++; + $prev_row = $row; +} + +for my $x (0..4) { + $ws->set_column($x, $x, $widths[$x]); +} + + $workbook->close; http_header('Content-Length' => length($data)); diff --git a/httemplate/search/report_tax.cgi b/httemplate/search/report_tax.cgi index 491cd42c5..9e625c80f 100644 --- a/httemplate/search/report_tax.cgi +++ b/httemplate/search/report_tax.cgi @@ -18,11 +18,12 @@ TD.rowhead { font-weight: bold; text-align: left; padding: 0px 3px } .bigmath { font-size: large; font-weight: bold; font: sans-serif; text-align: center } .total { font-style: italic } </STYLE> + <& /elements/table-grid.html &> <THEAD> <TR> <TH ROWSPAN=3></TH> - <TH COLSPAN=5>Sales</TH> + <TH COLSPAN=6>Sales</TH> <TH ROWSPAN=3></TH> <TH ROWSPAN=3>Rate</TH> <TH ROWSPAN=3></TH> @@ -32,6 +33,8 @@ TD.rowhead { font-weight: bold; text-align: left; padding: 0px 3px } <TH ROWSPAN=3>Tax credited</TH> <TH ROWSPAN=3></TH> <TH ROWSPAN=3>Net tax due</TH> + <TH ROWSPAN=3></TH> + <TH ROWSPAN=3>Tax collected</TH> </TR> <TR> @@ -39,6 +42,7 @@ TD.rowhead { font-weight: bold; text-align: left; padding: 0px 3px } <TH ROWSPAN=1>Non-taxable</TH> <TH ROWSPAN=1>Non-taxable</TH> <TH ROWSPAN=1>Non-taxable</TH> + <TH ROWSPAN=2>Credited</TH> <TH ROWSPAN=2>Taxable</TH> </TR> @@ -71,10 +75,20 @@ TD.rowhead { font-weight: bold; text-align: left; padding: 0px 3px } % } # if $row->{pkgclass} ne ... % # construct base links that limit to the tax rates described by this row +% # cust_bill_pkg.cgi wants a list of specific taxnums (and package class) +% # cust_credit_bill_pkg.html wants a geographic scope (and package class) % my $rowlink = ';taxnum=' . $row->{taxnums}; +% # DON'T EVER USE THIS +% # my $rowregion = ';country=' . $cgi->param('country'); +% # foreach my $loc (qw(state county city district)) { +% # if ( $row->{$loc} ) { +% # $rowregion .= ";$loc=" . uri_escape($row->{$loc}); +% # } +% # } % # and also the package class, if we're limiting package class % if ( $params{breakdown}->{pkgclass} ) { % $rowlink .= ';classnum=' . ($row->{pkgclass} || 0); +% # $rowregion .= ';classnum=' . ($row->{pkgclass} || 0); % } % % if ( $row->{total} ) { @@ -107,6 +121,12 @@ TD.rowhead { font-weight: bold; text-align: left; padding: 0px 3px } <% $money_sprintf->( $row->{exempt_monthly} ) %> </A> </TD> +% # credited sales + <TD> + <A HREF="<% $salescreditlink . $rowlink %>"> + <% $money_sprintf->( $row->{sales_credited} ) %> + </A> + </TD> % # taxable sales <TD> <A HREF="<% $saleslink . $rowlink . ";taxable=1" %>"> @@ -131,13 +151,16 @@ TD.rowhead { font-weight: bold; text-align: left; padding: 0px 3px } % # credited tax <TD CLASS="bigmath"> − </TD> <TD> - <A HREF="<% $creditlink . $rowlink %>"> - <% $money_sprintf->( $row->{credit} ) %> - </A> +%# <A HREF="<% $creditlink . $rowlink %>"> currently broken + <% $money_sprintf->( $row->{tax_credited} ) %> +%# </A> </TD> % # net tax due <TD CLASS="bigmath"> = </TD> - <TD><% $money_sprintf->( $row->{tax} - $row->{credit} ) %></TD> + <TD><% $money_sprintf->( $row->{tax} - $row->{tax_credited} ) %></TD> +% # tax collected + <TD> </TD> + <TD><% $money_sprintf->( $row->{tax_paid} ) %></TD> </TR> % $rownum++; % $prev_row = $row; @@ -161,6 +184,80 @@ TD.rowhead { font-weight: bold; text-align: left; padding: 0px 3px } % } </TABLE> +<BR> +<& /elements/table-grid.html &> + <THEAD> + <TR> + <TH ROwSPAN=2></TH> + <TH ROWSPAN=2>Total credits</TH> + <TH COLSPAN=3>Applied to</TH> + </TR> + <TR STYLE="font-size: small"> + <TH>Taxable sales</TH> + <TH>Tax-exempt sales</TH> + <TH>Taxes</TH> + </TR> + </THEAD> + +% $rownum = 0; +% $prev_row = { pkgclass => 'DUMMY PKGCLASS' }; + + <TBODY> +% # mostly duplicates the stuff above... +% # but putting it all in one giant table is no good +% foreach my $row (@rows) { +% if ( $row->{pkgclass} ne $prev_row->{pkgclass} ) { +% if ( $rownum > 0 ) { # start a new section +% $rownum = 0; + </TBODY><TBODY> +% } +% if ( $params{breakdown}->{pkgclass} ) { # and caption the new section + <TR> + <TD COLSPAN=5 CLASS="sectionhead"> + <% $pkgclass_name{$row->{pkgclass}} %> + </TD> + </TR> +% } +% } # if $row->{pkgclass} ne ... + +% my $rowlink = ';taxnum=' . $row->{taxnums}; +% +% if ( $row->{total} ) { + </TBODY><TBODY CLASS="total"> +% } + <TR CLASS="row<% $rownum % 2 %>"> + <TD CLASS="rowhead"><% $row->{label} |h %></TD> + <TD> +% # Total credits + <% $money_sprintf->( $row->{credits} ) %> + </TD> +% # Credits to taxable sales + <TD> + <A HREF="<% $salescreditlink . $rowlink %>"> + <% $money_sprintf->( $row->{sales_credited} ) %> + </A> + </TD> +% # ... to exempt sales (link is the same, it shows both exempt and taxable) + <TD> + <A HREF="<% $salescreditlink . $rowlink %>"> + <% $money_sprintf->( $row->{exempt_credited} ) %> + </A> + </TD> +% # ... to taxes + <TD> +%# <A HREF="<% $creditlink . $rowlink %>"> currently broken + <% $money_sprintf->( $row->{tax_credited} ) %> +%# </A> + </TD> + </TR> +% $rownum++; +% $prev_row = $row; +% } # foreach my $row +% # no "out of taxable region" for credits (yet) + </TBODY> +</TABLE> + + <& /elements/footer.html &> <%init> @@ -218,12 +315,18 @@ if ( $params{agentnum} ) { my $saleslink = $p. "search/cust_bill_pkg.cgi?$dateagentlink;nottax=1"; my $taxlink = $p. "search/cust_bill_pkg.cgi?$dateagentlink;istax=1"; my $exemptlink = $p. "search/cust_tax_exempt_pkg.cgi?$dateagentlink"; -my $creditlink = $p. "search/cust_bill_pkg.cgi?$dateagentlink;credit=1;istax=1"; - +my $salescreditlink = $p. "search/cust_bill_pkg.cgi?$dateagentlink;nottax=1;credit=1"; if ( $params{'credit_date'} eq 'cust_credit_bill' ) { - $creditlink =~ s/begin/credit_begin/; - $creditlink =~ s/end/credit_end/; + $salescreditlink =~ s/begin/credit_begin/; + $salescreditlink =~ s/end/credit_end/; + $saleslink .= ";credit_begin=$beginning;credit_end=$ending"; } +#my $creditlink = $p. "search/cust_bill_pkg.cgi?$dateagentlink;credit=1;istax=1"; +#if ( $params{'credit_date'} eq 'cust_credit_bill' ) { +# $creditlink =~ s/begin/credit_begin/; +# $creditlink =~ s/end/credit_end/; +#} +my $creditlink = ''; # disabled until we find a sane way to do this my %pkgclass_name = map { $_->classnum, $_->classname } qsearch('pkg_class'); $pkgclass_name{''} = 'Unclassified'; diff --git a/httemplate/search/sales_commission_pkg.html b/httemplate/search/sales_commission_pkg.html index 2b5f2bb0a..9fbe22eca 100644 --- a/httemplate/search/sales_commission_pkg.html +++ b/httemplate/search/sales_commission_pkg.html @@ -1,12 +1,17 @@ %# still not a good way to do rows grouped by some field in a search.html %# report +%# (there is now, but we're not yet sponsored to switch this over to it) % if ( $type eq 'xls' ) { <% $data %>\ % } else { +% if ( $type eq 'html-print' ) { +<& /elements/header-popup.html, $title &> +% } else { <& /elements/header.html, $title &> <P ALIGN="right" CLASS="noprint"> Download full results<BR> as <A HREF="<% $cgi->self_url %>;_type=xls">Excel spreadsheet</A></P> +% } <BR> <STYLE TYPE="text/css"> td.cust_head { @@ -22,12 +27,14 @@ td.money:before { content: '<% $money_char %>'; } .row1 { background-color: #ffffff; } </STYLE> <& /elements/table-grid.html &> +<THEAD> <TR STYLE="background-color: #cccccc"> <TH CLASS="grid">Package</TH> <TH CLASS="grid">Sales</TH> <TH CLASS="grid">Percentage</TH> <TH CLASS="grid">Commission</TH> </TR> +</THEAD> % my ($custnum, $sales, $commission, $row, $bgcolor) = (0, 0, 0, 0); % foreach my $cust_pkg ( @cust_pkg ) { % if ( $custnum ne $cust_pkg->custnum ) { diff --git a/httemplate/search/tax_sales.cgi b/httemplate/search/tax_sales.cgi new file mode 100644 index 000000000..4b28c934a --- /dev/null +++ b/httemplate/search/tax_sales.cgi @@ -0,0 +1,172 @@ + +<% include('/graph/elements/report.html', + 'title' => 'Monthly Sales and Taxes Report', + 'items' => \@row_labels, + 'data' => \@rowdata, + 'row_labels' => \@row_labels, + 'colors' => \@rowcolors, + 'bgcolors' => \@rowbgcolors, + 'col_labels' => \@col_labels, + 'graph_type' => 'none', + ) %> + +<%init> + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('Financial reports'); + +# validate cgi input +my $start_month = $cgi->param('start_month'); +die "Bad start month" unless $start_month =~ /^\d*$/; +my $start_year = $cgi->param('start_year'); +die "Bad start year" unless $start_year =~ /^\d*$/; +my $end_month = $cgi->param('end_month'); +die "Bad end month" unless $end_month =~ /^\d*$/; +my $end_year = $cgi->param('end_year'); +die "Bad end year" unless $end_year =~ /^\d*$/; +die "End year before start year" if $end_year < $start_year; +die "End month before start month" if ($start_year == $end_year) && ($end_month < $start_month); +my $country = $cgi->param('country'); +die "Bad country code" unless $country =~ /^\w\w$/; + +# Data structure for building final table +# row order will be calculated separately +# +# $data->{$rowlabel} = \@rowvalues +# + +my $data = {}; + +### Calculate package values + +my @pkg_class = qsearch('pkg_class'); +my @pkg_classnum = map { $_->classnum } @pkg_class; +unshift(@pkg_classnum,0); +my @pkg_classname = map { $_->classname } @pkg_class; +unshift(@pkg_classname,'(empty class)'); + +# some false laziness with graph/elements/monthly.html +my %reportopts = ( + 'items' => [ qw( cust_bill_pkg cust_bill_pkg_credits ) ], + 'cross_params' => [ map { [ 'classnum', $_ ] } @pkg_classnum ], + 'start_month' => $start_month, + 'start_year' => $start_year, + 'end_month' => $end_month, + 'end_year' => $end_year, +); +my $pkgreport = new FS::Report::Table::Monthly(%reportopts); +my $pkgdata = $pkgreport->data; + +# assuming every month/year combo is included in results, +# just use this list for the final table +my @col_labels = @{$pkgdata->{'label'}}; + +# unpack report data into a more manageable format +foreach my $item ( qw( invoiced credited ) ) { # invoiced, credited + my $itemref = shift @{$pkgdata->{'data'}}; + foreach my $label (@{$pkgdata->{'label'}}) { # month/year + my $labelref = shift @$itemref; + foreach my $classname (@pkg_classname) { # pkg class + my $value = shift @$labelref; + my $rowlabel = $classname.' '.$item; + $data->{$rowlabel} ||= []; + push(@{$data->{$rowlabel}},$value); + } + } +} + +### Calculate tax values + +# false laziness w report_tax.html, put this in FS::Report::Tax? +my $sth = dbh->prepare('SELECT DISTINCT(COALESCE(taxname, \'Tax\')) FROM cust_main_county'); +$sth->execute or die $sth->errstr; +my @taxnames = map { $_->[0] } @{ $sth->fetchall_arrayref }; +$sth->finish; + +# get DateTime objects for start & end +my $startdate = DateTime->new( + year => $start_year, + month => $start_month, + day => 1 + ); +my $enddate = DateTime->new( + year => $end_year, + month => $end_month, + day => 1 + ); +$enddate->add( months => 1 )->subtract( seconds => 1 ); # the last second of the month + +# common to all tax reports +my %params = ( + 'country' => $country, + 'credit_date' => 'cust_bill', +); + +# run a report for each month, for each tax +my $countdate = $startdate->clone; +while ($countdate < $enddate) { + + # set report start date, iterate to end of this month, set report end date + $params{'beginning'} = $countdate->epoch; + $params{'ending'} = $countdate->add( months => 1 )->subtract( seconds => 1 )->epoch; + + # run a report for each tax name + foreach my $taxname (@taxnames) { + $params{'taxname'} = $taxname; + my $report = FS::Report::Tax->report_internal(%params); + + # extract totals from report, kinda awkward + my $pkgclass = ''; # this will get more complicated if we breakdown by pkgclass + my @values = (0,0); + if ($report->{'total'}->{$pkgclass}) { + my %totals = map { $$_[0] => $$_[2] } @{$report->{'total'}->{$pkgclass}}; + $values[0] = $totals{'tax'}; + $values[1] = $totals{'credit'}; + } + + # treat each tax class like it's an additional pkg class + foreach my $item ( qw ( invoiced credited ) ) { + my $rowlabel = $taxname . ' ' . $item; + my $value = shift @values; + $data->{$rowlabel} ||= []; + push(@{$data->{$rowlabel}},$value); + } + + } + + # iterate to next month + $countdate->add( seconds => 1 ); +} + +# put the data in the order we want it +my @row_labels; +my @rowdata; +my @rowcolors; +my @rowbgcolors; +my $pkgcount = 0; #for colors +foreach my $classname (@pkg_classname,@taxnames) { + my $istax = ($pkgcount++ < @pkg_classname) ? 0 : 1; + my @classlabels = (); + my @classdata = (); + my @classcolors = (); + my @classbgcolors = (); + my $hasdata = 0; + foreach my $item ( qw( invoiced credited ) ) { + my $rowlabel = $classname . ' ' . $item; + my $rowdata = $data->{$rowlabel}; + my $rowcolor = $istax ? '0000ff' : '000000'; + my $rowbgcolor = ($item eq 'credited') ? 'cccccc' : 'ffffff'; + $hasdata = 1 if grep { $_ } @$rowdata; + push(@classlabels,$rowlabel); + push(@classdata,$rowdata); + push(@classcolors,$rowcolor); + push(@classbgcolors,$rowbgcolor); + } + next unless $hasdata; # don't include class if it has no data in time range + push(@row_labels,@classlabels); + push(@rowdata,@classdata); + push(@rowcolors,@classcolors); + push(@rowbgcolors,@classbgcolors); +} + +</%init> diff --git a/httemplate/search/tax_sales.html b/httemplate/search/tax_sales.html new file mode 100755 index 000000000..61cf86e2e --- /dev/null +++ b/httemplate/search/tax_sales.html @@ -0,0 +1,35 @@ +<% include('/elements/header.html', 'Monthly Sales and Taxes Report' ) %> + +<FORM ACTION="tax_sales.cgi" METHOD="GET"> + +<TABLE> + + <% include('/elements/tr-select-from_to.html') %> + + <% include('/elements/tr-select.html', + 'label' => 'Country', + 'field' => 'country', + 'options' => \@countries, + 'curr_value' => ($conf->config('countrydefault') || 'US'), + ) %> + +</TABLE> + +<BR><INPUT TYPE="submit" VALUE="Get Report"> + +</FORM> + +<% include('/elements/footer.html') %> +<%init> + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('Financial reports'); + +my $conf = new FS::Conf; + +# false laziness w report_tax.html, put this in FS::Report::Tax? +my $sth = dbh->prepare('SELECT DISTINCT(country) FROM cust_location'); +$sth->execute or die $sth->errstr; +my @countries = map { $_->[0] } @{ $sth->fetchall_arrayref }; + +</%init> diff --git a/httemplate/view/cust_main/appointments.html b/httemplate/view/cust_main/appointments.html index c907b25bb..9bf5be1d5 100644 --- a/httemplate/view/cust_main/appointments.html +++ b/httemplate/view/cust_main/appointments.html @@ -19,7 +19,9 @@ <THEAD> <TR> - <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Type') |h %></TH> +% if ( $custom_field ) { + <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Type') |h %></TH> +% } <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Date') |h %></TH> <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Status') |h %></TH> <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Owner') |h %></TH> @@ -41,10 +43,12 @@ % if $starts > 86400; <TR> - - <TD CLASS="grid" BGCOLOR="<% $bgcolor %>"> - <A HREF=<%$href%>><% 'custom field magic type' %></A> - </TD> + +% if ( $custom_field ) { + <TD CLASS="grid" BGCOLOR="<% $bgcolor %>"> + <A HREF=<%$href%>><% $ticket->{"CF.{$custom_field}"} |h %></A> + </TD> +% } <TD CLASS="grid" BGCOLOR="<% $bgcolor %>"> <A HREF=<%$href%>><% $starts_pretty %></A> @@ -78,20 +82,22 @@ return '' unless $conf->config('ticket_system'); #my $object = $opt{'object'}; #$object = $object->cust_svc if $object->isa('FS::svc_Common'); -my( @tickets ) = $object->tickets; #XXX but actually appointments... filter by presense of the necessary CF? RT::Appointment instead of RT::Ticket ? +my @tickets = $object->appointments; -my ($openlabel, $open_link, $res_link, $thing); -$openlabel = join('/', FS::TicketSystem->statuses ); +my $custom_field = $conf->config('ticket_system-appointment-custom_field'); + +# my ($openlabel, $open_link, $res_link, $thing); +# $openlabel = join('/', FS::TicketSystem->statuses ); # not the nicest way to do this--FS::has_tickets_Common? #if ( $object->isa('FS::cust_main') ) { - $thing = 'customer'; - $open_link = FS::TicketSystem->href_customer_tickets($object->custnum); - - $res_link = FS::TicketSystem->href_customer_tickets( - $object->custnum, - { 'statuses' => [ 'resolved' ] } - ); +# $thing = 'customer'; +# $open_link = FS::TicketSystem->href_customer_tickets($object->custnum); +# +# $res_link = FS::TicketSystem->href_customer_tickets( +# $object->custnum, +# { 'statuses' => [ 'resolved' ] } +# ); #} elsif ( $object->isa('FS::cust_svc') ) { # # return '' unless $object->pkgnum; diff --git a/httemplate/view/cust_main/billing.html b/httemplate/view/cust_main/billing.html index c031ce929..0c9f74a7c 100644 --- a/httemplate/view/cust_main/billing.html +++ b/httemplate/view/cust_main/billing.html @@ -44,11 +44,13 @@ % 'hashref' => { 'custnum' => $cust_main->custnum, }, % 'extra_sql' => 'AND ( cancel IS NULL OR cancel = 0 ) % AND freq = '. dbh->quote($freq), +% 'order_by' => 'ORDER BY COALESCE(start_date,0), pkgnum', # to ensure old pkgs come before change_to_pkg % }) or next; % % my $freq_pretty = $cust_pkg[0]->part_pkg->freq_pretty; % % my $amount = 0; +% my $skip_pkg = {}; % foreach my $cust_pkg (@cust_pkg) { % my $part_pkg = $cust_pkg->part_pkg; % next if $cust_pkg->susp @@ -57,6 +59,15 @@ % || $cust_pkg->option('no_suspend_bill') % ); % +% #pkg change handling +% next if $skip_pkg->{$cust_pkg->pkgnum}; +% if ($cust_pkg->change_to_pkgnum) { +% #if change is on or before next bill date, use new pkg +% next if $cust_pkg->expire <= $cust_pkg->bill; +% #if change is after next bill date, use old (this) pkg +% $skip_pkg->{$cust_pkg->change_to_pkgnum} = 1; +% } +% % my $pkg_amount = 0; % % #add recurring amounts for this package and its billing add-ons diff --git a/httemplate/view/cust_main/payment_history.html b/httemplate/view/cust_main/payment_history.html index e3599bc06..d81fe9935 100644 --- a/httemplate/view/cust_main/payment_history.html +++ b/httemplate/view/cust_main/payment_history.html @@ -228,9 +228,10 @@ my %opt = ( ( 'View invoices', 'Void invoices', 'Unvoid invoices', 'Apply payment', 'Refund credit card payment', 'Refund Echeck payment', + 'Post refund', 'Post check refund', 'Post cash refund ', 'Refund payment', 'Credit card void', 'Echeck void', 'Void payments', 'Unvoid payments', - 'Delete payment', 'Unapply payment', - 'Apply credit', 'Delete credit', 'Unapply credit', 'Void credit', 'Unvoid credit', + 'Unapply payment', + 'Apply credit', 'Unapply credit', 'Void credit', 'Unvoid credit', 'Delete refund', 'Billing event reports', 'View customer billing events', ) diff --git a/httemplate/view/cust_main/payment_history/credit.html b/httemplate/view/cust_main/payment_history/credit.html index 3eed833d3..db2e5e582 100644 --- a/httemplate/view/cust_main/payment_history/credit.html +++ b/httemplate/view/cust_main/payment_history/credit.html @@ -1,4 +1,4 @@ -<% $credit. ' '. $reason. $desc. $change_pkg. $apply. $delete. $unapply. $void %> +<% $credit. ' '. $reason. $desc. $change_pkg. $apply . $unapply. $void %> <%init> my( $cust_credit, %opt ) = @_; @@ -138,15 +138,6 @@ $void = ' ('. if $cust_credit->closed !~ /^Y/i && $opt{'Void credit'}; -my $delete = ''; -$delete = areyousure_link("${p}misc/delete-cust_credit.cgi?".$cust_credit->crednum, - emt('Are you sure you want to delete this credit?'), - '', - emt('delete') - ) - if $cust_credit->closed !~ /^Y/i - && $opt{'Delete credit'}; - my $unapply = ''; $unapply = areyousure_link("${p}misc/unapply-cust_credit.cgi?".$cust_credit->crednum, emt('Are you sure you want to unapply this credit?'), diff --git a/httemplate/view/cust_main/payment_history/payment.html b/httemplate/view/cust_main/payment_history/payment.html index bf88a6607..fd336b86c 100644 --- a/httemplate/view/cust_main/payment_history/payment.html +++ b/httemplate/view/cust_main/payment_history/payment.html @@ -1,5 +1,5 @@ <% $payment. ' '. $info. $desc. - $view. $change_pkg. $apply. $refund. $void. $delete. $unapply + $view. $change_pkg. $apply. $refund. $void. $unapply %> <%init> @@ -154,18 +154,19 @@ if ( $apply && $opt{'pkg-balances'} && $cust_pay->pkgnum ) { my $refund = ''; my $refund_days = $opt{'card_refund-days'} || 120; -my $refund_right = ''; -$refund_right = 'Refund credit card payment' if $cust_pay->payby eq 'CARD'; -$refund_right = 'Refund Echeck payment' if $cust_pay->payby eq 'CHEK'; +my @refund_right = grep { $opt{$_} } $FS::CurrentUser::CurrentUser->refund_rights($cust_pay->payby); if ( $cust_pay->closed !~ /^Y/i - && $cust_pay->payby =~ /^(CARD|CHEK)$/ + && $cust_pay->payby =~ /^(CARD|CHEK|BILL)$/ && time-$cust_pay->_date < $refund_days*86400 && $cust_pay->unrefunded > 0 - && $opt{$refund_right} + && scalar(@refund_right) ) { + my $refundtitle = ($cust_pay->payby =~ /^(CARD|CHEK)$/) + ? emt('Send a refund for this payment to the payment gateway') + : emt('Record a refund for this payment'); $refund = qq! (<A HREF="${p}edit/cust_refund.cgi?payby=$1;!. qq!paynum=!. $cust_pay->paynum. '"'. - qq! TITLE="! .emt('Send a refund for this payment to the payment gateway') + qq! TITLE="! . $refundtitle . '">' . emt('refund') . '</A>)'; } @@ -184,16 +185,6 @@ $void = areyousure_link("${p}misc/void-cust_pay.cgi?".$cust_pay->paynum, || ( $cust_pay->payby !~ /^(CARD|CHEK)$/ && $opt{'Void payments'} ) ); -my $delete = ''; -$delete = areyousure_link("${p}misc/delete-cust_pay.cgi?".$cust_pay->paynum, - emt('Are you sure you want to delete this payment?'), - emt('Delete this payment from the database completely - not recommended'), - emt('delete') - ) - if $cust_pay->closed !~ /^Y/i - && $opt{'deletepayments'} - && $opt{'Delete payment'}; - my $unapply = ''; $unapply = areyousure_link("${p}misc/unapply-cust_pay.cgi?".$cust_pay->paynum, emt('Are you sure you want to unapply this payment?'), diff --git a/httemplate/view/cust_svc.cgi b/httemplate/view/cust_svc.cgi index 8ccfce3ff..aaf367882 100644 --- a/httemplate/view/cust_svc.cgi +++ b/httemplate/view/cust_svc.cgi @@ -1,4 +1,4 @@ -<% $cgi->redirect(popurl(1)."$svcdb.cgi?". $svcnum ) %> +<% $cgi->redirect($url) %> <%init> #needed here? we're just redirecting. i guess it could reveal the svcdb of a @@ -18,6 +18,12 @@ my $part_svc = qsearchs('part_svc',{'svcpart'=> $cust_svc->svcpart } ); die "Unknown svcpart" unless $part_svc; my $svcdb = $part_svc->svcdb; +my $url = svc_url( + 'm' => $m, + 'action' => 'view', + 'svcdb' => $svcdb, + 'query' => $svcnum, + ); </%init> diff --git a/rt/FREESIDE_MODIFIED b/rt/FREESIDE_MODIFIED index ace0d499b..05ffb2a46 100644 --- a/rt/FREESIDE_MODIFIED +++ b/rt/FREESIDE_MODIFIED @@ -165,3 +165,9 @@ share/html/Search/Elements/PickBasics lib/RT/CustomField.pm share/html/Admin/CustomFields/Modify.html share/html/Ticket/Create.html + +#allow RedirectToBasics to be set from schedule-appointments, RT#38481 +share/html/Search/Schedule.html +share/html/Elements/CalendarSlotSchedule +share/html/Ticket/Display.html + diff --git a/rt/lib/RT/Interface/Web_Vendor.pm b/rt/lib/RT/Interface/Web_Vendor.pm index c9bff6f36..ea3a498d6 100644 --- a/rt/lib/RT/Interface/Web_Vendor.pm +++ b/rt/lib/RT/Interface/Web_Vendor.pm @@ -423,12 +423,13 @@ sub ProcessColumnMapValue { my $value = shift; my %args = ( Arguments => [], Escape => 1, - FormatDate => \&default_FormatDate, @_ ); + my $FormatDate = $m->notes('FormatDate') || \&default_FormatDate; + if ( ref $value ) { if ( ref $value eq 'RT::Date' ) { - return $args{FormatDate}->($value); + return $FormatDate->($value); } elsif ( UNIVERSAL::isa( $value, 'CODE' ) ) { my @tmp = $value->( @{ $args{'Arguments'} } ); return ProcessColumnMapValue( ( @tmp > 1 ? \@tmp : $tmp[0] ), %args ); diff --git a/rt/share/html/Elements/CalendarDaySchedule b/rt/share/html/Elements/CalendarDaySchedule index 5be5b06bc..bac9a78d4 100644 --- a/rt/share/html/Elements/CalendarDaySchedule +++ b/rt/share/html/Elements/CalendarDaySchedule @@ -31,8 +31,13 @@ $CurrentUser => undef % my( $starts, $due, $col, $t ) = @{ $schedule{'scheduled'}->{$id} }; % my $s = int(($starts-$stime)/10); % my $e = int(($due-$stime)/10)-1; + +% #false laziness w/misc/xmlhttp-ticket-update.html & CalendarSlotSchedule +% my %hash = $m->comp('/Ticket/Elements/Customers', Ticket => $t); +% my @cust_main = values( %{$hash{cust_main}} ); + <AREA - onmouseover = "overlib('<%$id%>: <% FS::sched_avail::pretty_time($starts). '-'. FS::sched_avail::pretty_time($due) %><BR>XX miles away<BR>more info', WRAP, BGCOLOR, '#000000', FGCOLOR, '#<%$col%>')" + onmouseover = "overlib('<% FS::sched_avail::pretty_time($starts). '-'. FS::sched_avail::pretty_time($due) %><BR>' + <% $cust_main[0]->_FreesideURILabel |js_string %>, WRAP, BGCOLOR, '#000000', FGCOLOR, '#<%$col%>')" onmouseout = "nd(); return true;" shape = "rect" coords = "<%$s%>,0,<%$e%>,<%$height%>" diff --git a/rt/share/html/Elements/CalendarSlotSchedule b/rt/share/html/Elements/CalendarSlotSchedule index 045d6e436..251347148 100644 --- a/rt/share/html/Elements/CalendarSlotSchedule +++ b/rt/share/html/Elements/CalendarSlotSchedule @@ -9,6 +9,7 @@ $LengthMin => $default_timestep $custnum => undef $pkgnum => undef + $RedirectToBasics => 0 </%ARGS> % foreach my $username ( @username ) { % @@ -48,10 +49,16 @@ % $selectable = 0; % % if ( $starts >= $tod_row ) { #first row +% +% #false laziness w/misc/xmlhttp-ticket-update.html & CalendarDaySchedule +% my %hash = $m->comp('/Ticket/Elements/Customers', Ticket => $t); +% my @cust_main = values( %{$hash{cust_main}} ); +% % $content .= ($content?', ':''). #$id. ': '. % #false laziness w/xmlhttp-ticket-update.html % FS::sched_avail::pretty_time($starts). '-'. -% FS::sched_avail::pretty_time($due); +% FS::sched_avail::pretty_time($due). +% ': '. encode_entities($cust_main[0]->_FreesideURILabel); % #'install for custname XX miles away'; #XXX placeholder/more % $draggable_ticketid = $id; % $draggable_length = $due - $starts; @@ -87,7 +94,11 @@ % # (XXX and eventually, package) % my $cust_main = qsearchs('cust_main', { custnum=>$custnum } ) % or die "unknown custnum $custnum"; -% my $Queue = $cust_main->agent->ticketing_queueid || 1; # || $default_queueid;#XXX really, pick pkg_category queue +% +% my $conf = new FS::Conf; +% my $Queue = $conf->config('ticket_system-appointment-queueid') +% or die "ticket_system-appointment-queueid configuration not set"; +% % my $member = "freeside://freeside/cust_main/$custnum"; % %warn my $Starts = int($tod_row/60). ':'. sprintf('%02d',$tod_row%60). ':00'; @@ -100,7 +111,8 @@ % '&Starts='. $Date->strftime('%F').'%20'. $Starts. % '&Due='. $Date->strftime('%F').'%20'. $Due. % '&new-MemberOf='. $member. #XXX uri_escape? -% '&Status=new'; +% '&Status=new'. +% '&RedirectToBasics='.$RedirectToBasics; % #'&Requestors='. #XXX Freeside customer requestor(s) (package? onmouseover = "boxon(this);" diff --git a/rt/share/html/Elements/ShowCustomFieldDate b/rt/share/html/Elements/ShowCustomFieldDate index 92ab7679a..1536935c5 100644 --- a/rt/share/html/Elements/ShowCustomFieldDate +++ b/rt/share/html/Elements/ShowCustomFieldDate @@ -49,7 +49,11 @@ my $content = $Object->Content; my $DateObj = RT::Date->new ( $session{'CurrentUser'} ); $DateObj->Set( Format => 'unknown', Value => $content, Timezone => 'utc' ); - $content = $DateObj->AsString(Time => 0, Timezone => 'utc'); + if ($m->notes('FormatDate')) { + $content = $m->notes('FormatDate')->($DateObj); + } else { + $content = $DateObj->AsString(Time => 0, Timezone => 'utc'); + } </%INIT> <%$content|n%> <%ARGS> diff --git a/rt/share/html/Elements/ShowCustomFieldDateTime b/rt/share/html/Elements/ShowCustomFieldDateTime index 2ba873aad..e179d6a4b 100644 --- a/rt/share/html/Elements/ShowCustomFieldDateTime +++ b/rt/share/html/Elements/ShowCustomFieldDateTime @@ -49,7 +49,11 @@ my $content = $Object->Content; my $DateObj = RT::Date->new ( $session{'CurrentUser'} ); $DateObj->Set( Format => 'ISO', Value => $content ); - $content = $DateObj->AsString; + if ($m->notes('FormatDate')) { + $content = $m->notes('FormatDate')->($DateObj); + } else { + $content = $DateObj->AsString; + } </%INIT> <%$content|n%> <%ARGS> diff --git a/rt/share/html/Search/Elements/ResultsStructuredView b/rt/share/html/Search/Elements/ResultsStructuredView index 0e9457c45..5b9db4ee1 100644 --- a/rt/share/html/Search/Elements/ResultsStructuredView +++ b/rt/share/html/Search/Elements/ResultsStructuredView @@ -54,7 +54,6 @@ $Format => undef #Callbacks $WriteHeader => sub { $RT::Logger->error('WriteHeader callback required'); '' } $WriteRow => sub { $RT::Logger->error('WriteRow callback required'); '' } -$FormatDate => sub { $_[0]->AsString } </%ARGS> <%INIT> @@ -146,7 +145,6 @@ while ( my $Ticket = $Tickets->Next()) { push @out, ProcessColumnMapValue( $ColumnMap->{$col}{'value'}, Arguments => [ $Ticket, $row ], - FormatDate => $FormatDate, ); } #foreach $subcol $value = join('', '<span>', @out, '</span>'); diff --git a/rt/share/html/Search/Results.xls b/rt/share/html/Search/Results.xls index 8b94e22ba..d9d83568c 100644 --- a/rt/share/html/Search/Results.xls +++ b/rt/share/html/Search/Results.xls @@ -118,11 +118,11 @@ my $WriteRow = sub { $row++; }; -my $FormatDate = sub { +$m->notes('FormatDate', sub { my $DateObj = shift; return '' if $DateObj->Unix == 0; return time2str('%Y-%m-%dT%H:%M', $DateObj->Unix); -}; +}); # Write everything to the worksheet $m->comp('Elements/ResultsStructuredView', @@ -132,7 +132,6 @@ $m->comp('Elements/ResultsStructuredView', Format => $Format, WriteHeader => $WriteHeader, WriteRow => $WriteRow, - FormatDate => $FormatDate, ); # Set column widths diff --git a/rt/share/html/Search/Schedule.html b/rt/share/html/Search/Schedule.html index be5a140ef..ccd844bf8 100644 --- a/rt/share/html/Search/Schedule.html +++ b/rt/share/html/Search/Schedule.html @@ -201,8 +201,8 @@ <& /Search/Calendar.html, @_, Query => "( Status = 'new' OR Status = 'open' OR Status = 'stalled') - AND ( Type = 'reminder' OR 'Type' = 'ticket' )", - #XXX and we have the magic custom field + AND ( Type = 'reminder' OR 'Type' = 'ticket' ) + AND Queue = $queueid ", slots => scalar(@usernames), Embed => 'Schedule.html', DimPast => 1, @@ -212,6 +212,7 @@ #oops, more freeside abstraction-leaking custnum => $ARGS{custnum}, pkgnum => $ARGS{pkgnum}, + RedirectToBasics => $ARGS{RedirectToBasics}, ], &> @@ -222,6 +223,11 @@ my $timestep = RT->Config->Get('CalendarWeeklySizeMin') || 30; #1/2h </%ONCE> <%init> +#abstraction-leaking +my $conf = new FS::Conf; +my $queueid = $conf->config('ticket_system-appointment-queueid') + or die "ticket_system-appointment-queueid configuration not set"; + my @files = (); #if ( ! $initialized ) { push @files, map "overlibmws$_", ( '', qw( _iframe _draggable _crossframe ) ); diff --git a/rt/share/html/Ticket/Display.html b/rt/share/html/Ticket/Display.html index 41684c5be..96a49d4e4 100755 --- a/rt/share/html/Ticket/Display.html +++ b/rt/share/html/Ticket/Display.html @@ -99,6 +99,7 @@ $id => undef $TicketObj => undef $ShowHeaders => 0 $ForceShowHistory => 0 +$RedirectToBasics => 0 </%ARGS> <%INIT> @@ -217,6 +218,7 @@ $m->callback( ); # This code does automatic redirection if any updates happen. +$m->notes('RedirectToBasics' => 1) if $RedirectToBasics; my $path = '/Ticket/'. ( $m->notes('RedirectToBasics') ? 'Modify.html' : 'Display.html' ); MaybeRedirectForResults( diff --git a/torrus/configs/torrus-siteconfig.pl b/torrus/configs/torrus-siteconfig.pl index 504c0f37d..0ecec1c92 100644 --- a/torrus/configs/torrus-siteconfig.pl +++ b/torrus/configs/torrus-siteconfig.pl @@ -25,7 +25,7 @@ $Torrus::Freeside::FSURL = '%%%FREESIDE_URL%%%'; $Torrus::Renderer::displayReports = 1; push (@Torrus::Collector::loadModules, 'Torrus::Collector::ExternalStorage'); $Torrus::SQL::connections{'Default'}{'dsn'} = - 'DBI:mysql:dbname=freeside'; #XXX sub in DATASOURCE + 'DBI:Pg:dbname=freeside'; #XXX sub in DATASOURCE $Torrus::SQL::connections{'Default'}{'username'} = 'freeside'; #DB_USER $Torrus::SQL::connections{'Default'}{'password'} = ''; #DB_PASSWORD diff --git a/torrus/perllib/Torrus/Renderer/Freeside.pm b/torrus/perllib/Torrus/Renderer/Freeside.pm index 9a7c023be..d97920e15 100644 --- a/torrus/perllib/Torrus/Renderer/Freeside.pm +++ b/torrus/perllib/Torrus/Renderer/Freeside.pm @@ -3,7 +3,7 @@ package Torrus::Renderer::Freeside; use strict; use warnings; use base 'Torrus::Freeside'; -use FS::UID qw(cgisuidsetup); +use FS::UID qw(setcgi adminsuidsetup); use FS::TicketSystem; our $cgi = ''; @@ -15,7 +15,9 @@ sub freesideSetup { $cgi = $Torrus::CGI::q; - cgisuidsetup($cgi); + setcgi($cgi); + + adminsuidsetup; FS::TicketSystem->init(); } |