From the = $product_type === 'product' ? 'product' : 'service' ?>
= escapeHtml($product_name) ?>= $type === 'invoice' && intval($line_product['product_track_stock']) ? ' - changing the quantity moves its stock (' . escapeHtml(billingQuantity($line_product['product_stock'])) . ' on the shelf)' : '' ?>.
A line billed each month, quarter or year goes on a recurring invoice when the quote is invoiced, and the quote shows it apart from what is billed once.
'contact_tags', 'assets' => 'asset_tags'][$seat_source] ?? '';
if ($seat_tag && $seat_tag_key && !isset($seat_options[$seat_tag_key][$seat_tag]) && ($seat_tag_row = tagRow($seat_tag))) {
$seat_options[$seat_tag_key][$seat_tag] = ['tag_id' => $seat_tag, 'tag_name' => $seat_tag_row['tag_name'] . ($seat_tag_row['tag_archived_at'] ? ' (archived)' : ''),
'n' => intval(recurringSeatCount($client_id, $seat_source, ['tag' => $seat_tag]))];
}
$seat_minimum = floatval($item['item_seat_minimum'] ?? 0); ?>
Counted again each time an invoice is made, so a per-user or per-device line bills what the client has that month. Devices that are lost, stolen or retired aren't counted.
Tag the contacts you bill for - "Licensed user", "Staff" - to leave out the rest.
$asset_count) {
$type_id = 'seatType' . substr(md5($asset_type), 0, 8); ?>
>
The client has no devices yet.
No types ticked counts every device - tick Desktop and Laptop for a per-workstation line, Server and Virtual Machine for per-server.