johnnyq
|
59e75764f8
|
Empty states: one shared empty state on every list page, drawn by includes/inc_empty_state.php from each page's $empty_state through the new emptyStateHtml() in functions/format.php - a grey round tile with the list's icon, a title, a line on what goes there and the page's own New and Import buttons when nothing has been added, No X match with a Clear filters button that keeps the client, archived and the current tab when a search or filters leave nothing, Nothing in {tab} with the tab's description for an empty pill and a tick for pills that flag trouble, and No archived X for an empty archive; pills count as views rather than filters; replaces the pages' own empty blocks so a filtered-to-nothing list no longer shows two messages; files, notifications and racks use it in their own layouts; adds emptyStateFiltered(), emptyStateClearUrl() and emptyStatePill() and the .itflow-empty-state styles; changelog updated
|
2026-10-17 00:47:32 -04:00 |
|
johnnyq
|
422088fb60
|
Invoices, quotes and recurring invoices makeover stage 2: per user, per device and per license recurring lines that take their quantity from the client's contacts (all or tagged), devices (ticked types or tagged, lost/stolen/retired left out) or a license's seats (in use or bought), counted again for every invoice with an optional contract minimum, set from a Counted choice on the add row or the full Quantity from section in Edit Line with a live count, marked on each line and listed in a new Seats card with Update now when the client has changed, quarterly frequency alongside monthly and yearly counted as a third in MRR on the dashboard, client pages, client portal and reports, period words {month} {quarter} {year} {period} filled into scope, notes and lines, schedule card showing the period the next invoice covers, recurring_invoice_anchor_day so month-end schedules return to the 31st after a short month, nightly run and Invoice Now consolidated into recurringInvoiceGenerate() which claims the run so it is billed once, refreshes seat counts and takes taxes at current rates, nightly run now bills runs missed by up to 7 days, Invoice Now bills the next run early and moves the schedule on from that run instead of restarting from today, recurring email goes to non-archived primary and billing contacts once per address and stays a draft when outgoing mail is not set up. Fixes portal recurring card ignoring yearly-only clients and counting archived ones, edit recurring invoice resetting the billing day. Adds DB 2.9.1, recurring_invoice_sync and recurring_seat_count handlers, itflowBillingSeatForm(), and updates the 26.11 changelog
|
2026-10-16 13:09:59 -04:00 |
|
johnnyq
|
64d938db7f
|
Tickets modernization: list redesign with Open/Mine/Unassigned/Needs reply/Waiting/Overdue/Scheduled/Closed/All views, whose-move indicator, SLA and due badges, in-row status/priority/agent pickers, collapsible filters and phone layout; kanban board redesign with drag-to-resolve/reopen rules and dark mode; new ticket quick look modal; New Ticket modal with asset/contact prefill and already-open warning; Edit Ticket modal rework; recurring tickets list rework with pause/resume, raise now, plain-language schedules, next-run preview and bulk actions, cron skips paused and raises missed runs once; shared ticket tables on asset/contact/location/vendor/project pages; Also open card on ticket detail; portal waiting-on-your-reply status; merge limited to same client; closed tickets no longer editable from modals or API; consistent access checks across ticket modals, post handlers and ajax endpoints; new functions/ticket.php helpers; removed recurring_ticket_model.php; DB 2.8.5 adds recurring_ticket_paused_at and cleans orphaned recurring ticket rows
|
2026-10-15 15:29:10 -04:00 |
|
johnnyq
|
234afd25fb
|
Contacts overhaul: rebuilt contacts list with role tabs and counts, avatars, flag pills, hover copy on phone/mobile/email, inline location picker, linked asset/credential/license/ticket chips and tag filter; contact page rebuilt to match the asset page with header actions, Reach/Details/Quick notes cards and tabbed Assets, Credentials, Tickets, Recurring, Licenses, Documents, Files, Services and Notes; add and edit contact share one tabbed form (Details, Roles, Access, Notes) with field icons, role switches, password generator, duplicate email check and photo removal; contact quick look redone to match the asset quick look; contact avatars now used everywhere a contact appears - contact pickers, ticket header, contact card, client replies, ticket list, kanban, assets, clients list, client header, overview key contacts, credentials, documents, services, invoice/quote/statement recipients, license users and global search - with each contact keeping the same colour throughout; ticket contact pickers show the name with title and role underneath; fixes: permission checks on the add contact modal and contact page/list actions, contact location limited to the contact's own client on add/edit/bulk assign, contacts list no longer selects user account columns, archived assets and credentials left off the contact page and quick look, saving a contact with the client portal disabled no longer clears their portal login method, replacing a photo no longer tries to delete a directory, sort column whitelisted, list counts and tags batched instead of per row, recurring ticket menu markup, undefined index notices, contacts list no longer scrolls sideways on phones, Edit Service shows avatars on unselected contacts and assets, license user labels toggle their checkbox; new functions/contact.php helpers (contactAvatar, contactLink, contactFlagPills, contactPhoneLink, contactAvatarData, contactOptionDescription), shared contact_form.php, contact_location quick pick, removed unused assetContactAvatar and clientOverviewPersonInitials
|
2026-10-14 18:33:18 -04:00 |
|
johnnyq
|
ec205ca633
|
Agent picker for project managers and recurring tickets: pick the manager on the project page and projects list, and the agent on recurring tickets, inline like ticket assignees
|
2026-10-13 13:56:47 -04:00 |
|
johnnyq
|
69484a8a2e
|
Replace Tom Select with ITFlow's own select picker: native select stays the source of truth, search, checklists for multi selects, add-your-own for tag fields, phone sheet, and client/agent/contact avatars, tag and category colours, priority dots and asset icons in the options
|
2026-10-13 12:41:29 -04:00 |
|
johnnyq
|
362a6dcfd2
|
Client side nav: coloured initials and client name under an All clients link, aligned with the menu, click to switch clients
|
2026-10-10 13:49:47 -04:00 |
|
johnnyq
|
1666305a1c
|
UI: User Avatar pills for Assigned tickets, updated Icons for Ticket Mine and Unusassigned tickets
|
2026-09-29 18:02:05 -04:00 |
|
johnnyq
|
806732c8f5
|
Display Phone number Country Codes
|
2026-08-26 14:19:32 -04:00 |
|
johnnyq
|
97490bef3b
|
Security Fix in recurring invoices in cron
|
2026-07-27 18:07:15 -04:00 |
|
johnnyq
|
5846119ec9
|
remove duplicate formatAddress
|
2026-07-23 18:16:57 -04:00 |
|
johnnyq
|
41b118ab87
|
Add formatAddress function and replace all addresses with it
|
2026-07-23 18:10:39 -04:00 |
|
johnnyq
|
9c65644adc
|
Update the rest of the PHP functions to use camelCase
|
2026-07-23 17:39:06 -04:00 |
|
johnnyq
|
9cc7e5ff3c
|
Move Guest Function formatBytes to root shared functions and use in files and files section in contact
|
2026-07-16 20:25:18 -04:00 |
|
johnnyq
|
cddcedbf1c
|
Cleanup format Functions
|
2026-07-14 18:28:53 -04:00 |
|
johnnyq
|
eac913eb07
|
Remove function removeEmoji() as this is no longer needed as the DB Charset is set to the standard utf8mb4 across the board
|
2026-07-14 18:27:02 -04:00 |
|
johnnyq
|
71f7299337
|
Replace Function roundToNearest15() with roundToNearest15Min()
|
2026-07-14 17:55:59 -04:00 |
|
johnnyq
|
8f824a1868
|
Replace Function shortenClient() with shortenClientName()
|
2026-07-14 17:46:25 -04:00 |
|
johnnyq
|
a2a96f9752
|
Removed unused legacy functions and split the functions into their own file and use function.php to call them
|
2026-07-14 16:32:45 -04:00 |
|