Jump to content
denis

Why is Mass Payment of invoices such a mess?

Recommended Posts

Ok so I've only started using WHMCS a few days ago and I've already run into a major "bug" if you can call it that - it's more of a really badly designed "feature", namely the "mass payment of invoices".

 

So I had a customer with 2 due invoices, let's call them invoice1 ($5) and invoice2 ($10).

 

The client logged into WHMCS and selected both invoices and selected "Pay All". But the client changed his mind / got distracted and didn't actually pay there and then.

 

What happened? Well what happened is that, WHMCS created a new invoice3 ($15) that is ONLY visible on admin-side. 2 days later client paid invoice1 & 2 via bank transfer and I marked those 2 invoices as PAID - client received confirmation via email and everyone's happy.

 

Yet, there was still invoice3 ($15) in the admin backend which was marked as UNPAID - wtf? (I didn't see it)

 

Not only is there invoice3 - but customer gets a reminder about it. HA! They can't even SEE that invoice on the client side!!!! And the 2 invoices it refers to are marked PAID!!!

 

This is a really really reeeeeeeeally stupid way of "mass payment" that only causes inconsistency and confusion, IMHO.

 

In my opinion the only acceptable way of "Mass Payment" is to allow customers to pay multiple invoices (ie. "Pay Selected" or "Pay All") by using an instant payment method ie. CC. If they don't pay, no harm no foul. If they pay, the selected/all invoices are marked PAID. Simply. No new invoices created or necessary and no inconsistency created.

Share this post


Link to post
Share on other sites

I agree with you and I'll tell you something. In my country (Italy) the way WHMCS handle mass payments can be considered illegal. We are not allowed to play with invoices in this way. Said that, you have to understand that WHMCS can't match your specific taste but you can customize it a lot to achieve your goal. For example we managed to fix this issue deleting the "fake invoice" automatically as soon as it's paid. Problem solved. Anyway I repeat that this feature is too messy. I really don't understand who can really use it in production environment.

Share this post


Link to post
Share on other sites

I'd have to agree, it would make a nice feature request to not have a 3rd invoice generated for mass payments.

 

Since both are paid however, you can probably just cancel it and put a note that it was for the 2 invoices so no reminders go out.

Share this post


Link to post
Share on other sites

yeah I understand there are "work arounds" like deleting or marking the 3rd invoice as paid BUT that means I have to keep a look out for these invoices as they're generated when customer uses mass payment and unless they pay for it immediately it leaves that 3rd invoice to linger on the admin side... and it sends the client reminders too, even if they pay original invoices.

 

To me this is not a feature at all .. this is just really bad design that creates more work instead of less. Not only that it can cause confusion with book keeping too and like Kian said, i am pretty sure this is not legal ...in Australia (and Italy) anyway. You can't create invoices that refer to other invoices... invoices have to state what they're for and so on, not that they're for other invoices.

 

- - - Updated - - -

 

Kian, how did you automate the deletion of these (let's call them) "mass invoices" ?

 

What bothers me the most is not just that it's created in the first place but that it's not automatically marked as PAID if the original invoices are marked PAID...

Share this post


Link to post
Share on other sites
- - - Updated - - -

 

Kian, how did you automate the deletion of these (let's call them) "mass invoices" ?

 

What bothers me the most is not just that it's created in the first place but that it's not automatically marked as PAID if the original invoices are marked PAID...

With a script in action hook. As soon as an invoice is paid I verify if it's standard or a "mass payment" one. To be more precise I also test a lot of other things but it's not the point of the thread. In short if it's a mass payment invoice I remove it from the system and I fix on the fly the sequential invoice number. Of course during this process me and my client doesn't receive any email or notification about it. It's all automatic.

Share this post


Link to post
Share on other sites

What bothers me the most is not just that it's created in the first place but that it's not automatically marked as PAID if the original invoices are marked PAID...

It should get marked *cancelled* if the sub-invoices are paid - currently that's a manual task.

 

You can use this admin widget to show the invoices you need to investigate on your admin homepage :)

 

<?php

if (!defined("WHMCS"))
       die("This file cannot be accessed directly");

function widget_summary_invoices() {
    $content = '<table width="75%" bgcolor="#cccccc" cellspacing="1" align="center"><tr bgcolor="#efefef" style="text-align:center;font-weight:bold;"><td>Invoice #</td><td>Due Date</td><td>Client</td></tr>';

    $sql = "select tblinvoices.id as invoiceid,duedate,userid,firstname,lastname,companyname,tblclients.id as userid from tblinvoices left join tblclients on tblinvoices.userid=tblclients.id where tblinvoices.status='Unpaid' and tblinvoices.id in (select invoiceid from tblinvoiceitems where `type`='Invoice' and relid in (select id from tblinvoices where `status`='Paid')) order by duedate;";

    $q = mysql_query($sql);
    if($r = mysql_num_rows($q)==0) {
     $content .= '<tr bgcolor="#ffffff" style="text-align:center;"><td colspan="3">None</td></tr>';
    } else {
     while($r = mysql_fetch_assoc($q)) {
       $content .= "<tr bgcolor=\"#ffffff\" style=\"text-align:center;\"><td><a href=\"/admin/invoices.php?action=edit&id={$r['invoiceid']}\">{$r['invoiceid']}</a></td><td>{$r['duedate']}</td><td><a href=\"/admin/clientssummary.php?userid={$r['userid']}\">{$r['firstname']} {$r['lastname']}</a></td></tr>";
     }
    }

    $content .= '</table>';
    return array( 'title' => 'Summary Invoices To Investigate', 'content' => $content );
}

add_hook("AdminHomeWidgets",1,"widget_summary_invoices");

?>

Share this post


Link to post
Share on other sites

This is exactly the reason why we unfortunately can't enable "Tick to enable the multiple invoice payment options on the client area homepage". :-(

Share this post


Link to post
Share on other sites

Has anyone removed the mass payment option? Also even if the 3rd invoice is "canceled" or "deleted" after the customer has payed for the first two real invoices, the next sequential invoice will be numbered as 4, not as 3, so accounting wise is a complete and utter mess, is it possible to turn back in anyway the next sequential number to 3 instead of 4.

Share this post


Link to post
Share on other sites
Has anyone removed the mass payment option? Also even if the 3rd invoice is "canceled" or "deleted" after the customer has payed for the first two real invoices, the next sequential invoice will be numbered as 4, not as 3, so accounting wise is a complete and utter mess, is it possible to turn back in anyway the next sequential number to 3 instead of 4.

 

The feature just needs to be redone.

 

As for this, how are you handling mass payments now? If you have a hook which cancels them automatically, would be a nice addition to implement some sort of note stating it was made void as payments 1 and 2 have been paid. Should be fine with that.

 

Otherwise you can do this manually, just depends on how you're handling mass payment invoices.

 

For removing the mass payment option, you can select that by navigating to Setup -> General Settings -> Invoices -> Enable Mass Payment

Share this post


Link to post
Share on other sites
The feature just needs to be redone.

 

As for this, how are you handling mass payments now? If you have a hook which cancels them automatically, would be a nice addition to implement some sort of note stating it was made void as payments 1 and 2 have been paid. Should be fine with that.

 

Otherwise you can do this manually, just depends on how you're handling mass payment invoices.

 

For removing the mass payment option, you can select that by navigating to Setup -> General Settings -> Invoices -> Enable Mass Payment

What I meant was that I have already disabled the Mass Payment option myself through the Setup -> General Settings -> Invoices -> Enable Mass Payment option that you mention. I was simply wondering if anyone else who has to attain himself to EU VAT laws and keep sequentially numbered invoices has also handled this issue the same way I have, or rather, to ask if anyone who has to comply with EU VAT laws can afford not to disable the WHMCS Mass Payment option which groups previous invoices within a new invoice, something which, to the best of my knowledge, is not allowed under the EU VAT Regulation as Kian pointed above.

 

I am not EU VAT compliant yet, as at this moment in time my business is currently orientated to providing hosting and other services to the customers of a foreign marketing consultancy but I will soon become fully EU VAT compliant as I begin to seek out customers in EU countries, so my intention is to keep my accounting in line with EU compliancy standards from the start in order to avoid future headaches.

Share this post


Link to post
Share on other sites

We didn't find an effective enough way to use Mass Payments.

 

We are EU VAT registered, it would cause a potential anomaly and cannot afford that.

 

We also had issues with the extra invoice being created if payment was via bank transfer.

 

So, we disabled the option, however we now have a client with 200+ domain names.... They're not happy that within a single month they have to complete many many payments. We are looking to merge them all into one service and therefore a single invoice but in all honesty we shouldn't need to do this.

Share this post


Link to post
Share on other sites

The solution is simple for WHMCS to implement.

 

All they need to do is to create a STATEMENT when the mass pay button is clicked which pulls all outstanding invoices together.

 

Because it is a STATEMENT it does not need to be allocated a number (and definately not an invoice number) nor does it need to show VAT separately because that is covered on all the individual invoices

 

WHMCS is based in the UK but some of the daft procedures it follows are of the type normally associated with the USA. These people are producing accounting software when they don't have a clue about basic accounting procedures.

 

THIS HAS BEEN AN ISSUE SINCE AT LEAST 2011 - COME ON GUYS - FIX IT.

Share this post


Link to post
Share on other sites
The solution is simple for WHMCS to implement.

 

All they need to do is to create a STATEMENT when the mass pay button is clicked which pulls all outstanding invoices together.

 

Because it is a STATEMENT it does not need to be allocated a number (and definately not an invoice number) nor does it need to show VAT separately because that is covered on all the individual invoices

 

WHMCS is based in the UK but some of the daft procedures it follows are of the type normally associated with the USA. These people are producing accounting software when they don't have a clue about basic accounting procedures.

 

THIS HAS BEEN AN ISSUE SINCE AT LEAST 2011 - COME ON GUYS - FIX IT.

 

Totally agree except for the part about "daft procedures it follows are of the type normally associated with the USA". Although we have procedures that are daft, every bookkeeper, accountant, CPA, CFO, etc that have worked for me over the past 30 years understands general accounting principles, and every single one of them would be aghast at the daft concepts of changing invoice numbers and due dates.

 

We want to assign an invoice number that is date-based and never changes so that when we're talking to customers, we don't sound stupid, especially when referring to invoice numbers the customer doesn't have. Based on other posts around the forums, it seems the only way to assign a date-based invoice number is using the EU VAT plugin. Why? We don't do business in EU countries and we don't have to pay VAT.

 

Might not be the best place to ask, but is there a comprehensive explanation regarding setting up an invoice numbering system that won't cause our accounting team to laugh loudly at how whmcs handles billing and payments?

Share this post


Link to post
Share on other sites
it seems the only way to assign a date-based invoice number is using the EU VAT plugin

EU VAT Addon doesn't bite. You can use it just to fix dates and leave all other things turned off. The fact that it's called "EU" doesn't mean that it can be used just by EU companies. Anyway, in order to perform this very simple task, you could simply use an action hook like this one:

add_hook("InvoicePaid",1,"Blabla");

function Blabla($vars)
{
$query = $mysql->prepare('UPDATE tblinvoices SET date = CURDATE() WHERE id = :id');
$query->execute(array("id"=>$vars['invoiceid']));
}

Please notice that my example doesn't work because I use PDO that is not part of WHMCS and needs to be initialized before. That said, as I have already said few posts above, you can customize the entire billing system of WHMCS so that it perfectly matches your needs.

 

Frankly I don't get why so many people keep complaining about things like this. There are 190+ countries in the world each one with its own rules, exceptions, requirements and special regimes. Not to mention that I still have to find 2 accountants of the same country/company that entirely agree with rules and requirements. You can't pretend that WHMCS changes the billing system for all countries and accountants of the world. On the other hand they give us all tools we need to adapt WHMCS to our needs. Most of these "issues" can be fixed in few minutes :|

Edited by Kian

Share this post


Link to post
Share on other sites
EU VAT Addon doesn't bite. You can use it just to fix dates and leave all other things turned off.

 

Of course it doesn't bite - we're using it already as a completely ridiculous work-around to keep invoice numbers the same.

 

Anyway, in order to perform this very simple task, you could simply use an action hook like this one:

add_hook("InvoicePaid",1,"Blabla");

function Blabla($vars)
{
$query = $mysql->prepare('UPDATE tblinvoices SET date = CURDATE() WHERE id = :id');
$query->execute(array("id"=>$vars['invoiceid']));
}

 

Sure, I'll just walk down the hall to the customer service people in our accounting group and tell them to just simply create an action hook and it'll work like they expect it to.

 

At any rate, the EU VAT addon apparently isn't the long term fix we thought it was. We are getting complaints daily from customers who think we're idiots because our accounting people thought a 'complete billing package' was exactly that. Obviously it's not.

 

Don't get me wrong. WHMCS has a lot of functionality. If there was a way to be sure invoice numbers don't change, we would be pretty pleased.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

By using this site, you agree to our Terms of Use & Guidelines