web-based password changer!
[freeside.git] / TODO
diff --git a/TODO b/TODO
index b93c916..6aee3e7 100644 (file)
--- a/TODO
+++ b/TODO
-$Id: TODO,v 1.40 2000-01-27 00:27:50 ivan Exp $
+$Id: TODO,v 1.67 2001-08-19 09:08:18 ivan Exp $
 
-If you are interested in helping with any of these, please join the mailing
-list (send a blank message to ivan-freeside-subscribe@sisd.com) to avoid 
-duplication of effort.
+If you are interested in helping with any of these, please join the
+*development* mailing list (send a blank message to
+ivan-freeside-devel-subscribe@sisd.com) to avoid duplication of effort.
 
 ---
 
+Does Freeside currently support notification to the customer that their
+credit card on file is about to expire? What about notification that their
+credit card was declined after they sign up, say like in 5 months when it
+fails? If not are these options being planned to be added in the next
+release? I think they would be nice options to see Freeside support.
+.
+Tim Jung
+System Admin
+Internet Gateway Inc.
+tjung@igateway.net
+
+deleting an account doesn't remove any references to it in cust_main_invoice.
+it should, or error perhaps?  ("this account is used as an invoice destination,
+remove that first?")  or the cust_main_invoice should be changed to literal.
+it'll bounce, but that seems reasonable...
+
+also cust_main_invoice uses `mydomain' in a way that will have to be changed
+when jeff's branch merges
+
+> I can't use the built in agent mechanism to do ACLs for things like
+> suspension and cancellation, but I can use it for selecting which
+> package types the marketing types are allowed to sign up.  Problem is,
+> I can't seem to figure out the rules as to how cust_main.cgi figures
+> out which packages to stick in the list of packages available for new
+> customers.
+.
+Currently, only packages with a single service with table `svc_acct'
+appear on the `New Customer' screen.  Other packages may be ordered from
+the `Order and cancel packages' link on the main `Customer View' screen.
+.
+Perhaps the `New Customer' UI could be changed like the new `Service Edit'
+screen in CVS, to support all available packages, not just those with a
+single service with table `svc_acct'.
+
+> +----------
+> | Thank you for the response.That being the case do you have any
+> | recommendations as to the most effective way to add prior balances?
+> +----------                                                          
+> 
+>   You could create a package called 'Starting Balance' and sell it
+> to them.  Adjust the price as neccessary.
+.
+Yes, this is what to do with the current system.
+.
+In the future, this is what the database would do internally, but
+eventually I'd like the user-interface and the Perl API to offer a
+one-step way to "add a starting balance" that does this underneath.
+.
+I'm also thinking it might be necessary for accouting reasons to add a
+flag to these charges and payments against them, so you can run totals and
+reports ignoring them.  Not sure about this.
+
+> Does Freeside currently support notification to the customer that their
+> credit card on file is about to expire?
+> What about notification that their
+> credit card was declined after they sign up, say like in 5 months when it
+> fails?
+
+
+random templating thoughts:
+for starters, read the "Template Syntax" section of Text::Template
+that sums up the starting philosophy pretty well
+> Text::Template is unsuitable because it's backwards, but don't worry about
++that quite yet.  everything in that section applies
+..
+then ttp://forum.swarthmore.edu/epigone/modperl/frahthonbror/19990525144012.8806.qmail@plover.com
+..
+then: given that as background, freside will use a simple template syntax designed
++to interact well with the webmonkey html editors, and will export to Mason
++and Apache::ASP for starters, and eventually any "right-side-out" "eval"
++templating system
+
+
+make svc_acct.import complain if you try to use a local file
+
+make the invoices configurable such that:
+> Also, Can you change FreeSide so that it says "GST" instead of TAX?
+
+"Andrew Wafula" <awafula2000@yahoo.co.uk>:
+> Following my recent questions on money_char, i would like to suggest that
+> money_char be used as well in cust_bill.cgi and cust_main.cgi so that the
+> charges are seen in whatever money_char is used in a particular country
+> instead of the default dollar currecny. This would make it such that the
+> system has one monetary unit in its entirety rather than only for the
+> invoicing part. I guess this would be something others would appreciate as
+> well.
+
+Things that would be nice but probably won't happen: testing with 
+MySQL+Sleepycat, a fix for the long-RADIUS-attributes-with Pg problem,    
+passive session monitoring with RADIUS (tailing a log file or monitoring a
+database, as opposed to using a RADIUS with proper callbacks).
+
+anything doing transactions in the web interface should likely move into *.pm.
+(transactions are here woo!)
+
+write some sample billing expressions with libcflow-perl :)
+
+(future templating)
+.
+(at least) These questions need to be answered for Mason, Apache::ASP and
+eperl.  If eperl becomes too much of a pain, I'm okay with forgetting 
+about it - it's not well-maintained.
+.
+How do you interpolate a value?
+mason: <% $value %>
+apache-asp(don't think there is a "with-escaping-HTML" way?): <%= $value %>
+.
+How do you interpolate a value without escaping HTML?
+mason: <% $value |n %>
+apache-asp??: <%= $value %> 
+.
+How do you interpolate a (possibly non-stand-alone, non-interpolated) 
+control structure?  With an inital % - for example:
+.     
+mason:
+        % foreach $value ( @values ) {
+        <OPTION><% $value %></OPTION>
+        % }
+apache-asp:
+        <% foreach $value ( @values ) { %>
+        <OPTION><%= $value %></OPTION>
+        <% } %>
+.     
+This is one of the things I worry that the webmonkey HTML editors will not
+like about Mason.  That and the <%INIT> and <%PERL> tags.
+
+
+in the context of a state machine (& MySQL and Pg locking) for LDAP export:
+.
+Also note that Pg locks are for the duration of the transaction, so 
+Freeside needs to start using transactions for this to happen.  
+FS::UID::adminsuidsetup should explicitly set AutoCommit false and export
+some functions to begin and end transactions on $FS::UID::dbh.  (Well,
+eventually FS::UID should be an overloaded subclass of a DBI handle, but
+we don't have to worry about that until perl threads + mod_perl + threaded
+Apache 2.0 is stable, i.e. quite some time).
+
+Postfix
+also supports virtual domains in a way that's somewhat similar (but not
+compatible with) the way sendmail does.  In the postfix world, all virtual
+domain info is contained in one file (similar to the virtusertable), but
+is formatted as such:
+bar.com         virtual
+foo@bar.com             some@other.net
+quux@bar.com    localuser1
+...
+and so on.  After the file is generated, it gets compiled into a hash db
+using, "postmap /etc/postfix/virtual".
+
+
+steal all the play-nice-with-cache stuff back from RT
+
+Use this for email checking:
+libemail-valid-perl - Check validity of Internet email addresses
+.                                                                
+This module determines whether an email address is well-formed, and 
+optionally, whether a mail host exists for the domain.
+
+
+wishlist from drenalin@ultimanet.com:
+* delete button for customers
+- 15th of the month billing
+- field for customer referrals (naming who it is) and automatically crediting
++that account
+- ability to edit referrals
+- catch expired credit cards and notify via email when they are expiring
+* show passwords
+- set default shell to /bin/false when adding ppp account
+- import list of POPs from Megapop (see www.ultimanet.com and click on locations
++from text in index page)
+
+
+wishlist wrt projects/consulting from jivko@ijs.com:
+>The other thing, which is the serious part, is the following: We do not
+>offer dial-up services and that part of the system does not have to work,
+>but we have many customer, for which we do both hosting and consulting work.
+.
+>The hosting can be handled by freeside fine, but in the little time I spent 
+>on it I could not see how exactly to solve the consulting problem. What I
+>would love to see there is a way to create 'projects' for each customer and
+>ability to follow up on those (I mean to be able to add new comments,
+>descriptions, progress updates etc.). You already have the feature, which
+>allows multiple people to access the system with different access rights so
+>it should be possible to make it keep track of who and when updated given
+>'project' so we could have the developers access the database and update
+>the projects they are working on.
+.
+Hmm.  Is this accurate:  Each project is related to a single customer, and
+zero or more packages (billing items).  Each project has a name, due date,    
+and zero or more log entries consisting of date, user, and a text field
+(for "new comments, descriptions, progress updates etc." - would you like
+anything more specific?)
+
+In conjunction with that it looks like you need the ability to create
+"one-off" packages on the fly for arbitrary charges.
+
+> Additionally it would be nice to have a page, where all open projects can
+> be listed and not only that but be able list them by date too. (Say I want
+> to find out which projects are due today or two days from today, or which
+> projects are running late)
+.
+Browse/search project by date and customer.
+.
+> Finally it would be real nice if the billing script could add the cost for
+> all completed projects (or work done by the hour) to the monthly bill along   
+> with the hosting information and using the description of the work from the
+> 'project' table. 
+.
+Can you be more specific about your needs here?
+.
+> This is a lot of work, unless you disagree :-), and I would not expect you
+> to do all of it - we can work on it too - but I would hope for you to lead 
+> the effort.
+.
+I'm trying to get a handle on specifically what you need.
+.
+> Oh, and there is one more thing, but that should be simple to do. I would
+> like to be able to give the customers access to selected information from
+> their account. I want them to be able to monitor the progress of their
+> projects and the status of their accounts. 
+.
+Ok.
+.
+> Does all this make sense? It must be close to what you need at your office
+> though or at least I think so.
+.
+Yes, but we're small and have been tracking projects manually.
+.
+.
+>You may have this already .. what I have in mind is the following. Say you
+>have a customer for which you do hosting and some consulting (CGI, JAVA
+>etc) At the end of the month you need to bill the customer for the hosting,
+>35hours of Java programming and 10 hours of HTML authoring. The last two
+>are not because the project is over but because the work was done during
+>that month.
+>
+>So the way I see it, and it could be wrong, is that during the month the
+>people who work on particular project enter their comments and time spent
+>on the project. At the end of the month the billing script generates
+>invoices in which besides the hosting charges there are also charges for
+>work done during the period.
+>
+>Currently we do this in a very stupid way by maintaining a customer file,
+>in which a script saves things to be invoiced. At the end of the month a
+>script goes through these files and generates invoices with all items from
+>the files, which have not been flagged as 'paid'. The convenience of this
+>is that no one needs to worry about the invoices containing the items they
+>need to contain.
+
+
+
+first package select field in edit/cust_main.cgi isn't sticky on errors, yuck
+(also referral isn't sticky either?  yuck)
+
+> 1. A Web Form to the user get his account added automatically . The
+> /etc/raddb/users and /etc/passwd would be updated automatically (these
+> file are on the same machine Freeside is). I guess the the Add
+> Customer
+> page with some customization could be the work.
+> 2. A Canceling Account Web Form available to user cancel his account   
+> at
+> any time he wants.
+> 3. A Password Changing Web Form where the user could change your
+> password by sending your username, old and new password.
+> 4. Additional POP Accounts Creation where the user supply only his
+> main
+> username/password (probably provided from a PPP Account already
+> created)
+> and his POP username/password for this specific account.
+(actually need something more general i guess - probably need some way to say
+which accounts (svc_acct) can log in and make changes per customer (cust_main) )
+
+this is awfully vauge, perhaps email for more info?  don't want to alientate
+someone with accounting experience, but i just don't have time right now.
+.
+Hi Ivan,
+.
+Thanks for the information. It took me a little while to figure it out, but I
++was
+able to create an invoice. As a lamer and an accountant, may I make a few
+suggestions?
+.
+On the Customer view page:
+1) Layout the information in the manner the invoicing process is conducted.
+    a) Customer information                                                
+    b) Package Ordering    
+    c)  Add a "Create & Edit Invoice" section - this allows auditing of  the
+invoice     before it is processed.
+    d) then put the billing section to actually process the invoice
+    e) then put payment history information                        
+.
+Thanks,
+Mark Roberts <mroberts@iopenenterprises.com>
+
+
+new overdue code might be overzealous.  test carefully.
+
+Port Freeside to use the modules that were abstracted from it:
+Net::SSH, Net::SCP, DBIx::DataSource and DBIx::DBSchema, at least.
+
+"first package" and email invoice (?) not sticky on errors in new/edit customer
+screen.
+
+http://www.ipmeter.com/ integration would be useful
+
+http://tangram.sourceforge.net/
+Tie::DBI
+
+mmm, http://pootpoot.com/~dlowe/DBIx-Table/
+
+The cybercash links in htdocs/docs/config.html are b0rken.
+
+Yes.  Which is what I've been trying to tell you.  (destination user,
+destination domainname) would be represented by the svcnum of a record in
+svc_acct.  (In retrospect, using the uid instead of the svcnum was a bad
+choice).  (domuser, domain name) would be part of the svc_acct_sm record,
+as domuser and domsvc.
+. 
+Upon further consideration, I'll probably eliminate the svc_acct_sm table
+completely, and just add a field for the svcnum of a domain and the svcnum
+of a destination mailbox to svc_acct (or perhaps a one-to-many
+relationship - multiple svcnum(s) for multiple destination mailboxes.
+hmm.)
+
+> > > > Longer-term, I need to do something about the length of the             
+> > > > column names -                                                          
+> > > > The SQL1992 standard defines 18 character column names,                 
+> > > > which would be a                                                        
+> > > > reasonable goal.                                                        
+> > >                                                                           
+> > > Maybe the thing to do would be to separate these out to separate          
+> > > tables.                                                                   
+> > > then we could simply use something like id, attrib_name,                  
+> > attrib_value                                                                
+> > > to                                                                        
+> > > store all of the radius values.                                           
+> >                                                                             
+> > Hmm, no, that's not quite right.  You don't want to store the actual        
+> > strings in the records for each account.  Probably need a table that        
+> > corresponds to the RADIUS dictionary file, with a list of                   
+> > attributes and                                                              
+> > attribute id's, then reference the attribute by id and not name.            
+> >                                                                             
+> > The more difficult bit is handling the service definitions                  
+> > correctly -                                                                 
+> > part_svc and it's effects.                                                  
+>                                                                               
+> Yes that could be a bit tricky. Perhaps just one "radius" field in            
+> part_svc that held a list of id's from the radius table that applied          
+> that particular service?                                                      
+. 
+No, that wouldn't let you set defaults or fixed values for each attribute,
+like part_svc currently does.
+
+
+hmm - if you delete an account in svc_acct somehow that a mail alias points to,
+svc_acct_sm.export will fail.  make sure this can't be done using
+the web interface.
+
+Bug: during the linking process apparantly you can link too many services to 
+a package.  *sigh*
+
+zip code i18n is not very good :( but at least US, CA, HU, ?
+
+ut_phonen doesn't check data length.  several
+orthogonal cleanup projects here.  *sigh*
+
+update the cybercash links in config.html and in the homepage.  add more explicit support for other payment types.  etc.
+
+From "Tim Jung" <tjung@igateway.net>
+.
+Automatic CC Decline Notices via email
+Block Time billing for prepaid internet cards (400 hours or whatever block
+time of hours)
+Trouble Ticket System with simple search function for Knowledge Base feature
+Employee Timecards
+Credit Card System support for Red Hat's CCVS, and other Linux credit card
+programs
+Contact Manager/Lead Tracking
+Pre-Sale Quotes
+Cisco NetFlow Account for IP traffic billing
+VoIP and FoIP billing
+Roaming per minute billing based on Radius Proxy support or number they
+dialed into from Radius logs (800# etc)
+Support for OpenSRS Domain Registration
+Support for TUCOWS signup CDs
+
+
+dbdef-create for postgres
+
+pro-rating, fiddling dates
+
+It looks like svc_acct.import doesn't deal well with comments and
+multi-attribute lines.
+
+ivan@rootwood:~/freeside_current$ rgrep -r domuid * | cut -d: -f1 | sort |
+uniq
+CVS/Base/TODO
+TODO
+bin/fs-setup
+bin/svc_acct_sm.export
+bin/svc_acct_sm.import
+htdocs/docs/man/svc_acct_sm.txt
+htdocs/docs/schema.html
+htdocs/edit/CVS/Base/part_svc.cgi
+htdocs/edit/part_svc.cgi
+htdocs/edit/process/svc_acct_sm.cgi
+htdocs/edit/svc_acct_sm.cgi
+htdocs/search/svc_acct_sm.cgi
+htdocs/view/svc_acct_sm.cgi
+site_perl/svc_acct_sm.pm
+
+rootwood:COMPLETEHOST/TODO
+
+Currently, you set a value in the %FS::UID::callback hash with a coderef  
+of the code you want to execute, but this was bad design and will shortly
+be changed to a subroutine to which you pass your coderef to register it.
+
+This is not a bug, it is how the system is currently designed.  After 
+defining a new package, you need to specifically allow agent types to
+purchase packages.  You can do this from the edit screen of the new agent
+type.
+.
+It wouldn't be a bad idea to add a configuration value that makes new
+packages available for all currently existing agent types automatically.
+.
+On Fri, Apr 07, 2000 at 10:50:35AM -0500, David Morton wrote:
+> For some reason, the type_pkgs table didn't get updated when I tried to
+> create a domain service and package...  insert into type_pkgs values   
+> (4,1);  fixed it up so that I could actually order the package.
+
+
+From: Chuck Cochems <zaphod@tdl.com>
+.
+1) automated generating of late notices.  So far the only way I know to
+generate one is to re-invoice manually.
+. 
+2) smart credit card rejection handling.  It should e-mail a note at
+least, explainig that it did't go through, and why.
+. 
+3)coment field in the main customer record.
+.
+4) streamlined payment entry feature. the current scheme has it fairly
+buried.
+. 
+5) queries to show al customers who owe money,and such stuff as that.
+
+
+credits aren't counted against past invoices?  hmm.  something needs to be
+done to "apply payment" genericly. and zero out invoices etc.
+
+more email which should make it into a more organized TODO list:
+.
+I would also love to see Freeside support bandwidth billing by reading the
+Cisco NetFlow Accounting data so we and other ISP's could automatically bill
+co-located servers and even potentially other virtually hosted sites like
+MUD, Palace Chat, IRC Chat, etc based on the bandwidth they use or average
+sustained rates or whatever. I'm not much of a programmer so I don't know
+what all this entails but I did download a NetFlow client agent/whatever for
+Linux though.
+ .
+It would also be nice to see Freeside be able to read Apache log files and
+bill customers for web traffic that way as an option also. Plus an option to
+bill for excessive disk usage without having to use quotas if you didn't
+want to, would be a nice feature as well. So you could monitor with a script
+or something to see how much disk space a user was using then get some
+average and charge a certain amount for anything above some preset limit for
+that account type. I might be able to hack something like this up, but I'm
+not 100% sure where to start or if there is something out there that could
+be modified or not.
+.
+Do you think that you will ever support the HKS CCVS (Hell's Kitchen
+Software Credit Card Verification Software) since Red Hat bought them out
+and is going to be including that for credit card processing when you buy
+the professional version? What about possibly supporting the OpenCCVS which
+is a GNU/GPL version of a credit card program? I haven't had time to comb
+through the Freeside code to see how hard it would be to add support for
+these as externally called programs.
+.
+Also any thoughts on help desk, and knowledge base stuff? Any thoughts on
+this stuff, and how possible and what kinds of work or time frame would be
+involved?
+.
+Tim Jung
+System Admin
+Internet Gateway Inc.
+tjung@igateway.net
+
+
+
+           CVS via SSH (Score:1)
+           by platinum (jedgar at fxp dot org) on Thursday September 30, @07:13PM EDT (#4)
+           (User Info) http://www.fxp.org/~jedgar
+           The links above are your best bet for basic cvs server configuration. Once you have a pserver set up, you
+           may consider using cvs via ssh. All you need to do is the following: 
+
+           1) Have ssh and sshd set up on the client and server machines 
+           2) Set CVSROOT="joe@example.com:/home/ncvs" 
+           3) Set CVS_RSH="/usr/local/bin/ssh" 
+           4) Use cvs normally 
+           (Obviously, insert the proper host/paths above) 
+
+           You can also set up cvs/ssh to not need a password every time (similiar to an initial 'cvs login'): 
+
+           1) run ssh-keygen on client machine using no passphrase. 
+           2) copy/add ~/.ssh/identity.pub on the client to ~/.ssh/authorized_keys on the server 
+           (man ssh for more details) 
+
+           The main reason I mentio
+           CVS via SSH (Score:1)
+           by platinum (jedgar at fxp dot org) on Thursday September 30, @07:13PM EDT (#4)
+           (User Info) http://www.fxp.org/~jedgar
+
+
 There's no way to do this currently, though it would be pretty
 straightforward to modify the source - specifically, the _collect_
 subroutine in FS::cust_main.
@@ -67,12 +582,12 @@ specify the password, then receive an error and are returned to the form?)
 
 more DOC:
 Thought some of you might be interested in this:
-  
+. 
 <ftp://ftp.minivend.com/pub> has CyberCash compatibility modules for 
 Paymentnet <http://www.paymentnet.com> and Authorizenet 
 <http://www.authorizenet.com> which should allow you process transactions
 using those services as well as CyberCash.
-
+.
 The files are named CCLib.pm.paymentnet and CCLib.pm_authorizenet,
 respectively, and are installed by renaming to CCLib.pm and moving to your
 site_perl directory.  Otherwise, follow the directions for Cybercash v2 in
@@ -113,10 +628,9 @@ in real-time instead of exporting periodically.  See
 <http://www.mysql.com/Manual_chapter/manual_Common_problems.html#Replication>.
 
 these go in docs:
-<http://www.sisd.com/freeside/list-archive/msg00546.html>, and
-<http://www.sisd.com/freeside/list-archive/msg00554.html>
+<http://www.sisd.com/freeside/list-archive/msg00541.html> (was 546), and
 
-and http://www.sisd.com/freeside/list-archive/msg00423.html
+and http://www.sisd.com/freeside/list-archive/msg00421.html (was 423)
 
 > > 5: Is there anyway to get freeside to send a sysadmin a warning when a
 > > credit card has expired?
@@ -196,7 +710,7 @@ statement!
     this if you are using it.
 
 > 2. can customers view their bills on-line.                                    
+. 
 Not yet; it needs to be proxied from Freeside to a customer web server in
 a secure way using something not completely unlike the fs_passwd,
 fs_passwdd, fs_passwd_server trio.
@@ -204,10 +718,10 @@ fs_passwdd, fs_passwd_server trio.
 
 > Lastly, if someone over pays on an invoice, the credit part does not flow
 > over to other invoices..
-
+.
 The total balance flows over correctly, but individual payments don't.
 The code you're looking for is in FS::cust_pay::insert
-
+.
 The question of what to do with overpayments that don't have another 
 invoice to flow into (yet.. or possibly not) is still an open one.    The
 legacy system Freeside replaced long ago had a separate place for this
@@ -226,7 +740,7 @@ warn or complain or something when invoice_from is empty (and we use it)
 Right now Freeside uses the `freq' field of a package definition as a 
 number of months.  The specific section of code you're looking for is in  
 FS::cust_main::bill:
-        
+.       
         #change this bit to use Date::Manip?
         #$sdate=$cust_pkg->bill || time;
         #$sdate=$cust_pkg->bill || $time;
@@ -238,10 +752,10 @@ FS::cust_main::bill:
         $cust_pkg->setfield('bill',
           timelocal($sec,$min,$hour,$mday,$mon,$year));
         $cust_pkg_mod_flag = 1;
-  
+. 
 ..and when I went poking for this, looks like it tells us just what needs   
 to be done!  Hehehe...
-
+.
 Date::Manip can handle cool things like "+ 1 month" (actually the current
 case of /^(\d+)$/ would have to be added as a special case of "+ $1 
 month") and "+ 30 days" (what you need) and even "+ 5 business days" !
@@ -252,7 +766,7 @@ On Wed, Apr 28, 1999 at 08:38:16PM +0000, Kristian Hoffmann wrote:
 > understand, when you run svc_acct.export, it rewrites the /etc/passwd,
 > /etc/shadow, etc. files.  Is this only for initial setups with the
 > export hooks being in the pm's?
+.
 You can use both, or just one method.  The configuration files control    
 this.  One of the things in the TODO is to take out the last few things   
 that aren't customizable wrt this and put them in config files.
@@ -291,20 +805,7 @@ that error because it didn't exist yet.  Sounds like a buglet to me.  I'll
 try to fix that soon; in the meantime you can add the invoicing email 
 address afterwords.
 
-Postgres `money' time sucks rocks anyway.  I'll probably just require 6.5
-and use the numeric types, which *finally* work right.
-On Sat, Apr 24, 1999 at 12:52:00PM -0700, Mr. Poet wrote:
-> Software error:
-> Error creating cust_bill record: ERROR: parser:
-> attribute 'charged' is of type 'money' but expression
-> is of type 'float8' You will need to rewrite or cast 
-> the expression ! Check updated but unbilled packages 
-> for customer1
-.
-Postgres `money' time sucks rocks anyway.  I'll probably just require 6.5
-and use the numeric types, which *finally* work right (well, according to 
-the web site, anyway).
-.
+(workaround for postgres before 6.5) (unlikely to ever be implemented)
 In the mean-time, this could probably be fixed with the reverse of        
 the kludge in FS::Record::new.  This removes `$' and `,' from money fields
 coming out of the database.  Something which fixed up the data so Postgres
@@ -312,15 +813,13 @@ was happy with it could go in FS::Record::_quote, for data going into the
 database.
 
 our data display problem might be a Freeside problem wrt not using 
-Oracle-compatible DBI syntax (uses the return value from $sth->execute as
-a number of rows).  Fixing this is on the TODO.
+Oracle-compatible DBI syntax (fixed using the return value from $sth->execute
+as a number of rows - something else?).
 
 hooks for arbitrary commands out of configuration files
 svc_acct.pm svc_acct_sm.pm etc.
 
 Add this to a FAQ, along with doing it for middle names:
-
-
 >  What I'm finding difficult is how to easily 
 > customize fields.  For example, I am trying to add a "middle name" field
 > to the Customer Edit, view, etc.  If I'm going about it right, it appears
@@ -334,7 +833,7 @@ You have the basic idea.  To implement that completely, I would:
 - Document the change in a new file, htdocs/docs/upgrade4.html
 * Run bin/dbdef-create
 * Add the new field to edit/cust_main.cgi and edit/process/cust_main.cgi
-
+.
 For bonus points, I'd grep around for the various bits which use "$first 
 $last" or "$last, $first" and replace them with a method call in cust_main.pm,
  , like search/cust_main.cgi
@@ -442,8 +941,6 @@ the web interface in general needs to be redone in a more abstract way.
 
 false laziness: some of search/svc_acct_sm.cgi was copied to search/svc_domain.cgi.  but web interface in general needs to be rewritten in a mucho cleaner way.
 
-Portability: in FS::Record, $sth->execute does not return a number of rows for all DBD's.  see man DBI
-
 subroutine the where clause (eventually all SQL) as OO perhaps (has anyone done this?)
 
 add a select method to FS::Record?
@@ -834,23 +1331,23 @@ lease... probably doesn't make a difference in the ordering... but if you
 cancel a router lease the inventory should come back.  hmm.)
 
 -- Matt's wishlist ---
-
+.
 From matt@michweb.net Fri Feb 20 16:39:53 1998
 Date: Thu, 19 Feb 1998 23:20:11 -0500
 From: Matt Simerson <matt@michweb.net>
 Reply-To: quadran-developer@netgoth.com
 To: quadran-developer@netgoth.com
 Subject: Re: Welcome to quadran-developer
-
+.
 >Whats it based on and what is it supposed to do?  I'm interested, but
 >unfortunatly, I don't have that much time to help on the project (I'm busily
 >working on one of my own based around MySQL and Qt right now -- don't know
 >if it will be GPL'ed or not yet -- we'll probably just use it in house since
 >it is designed around our system)...
