johnnyq
|
ad271aaa87
|
License templates stage 4: export license templates to a file (every current one, the ones picked including archived, or one from its page or row), carrying what a license starts with, the vendor template without account number, code or contact, and the product name, but not who should have it; import a file, skipping, copying or replacing templates already here by name, matching vendor templates by name or creating them from the file, matching current products by name without creating any, and on replace keeping licenses, who should have it and the template's own product unless the file's product is here; add a License Templates starter pack of 20 common MSP licenses with type, licensing, renewal term, notes and vendor, linked to the products of the same name once Products & Services is loaded, plus an Update that refreshes the ones already here; add Import, Export, the report and the starter pack to the New License Template menu; add a License Templates report by template and by client covering licenses made, seats in use against bought, renewals, coverage of the clients that should have one and, for Sales users, licenses billed and their monthly value, with CSV export
|
2026-10-18 21:42:31 -04:00 |
|
johnnyq
|
b76bdd4b82
|
License templates stage 3: a template can be required of every client or of clients with certain client tags (database 3.3.0, tags kept when tags are merged); the template page shows how many of those clients have it and lists the missing ones with Make and Make for the clients missing one; the list gains a Required tab and a coverage chip; a client's Licenses page shows the licenses it should have but doesn't, opening New License from the template, and the client overview counts them under Licenses missing; the template page lists its licenses by client with seats, renewal and billing state, with views for over seats, spare seats, renewing soon, expired and not billed, an action for each view and bulk Renew, True up seats and Bill seats; true-up sets seats bought to the seats in use or a typed number; Bill seats adds a line for the template's product to each client's recurring invoice that follows the license's seats bought or in use, using seats in use for licenses with no seat limit; the Renew window now posts to the agent handler so it also works from Admin
|
2026-10-18 21:10:29 -04:00 |
|
johnnyq
|
0c12459eaf
|
License templates stage 2: templates carry the seats a license starts with, a renewal term, a vendor from the vendor templates and the product they are sold as (database 3.2.9); a license made from one starts with its seats, gets a renewal date worked out from the purchase date and uses the client's vendor from that vendor template, or one with the same name, or has one made from the template by someone who can add vendors; New License fills in the seats, vendor and renewal date from the template and keeps the renewal date in step with the purchase date until one is typed in; Renew starts on the template's term; new licenses can be made for several clients at once with an option to skip clients that already have one; the template page and list show the new fields and the list search covers vendor and product; the license quick look shows the product and price to Sales users; deleting a vendor template or product removes it from the templates that used it
|
2026-10-18 20:23:27 -04:00 |
|
johnnyq
|
f74ad10dd8
|
License templates stage 1: Admin > License Templates on the standard list with full search across name, version, summary, type, license type and notes, Active and Archived tabs with counts, sortable columns for type, license type, licenses and clients using it, seats in use against seats bought, last used and last changed with who, a row menu and an empty state; a page for each template showing what a license made from it starts with, the licenses made from it with their client, seats and renewal, how many renew in the next 30 days or have lapsed, and who made and last changed it; New license for a client from the template page or the list picks the client and takes seats, key, purchase and renewal dates and order reference, saves and opens that client's Licenses; Copy, Archive, Restore and Delete, archived templates no longer offered on New License and deleting one leaving its licenses in place unlinked; the template window gets icons in front of each field, a summary line and notes every license should carry; licenses remember the template they were started from on New License and the license quick look shows From the template, linked for admins; migration 3.2.8 adds the template link to licenses and who made and changed each template, counting a license whose name exactly matches a single template's name as made from it so existing templates don't start at zero; t_licenses updated for the new gone or archived wording; changelog updated
|
2026-10-18 19:52:20 -04:00 |
|
johnnyq
|
2b087c8f46
|
Categories stage 2: every form and Bulk Action window picks a category the same way through categoryPicker and categoryOptionsHtml, in the kind's order with each category's color, icon and description, keeping a record's archived category marked (archived) and a status, type or referral that isn't a category marked (not set up) so saving changes neither; the + beside a category picker is admins only and opens the category window stacked over the form, saving in the background as JSON, picking the new category and leaving the form as it was, with a taken name shown in the window, on every form that picks one including a ticket's quote and invoice, Unbilled Time, payment providers, canned responses, the mileage setting and the Bulk Action windows; stacked windows shade the one underneath; agent/post/category.php removed so the window posts to admin/post.php from any page; typed referrals go through categoryEnsure, taking an existing referral's spelling in any case, matching archived ones and no longer making an empty referral on client add, edit and import; fixes the + reloading the page and losing the form, the quote made from a ticket creating an expense category, and a stray < in the license template type picker; changelog updated
|
2026-10-17 20:41:26 -04:00 |
|
johnnyq
|
a33f98ffa5
|
Licenses: rebuilt the license list with Renewing soon, Expired, Over seats and No seats assigned tabs, a seat bar (used against bought, red when over) and colour-coded renewal on each row, license type and renewal filters, optional key, purchase and order reference columns, search by vendor, order reference and individual keys, and bulk Renew, Archive, Restore and Delete; new license page (license.php) with renewal and over-seats status in the header, License and Vendor cards (key, order ref, purchase date, vendor account number, phone, email, website, hours, SLA, all copyable), notes that save on blur, and tabs for Seats (each device and user with the key they were given), Keys, Credentials, Documents, Files and History from the audit log; new license quick look used everywhere a license is shown; New and Edit share one tabbed form (Details, License, Seats, Notes) with device and user pickers, a live seat counter, renewal shortcuts and a template picker that replaces the separate Create from Template modal; Renew modal for one license or a bulk selection that moves the renewal date by a term or to a set date, previews the new date for each license and records a new order reference; Manage Seats modal; individual keys pasted one per line and handed out to devices and users, which gives them a seat, with the key returned to the pool when they come off the license; Renewal Ticket opens New Ticket with the subject and details filled in; New Document and Upload from a license link the result to it; devices, users, credentials and files now link to licenses through the shared link modal, which shows the seats left on each license and offers every license type, not just Device; the asset and contact pages and quick looks list licenses with their seats, renewal and the key to install, and get New License; the client overview gets a Licenses over seats card under Needs attention, starred licenses under Favorites and renewals that open the license page; global search finds licenses by name, vendor, order reference or key; the vendor quick look lists that vendor's licenses; the dashboard card opens the Renewing tab; the export gains seats used, individual keys, vendor, order reference and client columns; admin license templates share the license type list and show type icons. Uses the existing software_keys, key assignment, software_credentials and software_files tables. Fixes editing a Subscription or Open Source license clearing its license type, archiving a license removing all of its seats (seats are now kept, matching the API), license forms and seat handlers accepting another client's assets, contacts or vendor, a 500 on duplicate seat links and on forms missing fields, and an extra query per row in the export; license deletes now respect the destructive deletes setting. No DB change
|
2026-10-14 21:31:30 -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
|
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
|
b3f959ac55
|
Use Short echo tags across the code
|
2026-07-28 18:47:52 -04:00 |
|
johnnyq
|
815802fb7c
|
Gate Admin UI Modals to Admin
|
2026-07-27 14:50:32 -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
|
b79a6c390e
|
Move some arrays out of load global settings and into their own entity
|
2026-04-05 12:00:56 -04:00 |
|
johnnyq
|
02d217402c
|
Categories: Moved note type, software type, rack type to be creatable/editable Categories with common defaults and descriptions
|
2026-03-31 18:05:16 -04:00 |
|
johnnyq
|
918b40afbe
|
Add missing CSRF Checks in admin area and settings
|
2026-03-02 22:15:36 -05:00 |
|
johnnyq
|
0a30300bde
|
replace all instances of mysqli_fetch_array with mysqli_fetch_assoc for better performance and memory usage
|
2026-01-14 17:30:23 -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
|
56f32a4da2
|
Finished migrating the last of the admin add modals to ajax-modal
|
2025-11-05 01:54:49 -05:00 |
|
johnnyq
|
451206525e
|
Remove function code for old way ajax-modal, moved modals over to modal_header/footer and removed _new
|
2025-08-25 00:07:51 -04:00 |
|
johnnyq
|
41f957ea3b
|
Migrated admin modals to modals/ENTITY removed ajax_ and _modal prefixes from file names and use new ajax-modal syntax
|
2025-08-24 23:50:38 -04:00 |
|