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
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
032e555f87
Replace copy buttons with hover over copy buttons
2026-10-14 17:27:27 -04:00
johnnyq
67e511a914
Tags everywhere: the same tag pills on every list and detail page, and an inline tag picker that saves as you tick (single records and bulk, with make-a-tag for admins) in place of the Assign Tags modals
2026-10-13 13:22:58 -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
cc9f34e01a
No gap between filter and client listing
2026-10-13 11:59:55 -04:00
johnnyq
2b2a6c8c42
Clients list: tags under industry with add-tag pill, whole client cell opens the client, gray header and select column
2026-10-10 14:43:35 -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
4728797432
Rebuild clients list: compact rows, filter chips, ticket and balance columns, batched lookups
2026-10-10 13:11:40 -04:00
johnnyq
9bfd26d57b
Add titles to icon-only buttons
...
- title on 294 icon-only buttons, named for what each one does
- aria-label on the 7 show-password buttons (title becomes the popover
header) and the portal mobile nav toggle
- Fix dead add-category button on products filter, credential bulk tag
button now preselects Credential, drop duplicate inner-icon titles
2026-10-08 17:12:21 -04:00
johnnyq
20b8fb5379
Make Add Primary links small
2026-08-28 00:44:47 -04:00
johnnyq
097891ed96
Add Primary Location / Contact if missing link modals
2026-08-28 00:26:40 -04:00
johnnyq
2409c98e1e
Added Border End to clients checkbox column
2026-08-26 15:20:15 -04:00
johnnyq
0440aa8ffa
Fix copy to clipboard to be a ntn-link instead of a button fixes adminlte4 regression
2026-08-25 18:42:37 -04:00
johnnyq
858acbcd30
Bump AdminLTE which brings back AdminLTE colors
2026-08-18 12:24:31 -04:00
johnnyq
ba319a8f25
Fix d-print-none adminlte 3 override of bootstrap css class so sienavs and top navs wont print
2026-08-17 21:31:53 -04:00
johnnyq
6df101c217
Css fixes
2026-08-16 22:25:05 -04:00
johnnyq
dc6b191eed
Update Font, Migrated away from JQUERY dependent libs: toastr to bootstrap5 toasts, daterangepicker to flatpickr, select2 to Tom Select, InputMask to IMask
2026-08-14 17:08:40 -04:00
johnnyq
a084e37c39
Initial migration from AdminLTE 3 to 4, bootstrap 4 to 5
2026-08-14 13:22:11 -04:00
johnnyq
b3744e9ed5
More sweeps to replace select * with actual returned column names dramatically reduces php memory usage and speeds up processing dramatically especially in the crons since they run all the time
2026-08-06 13:10:23 -04:00
johnnyq
ddd9c2b56a
clientScopeSql sweep whicn now removed the extra unessesary client joins
2026-08-06 11:45:56 -04:00
johnnyq
3c8f812a16
Feature: On all export modals added Filter Tab and Selectable Columns tab with default selected, also you can now export to a PDF
2026-07-30 00:46:15 -04:00
johnnyq
b3f959ac55
Use Short echo tags across the code
2026-07-28 18:47:52 -04:00
johnnyq
e7698f15bd
Make better use of formatAddress function for clients listing
2026-07-24 12:22:15 -04:00
johnnyq
41b118ab87
Add formatAddress function and replace all addresses with it
2026-07-23 18:10:39 -04:00
johnnyq
38a042d435
Remove _details and use singular filename for certain objects
2026-07-15 00:12:27 -04:00
johnnyq
8f824a1868
Replace Function shortenClient() with shortenClientName()
2026-07-14 17:46:25 -04:00
johnnyq
b57ddc0e5c
Replace Function sanitizeInput() with just escapeSql() and update all instances throughout
2026-07-14 17:17:50 -04:00
johnnyq
7bc47a58fe
Replace Function nullable_htmlentities() with just escapeHtml() and update all instances throughout
2026-07-14 17:10:45 -04:00
johnnyq
6a448668ad
Clients: Only show 3 tags per line
2026-06-26 13:28:03 -04:00
johnnyq
166a606ba9
Remove client counts on clients listing page
2026-06-26 13:26:25 -04:00
johnnyq
c16a1753a5
Add text MonoSpace in places where it needs to be, reduced info icon size in clients, Fixed navigation highlight for files when in document details and is asset details
2026-06-25 18:06:39 -04:00
johnnyq
65b53dd7f4
Tables: Removed removed -sm in table-responsive to fix some responsive issues also adding margin between top and bottom tags in clients and moved the tags in its own div
2026-03-26 13:30:07 -04:00
johnnyq
5cbed128e6
Use new custom CSS Class for Column Checkboxes so they are a static 40px
2026-03-04 11:56:20 -05:00
johnnyq
b94604ae71
Assets List: Major UI / UX Update removed some columns to reduce space and add them as a secondary row instead
2026-03-03 15:20:11 -05:00
johnnyq
c0f26204c2
Swapped Location and Contact Columns in Clients Listing for better scannabilty
2026-03-02 23:59:17 -05:00
johnnyq
9d9ebe7b9e
Added Bulk Net Terms editing in clients
2026-03-02 22:43:14 -05:00
johnnyq
8b221bc055
switched from mysqli_fetch_array to mysqli_fetch_assoc in clients listing page. This will have a major query speed and memory optimization impact
2026-01-10 15:54:19 -05:00
johnnyq
79703042ff
Update client table responsiveness viewpoint to fix issue when window is a certain width on the desktop
2025-12-30 16:58:44 -05:00
johnnyq
fe8df66c67
Migrate Import/export clients to ajax-modals
2025-12-01 20:33:01 -05:00
johnnyq
0cf1e338c2
Added data-bulk to the ajax modal to allow for bulk GET collection of selected ids that have a class of bulk-select, converted expense and client bulk modals to use the the new ajax-modal
2025-11-06 11:26:08 -05:00
johnnyq
bf31c333a6
Migrate Add Client Modal to the new Ajax Modal
2025-10-28 16:56:27 -04:00
johnnyq
303f9174c9
Added Bulk Create Tickets for Clients
2025-10-22 14:50:50 -04:00
johnnyq
c5dd5f2b6f
Add Clause to not collapse advanced filter on all time aka if date from is set to the default 1970-01-01
2025-10-20 18:16:39 -04:00
johnnyq
ab77705ca2
Feature: Replace old date range to Date Range Picker JS for better date from/to handling
2025-10-20 18:04:00 -04:00
johnnyq
edabc5c33f
rename /user/ to /agent/ and update links to use agent/ instead
2025-09-23 18:04:23 -04:00