-
+.
 That's what I set out to find, but didn't find anything on the web site.
 I'm looking for something that will do the following:
-
+.
 Single point of entry for users on a secure system:
        Creates account on user (public) systems
                update /etc/passwd/master.passwd file
@@ -860,7 +1357,7 @@ Single point of entry for users on a secure system:
        Export of new user info to customizable report (for automated entry
 into
                accounting software, etc...)
-
+.
 Automated billing:
        Export credit card info for batch processing and have hooks built
                in for other forms of electronic processing.
@@ -869,13 +1366,13 @@ Automated billing:
 software
        Email or laser print invoices
        Sanity checks credit card numbers before processing (code available)
-
+.
 Simple method for disabling an account.
        Arbitrary Expiration Dates (on a given day, in x days)
        Remove from radius.
        Changing password to '*'
        Virtual customers disabling dns, http server, log processing, etc..
-
+.
 Billing for different account types:
        Dialup monthly flat rate. Prorates for partial months.
        Dialup monthly flat rate for x hours + hourly usage.
@@ -886,17 +1383,17 @@ Billing for different account types:
        Disk space used over quota.
        Tech support minimum + hourly charges
        Other for misc stuff (modem, RAM, etc...)
-
+.
 Per user definable RADIUS attributes (ties in with above)
        Fixed IP
        Simultaneous Use
        IP filters (for dialup email only)
-
+.
 Keep logs of modem usage generated daily from radius accounting logs stored
 on multiple radius servers.
-
+.
 Keep logs of disk usage generated from quota.
-
+.
 Method of adding virtual domains to your system:
        Automatically grabs an IP address from a preassigned pool.
        Creates a domain.com database file from database fields
@@ -916,7 +1413,7 @@ system...in bash. Shouldn't be hard for a perlmeister to convert. In fact,
 as long as all the info was stored in the database (username, domain name,
 and ip pool) this could easily just be run as an external script that the
 user tweaks to match his system.
-
+.
 We use a great accounting software (M.Y.O.B) that does all the AP, AR,
 Payroll, Tax stuff, and most everything else we could need. It's already
 set up for the type of checks we have, etc, etc... I just need something to