Hello everyone,
First of all, Areski, I give many thanks and praises to you and your team (if there is one) for developing an application as powerful as A2Billing (I meant that). I have struggled to get it up and running and I finally did. It is great, but it still needs some features and improvements just like any other software out there.
I am a very experienced programmer with an extensive knowledge and in many programming languages, and database systems. I won't go into describing the whole extent of what I have learned from others and what I have come to develop along the way, but here is my story.
Recently, I have bumped into many problems that really got me frustrated with A2Billing. I could have just kept sending e-mails and forum posts as usual, but time is money and in most of the cases, I can't afford waiting for an answer on a forum. By the way, I have never received a reply to my questions here. So I just go ahead and fix the bug myself. That is how we have gradually fixed many of the bugs that were preventing A2Billing to work properly. We have even added many features to A2Billing. For example, one of those features allow A2Billing to detect repeated DTMF digits and remove them, thus fixing a well know problem in any Asterisk based system. This feature will easily recognize 1144119977110033112200 as 14197103120. The digits may be doubled or tripled, but it will be recognized and corrected, an entry will be added to the log file so administrators will know that something is acting up in Asterisk.
This is just one of the enhancements that we have made.
Now let's talk about the problem and how I intend to fix it. Recently, we have realized that we couldn't attach some specific caller ids to some customers, or to any customer for that matter. I have then discovered that it was because when I had deleted some test clients, the associated caller ids were not removed from the cc_callerid table. So there where some orphan records left behind. That is not usually a big deal. But it quickly became one when I have realized that the framework used to create a2billing is extremely confusing and complicated for reasons that I am still failing to understand. Even a simple SELECT or a DELETE query in the database needs to go through the framework, and requires a fairly confusing way of building the query. That lead to something like this :
Code:
function Delete_Selected()
{
//if ( $form_action == "list" && $this->FG_FILTER_SEARCH_FORM)
{
$instance_table = new Table($this -> FG_TABLE_NAME, $this -> FG_COL_QUERY);
$result = $instance_table -> Delete_Selected ($this -> DBHandle, $this -> FG_TABLE_CLAUSE, $this->FG_ORDER, $this->FG_SENS, null, null,
$this -> FG_LIMITE_DISPLAY, $this -> CV_CURRENT_PAGE * $this -> FG_LIMITE_DISPLAY, $this -> SQL_GROUP);
}
}
instead of passing the whole query to a simplier DB abstraction layer this :
Code:
$db->query("DELETE FROM my_table WHERE my_condition");
This is a potential cause of errors while building SQL queries and the debugging becomes more difficult. Also, the code execution time and the CPU overhead need to be taken into consideration in order to end up with an VoIP billing application or any application that can handle a great deal of simultaneous connections.
Another thing to consider is that a simpler framework is going to make it easier for the community to participate, and improve A2Billing. I am planning to rewrite A2Billing and add a template system, and modular architecture to it. I will also add a CRM, a Customer Support Ticket system, a SMS callback system, a Vendor / Call Shop support, and Truck Group support, and many more features. A documentation project must also be put in place.
If I get enough help, it will be a standalone application. If not, it will be powered by an already existing CMS like Mambo, Drupal, Plone, etc. In either case, I need to rewrite it.
Currently, adding a plug-in or an additional module to A2Billing is a headache and no matter how much money you donate to him, Areski is just one man, and simply do not have enough time to do everything for you. I have been sending countless e-mails, trying to get help with some features, but no answers. I had to read the PHP AGI scripts entirely (what a fun moment). But I have finally understood the code in a way that is not described anywhere on the web.
So I say, let’s do this. Who is interested? I am going to do it anyway for my own needs, and I will be willing to share my enhancements, and give it back to the community. The only thing is that the rebuilding will be faster with more developers. Areski, are you interested?
I am not trying to steel this project. Areski will still be the "Owner" if he wishes to make us participate more actively in A2Billing enhancement. But A2Billing will need a bigger developer team to get things moving quicker.
Here are some enhancements that I have made so far:
- Duplicated DTMF digits detection and suppression
- Added First Name in user forms to simplify user identifications
- Added Check boxed in all the lists to allow easier selection of list item for deletion, batch update, etc. (instead of using the search form)
- Unifying all of the search forms in the customer list into a single search form.
- Search a customer by using any possible existing field (ex. address, e-mail, zip/postal code, etc.)
- Added "Trunk Group" for enhanced trunk failover features. Currently, the failover feature of A2Billing does not really try more than twice. Let's imagine that TrunkA is using TrunkB as backup trunk and that TrunkB is using TrunkC as backup trunk. If a call using TrunkA fails, A2Billing will only try TrunkB and not TrunkC or other trunks in the chain. (Wow. That was a lot of trunk).
The Trunk Group feature will allow a call to be attempted on every trunk that belongs to the same group as the main trunk if the 1st trunk of the chain fails. No trunk will be tried twice during the same call attempt. It is also possible to rearrange the trunks according to their priority by simply clicking on arrows.
- I believe that A2Billing configuration does not need to be in Asterisk’s configuration directory. This prevents a developer from working on an off-line version of A2Billing without hacking into some core files. I am looking into changing that somehow
- Etc.
Once again, please don't get me wrong, A2Billing is an impressive peace of work. But it needs our help. Let's do this.
Sorry for that awfully long message
Live Long and Prosper
A. Siby aka WebMaestro