More work on hooks.php

More content for README
This commit is contained in:
Kumi 2023-04-28 05:36:23 +00:00
parent 0a435d2ae3
commit 23b960da54
Signed by: kumi
GPG key ID: ECBCC9082395383F
3 changed files with 44 additions and 29 deletions

View file

@ -2,11 +2,14 @@
## Summary ## Summary
This module allows you to select the account that you want a specific invoice item to be assigned to in accounting. This module allows you to select the account that you want a specific invoice
item to be assigned to in accounting.
This was a specific requirement for a client, but the concept of displaying a dynamic list of values for a custom invoice item field may be useful to others. This was a specific requirement for a client, but the concept of displaying a
dynamic list of values for a custom invoice item field may be useful to others.
This addon is a fork of the [WHMCS Sample Addon Module](https://github.com/WHMCS/sample-addon-module) and, as such, is licensed under the MIT License. This addon is a fork of the [WHMCS Sample Addon Module](https://github.com/WHMCS/sample-addon-module)
and, as such, is licensed under the MIT License.
## Minimum Requirements ## Minimum Requirements
@ -16,7 +19,17 @@ http://docs.whmcs.com/System_Requirements
We recommend your module follows the same minimum requirements wherever We recommend your module follows the same minimum requirements wherever
possible. possible.
## Installation
Simply download the repository as a zip file, extract the contents and upload
the `modules/addons/accounting` directory to the same location within your
WHMCS installation.
Alternatively, you can clone the repository to a location outside of your
WHMCS installation and create a symbolic link to the `modules/addons/accounting`
directory.
## License ## License
This module is licensed under the MIT License. Please see the LICENSE file for This module is licensed under the MIT License. Please see the LICENSE file for
more information. more information.

View file

@ -21,12 +21,26 @@ add_hook('InvoiceEdit', 1, function(array $params) {
try { try {
// Get the invoice ID from the parameters. // Get the invoice ID from the parameters.
$invoiceId = $params['invoiceid']; $invoiceId = $params['invoiceid'];
// When the invoice is saved, update the invoice items with the
// selected account.
if (isset($_POST['accountSelector'])) {
foreach ($_POST['accountSelector'] as $invoiceItemId => $account) {
Capsule::table('mod_accounting')
->where('invoice', $invoiceId)
->where('item', $invoiceItemId)
->update(['account' => $account]);
}
}
// Get the invoice items from the database. // Get the invoice items from the database.
$invoiceItems = Capsule::table('tblinvoiceitems') $invoiceItems = Capsule::table('mod_accounting')
->where('invoiceid', $invoiceId) ->where('invoice', $invoiceId)
->get(); ->get();
// Get the available accounts from the module configuration. // Get the available accounts from the module configuration.
$availableAccounts = explode("\n", $params['Available Accounts']); $availableAccounts = explode("\n", $params['Available Accounts']);
// Create the drop-down field for each invoice item. // Create the drop-down field for each invoice item.
foreach ($invoiceItems as $invoiceItem) { foreach ($invoiceItems as $invoiceItem) {
$accountSelector = '<select name="accountSelector[' . $invoiceItem->id . ']">'; $accountSelector = '<select name="accountSelector[' . $invoiceItem->id . ']">';
@ -34,23 +48,24 @@ add_hook('InvoiceEdit', 1, function(array $params) {
$accountSelector .= '<option value="' . $availableAccount . '">' . $availableAccount . '</option>'; $accountSelector .= '<option value="' . $availableAccount . '">' . $availableAccount . '</option>';
} }
$accountSelector .= '</select>'; $accountSelector .= '</select>';
// Add the drop-down field to the invoice item. // Add the drop-down field to the invoice item.
echo '<script type="text/javascript"> echo '<script type="text/javascript">
$(document).ready(function() { $(document).ready(function() {
$("input[name=\'description[' . $invoiceItem->id . ']\']").before("' . $accountSelector . '"); $("input[name=\'description[' . $invoiceItem->id . ']\']").before("' . $accountSelector . '");
}); });
</script>'; </script>';
// Select the account that was previously selected for the invoice
// item.
echo '<script type="text/javascript">
$(document).ready(function() {
$("select[name=\'accountSelector[' . $invoiceItem->id . ']\']").val("' . $invoiceItem->account . '");
});
</script>';
} }
} catch (Exception $e) { } catch (Exception $e) {
// Consider logging or reporting the error. // Log the error
} logActivity('Accounting Error: ' . $e->getMessage());
});
add_hook('ClientEdit', 1, function(array $params) {
try {
// Call the service's function, using the values provided by WHMCS in
// `$params`.
} catch (Exception $e) {
// Consider logging or reporting the error.
} }
}); });

View file

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.6/phpunit.xsd"
bootstrap="tests/_bootstrap.php"
cacheTokens="false"
>
<testsuites>
<testsuite name="WHMCS Sample Addon Module Tests">
<directory suffix=".php">./tests/</directory>
</testsuite>
</testsuites>
</phpunit>