'That invoice no longer exists.'])); } $client_id = intval($invoice['client_id']); enforceClientAccess(); if (!billingCanEditItems('invoice', $invoice)) { exit(json_encode(['error' => billingNumber('invoice', $invoice) . " can't take more lines - it is paid, cancelled or non-billable."])); } $expenses = expenseUnbilled($client_id); $currency = (string) $invoice['invoice_currency_code']; $taxes = billingTaxes(); $markup_text = function ($markup) { return rtrim(rtrim(number_format(floatval($markup), 2, '.', ''), '0'), '.') . '%'; }; ob_start(); ?>