6 Commits

Author SHA1 Message Date
johnnyq
a7a052729e Show only the picked client's contacts in the contract form and use the standard pickers across the contract modals: the form put every client's contacts in the page and hid the others with the hidden attribute, which Safari ignores on an option, so New Contract from the Contracts page listed them all there; it now renders only the contract's client's contacts and fetches them from get_client_contacts when a client is picked, with the primary picked; make every select in the contract and contract template modals a picker, with avatars and titles for contacts and owners, except frequency and tax in the recurring invoice modal, which match the recurring invoice form; add the changelog entries 2026-11-10 13:54:07 -05:00
johnnyq
1e5bffff3c Rates, net terms and SLAs come from the client's contract, else the instance defaults: database 3.5.0 adds a default after-hours rate (Settings > Defaults, now Rates and terms), gives each client whose own rate, net terms or SLAs differ from the defaults an active Standard terms contract setting just those (12-month term renewing itself, starting the day the client was added or the day before its earliest contract, archived with an archived client), deletes per-client SLA assignments and drops clients.client_rate and client_net_terms; time bills at the contract's rate, its after-hours rate or the default after-hours rate, else the default rate, new invoices are due on the contract's net terms else the default, and new tickets get the contract's SLA else the default; a client's own terms still apply until the update runs; the client add and edit windows lose the rate, terms and SLA fields for a note saying what the client is billed on and where it comes from, the Clients list loses Set Hourly Rate and Set Net Terms and shows the contract's rate, the overview's Terms shows the after-hours rate and whether terms are a contract's or the defaults, a contract's page and document show what it leaves empty from another contract in force or the default so signed documents stay unchanged, contract windows show the defaults as placeholders, contract names take a proper possessive; the client import and API create make a Standard terms contract for a rate or terms that aren't the defaults (returning contract_id), API update reports them in not_kept; the client export gives the rates, terms and SLAs as billed; demo data puts each demo client's terms on a contract; changelog updated 2026-10-27 22:22:34 -04:00
johnnyq
77df925981 Contracts stage 4: a contract in force sets the client's SLA for new tickets, the hourly rate with an after-hours rate for tickets opened outside business hours, and net terms for new invoices, the one that started last first and the client's own where it is empty; Unbilled Time bills each ticket at its own rate with one line per rate, and the ticket invoice window, Add Tickets, quote from a ticket, Unbilled Work and Time Detail reports, New Invoice, copy, quote to invoice, the invoice page, client overview and client edit follow it; a recurring invoice made from or linked to a contract is paused while it is a draft, started when it is made active or renewed with missed runs skipped, and paused once when it ends or its cancellation takes effect; new functions/contract_billing.php; fixes agent names double-escaped in the prepaid hours history; DB 3.4.5 adds contract_recurring_invoice_id and contract_recurring_stopped_at and treats a 0.00 contract rate as empty 2026-10-25 01:06:59 -04:00
johnnyq
0f9038b1ed Contracts stage 3: prepaid hours - hours included each month, and blocks bought with a price, expiry, note and an optional draft invoice; a nightly draw of billable ticket time, oldest ticket first from the hours that run out first, with Draw now and Put back, and a ticket the hours run out on staying in Unbilled Time at the usual rate; Prepaid hours card, a low hours email to the owner, and hours left on the contracts list, client overview, ticket, Unbilled Time and the client portal; [Monthly Hours] placeholder; new functions/contract_hours.php; DB 3.4.4 adds monthly hours and the alert level to contracts and templates, plus contract_blocks and contract_block_uses 2026-10-25 01:06:27 -04:00
johnnyq
d0620067a1 Contracts stage 2: each contract is a document with placeholders ([Client], [Start Date], [Rate], an [SLA] table and more) to preview, print or download as PDF; Send to sign emails a contact or anyone a link to sign with a drawn or typed signature, from the link or the client portal (Billing > Contracts and the home page list of ones waiting); Countersign makes a draft active and emails the PDF signed by both with its signing trail and document fingerprint; Signing card with copy link, send again, withdraw and earlier requests; changing the document while it is out for signature withdraws the request; contract emails in Mail > Previews; new functions/contract_signature.php and functions/contract_pdf.php, guest/guest_view_contract.php, client/contracts.php and client/contract.php; DB 3.4.3 adds contract_signatures and keeps any stored signature as a recorded round 2026-10-25 01:05:42 -04:00
johnnyq
0da515fff5 Contracts stage 1: new Contracts list and page under Billing and the client menu with type, term, start and end, auto renew, notice days, support hours, rates, net terms and an SLA per priority from Admin > SLAs (empty uses the client's own), stat tiles, Active, Due soon, Drafts, Ended and All tabs, search, type and client filters and sorting; New, Copy and Edit from a template with an owner and contact, Make active, Renew and Cancel; nightly renewal or ending and an owner reminder a month before the notice date; client overview attention items and the contract in the Financial row; Contract Templates rebuilt with Template, Cover and Terms tabs, copy, archive and restore; new functions/contract.php; fixes deleting a client that has a contract, a new template's after-hours rate not saving, rates cut to whole amounts, Net 30 saved as 0 and Edit blanking the rates; DB 3.4.2 turns the old response and resolution hours into SLAs and renewal frequency into term and auto renew, and normalises type, status and net terms 2026-10-25 01:05:09 -04:00