Within recurring invoices I needed a function to show the billing period within an item. Something like this would do the trick:
billing period is {{{day+10}}} and {{{Month+2}}} and {{{Year+2}}}
Within modules/invoices/models/mdl_invoices.php in the public function copy_invoice I placed Q&D code snippet below
foreach ($invoice_items as $invoice_item) {
// SNIPPET HERE
$now = new DateTime();
$replacements = explode('{{{', $invoice_item->item_description);
foreach ($replacements as $replacement) {
$replace = stristr($replacement, '}}}', true);
if (empty($replace)) continue;
$replacement='{{{'.$replace.'}}}';
if ($pos = strpos($replace, '+')) {
$add = substr($replace,$pos+1);
$addtype = substr(strtolower($replace),0,$pos) . 's';
$now = date_add($now, date_interval_create_from_date_string("$add $addtype"));
}
$format = substr($replace,0,1);
setlocale(LC_TIME, 'DE');
$replace = date_format($now, $format);
$invoice_item->item_description = str_replace ($replacement,$replace,$invoice_item->item_description);
}
// END SNIPPET HERE
$db_array = array(
This does respect the first letter in uppercase for the long date version.
More thoughts:
-
What I do not like is the setlocale(‘DE’) as constant fixed. It might be a better archievement to get it from the client record or alternately from the settings table, but I’ve not found a quick trick to pick it up (ip novice).
-
Errors are not caught with in the loop. User must know what could be used (Ref PHP: date - Manual). What will work for shure is (D/d)ay, (M/m)onth, (Y/y)ear may be more.
-
Exented could also be the ‘+’ sign to also respect a ‘-’ and the date_sub function.
-
This might be an idea for a more common function and the whole item selection on creating new invoices/quotes or other user text parts in the system.
hth Markus