web-based password changer!
[freeside.git] / TODO
diff --git a/TODO b/TODO
index 4d0a0ba..6aee3e7 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,4 +1,4 @@
-$Id: TODO,v 1.53 2000-12-03 20:25:20 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
 *development* mailing list (send a blank message to
@@ -6,7 +6,259 @@ 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
@@ -330,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
@@ -458,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.
@@ -466,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
@@ -488,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;
@@ -500,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" !
@@ -514,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.
@@ -568,8 +820,6 @@ 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
@@ -583,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
@@ -1081,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
@@ -1107,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.
@@ -1116,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.
@@ -1133,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
@@ -1163,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