johnnyq
3ec52974db
Calendar modernization: calendar page rebuilt to load only the dates on screen with show or hide toggles for each calendar and for built-in sources (scheduled tickets, project start and due dates, service reviews, recurring tickets, renewals, invoices due), a filter for one agent, quick looks on click, drag to reschedule tickets and events that do not repeat, and a To schedule panel for dragging open unscheduled tickets onto the calendar; events get a shared add/edit form with repeats every N days/weeks/months/years with an optional end date and single skipped occurrences, a client site, location or meeting link, agents, client contacts and guest emails as attendees, iCalendar invitations with updates and cancellations sent to invited attendees, an event quick look with map and join links, .ics download and resend; each agent gets a personal subscription link for their schedule (their own or the whole team, busy only option, respects role and client access, stops when the account is disabled) with setup help for Google, Outlook, Apple, Nextcloud and Thunderbird; shared calendar feeds and invites now publish timed events with TZID and VTIMEZONE so repeating events keep their time across DST, with INTERVAL, UNTIL and EXDATE support; managing calendars is limited to admins; ticket schedule logic moved into functions/ticket.php and shared with the calendar, the schedule dialog shows the assigned agent's day, and ticket visit calendar files are rebuilt without zapcal as one-hour published events; mail queue sends invitations and cancellations as a text/calendar part and other calendar files as invite.ics; dashboard schedule shows only events the agent is on or added, client overview Coming up and client sidebar count use upcoming events, sites and contacts get New event shortcuts, demo data uses repeating events and attendees; database update 2.8.8 adds event repeat interval, until, skip, sequence and created by, attendee user and invited at, user_calendar_feeds, and widens email_queue.email_cal_str to text
2026-10-15 19:17:17 -04:00
johnnyq
40ca4a6e6c
Add optional agent user limit set in config.php ($config_agent_user_limit, unset or 0 = unlimited): blocks adding, activating or restoring agent users once the limit is reached, and shows X of Y agent users on the Users page with New User disabled at the limit
2026-10-13 15:34:10 -04:00
johnnyq
e7015d1595
Fix undefined item name when selecting from product list in quote or recurring invoice
2026-09-03 18:35:46 -04:00
johnnyq
a0fe18fff1
Fix Tax Summary double counting tax on partially paid invoices
2026-09-03 13:12:31 -04:00
johnnyq
86ba041cdc
Add Quick Send Quote / Invoice to replicate the old single click to Send Email
2026-08-28 14:40:25 -04:00
johnnyq
68b15ca49b
Email Invoice Only shows Billing and Primary, Quote shows Important Billing, Primary and Technical contacts that can be selected
2026-08-28 13:43:51 -04:00
johnnyq
72e6f23e19
Send Email and Mark Sent modals for invoices and quotes (db 2.7.7)
...
Send Email opens a contact picker instead of hardcoding the primary contact; Mark Sent asks how it went out and takes a note. Both log recipients / method / note to the document history. Handlers moved GET -> POST.
Fixes two pre-existing bugs in the email path: archived contacts were still receiving billing copies, and every copy was addressed to the primary contact by name.
2026-08-28 13:31:22 -04:00
johnnyq
069f587c1d
Implemented Check for updates which removs the last shell exec from web ui, and reimplemented db_update switch to update_cli.php
2026-08-26 23:38:23 -04:00
johnnyq
51c925522c
Remove thr web updater this is now either queued from the web or ran from the shell to update
2026-08-26 22:53:29 -04:00
johnnyq
6af0634f47
Ticket SLA: Fix on hold to pause only after first reply, show resolved closed and onhold as fixed on paused sla in the list
2026-08-15 19:55:40 -04:00
johnnyq
4c4c172f59
Feature: queued Updates which now eliminates the need for shell_exec from the webui, but if enabled you can still update from the webui the old way too
2026-08-15 16:41:42 -04:00
johnnyq
2375e69f2d
Update badge classes to bg
2026-08-15 13:00:41 -04:00
johnnyq
04991a0d79
Fix ticket schedule cancellation never cancelling the calendar event
2026-08-08 13:00:01 -04:00
johnnyq
db96766ab0
Fix Error on Scheduling Tickets, Fixed Zapcal Path
2026-08-07 12:44:56 -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
6b5be0f881
Rework Update UI and fix banch
2026-08-02 18:07:24 -04:00
johnnyq
23a09f54fc
Reworked getFieldById to remove escaping and and reworked everything that uses the function to also escape, was causing double escaping in many places this standardizes the function
2026-08-01 15:33:48 -04:00
johnnyq
75028ba09a
Fix some Ticket History gaps
2026-08-01 14:33:37 -04:00
johnnyq
2395a3ee16
Phase 2 of ticket attachements by agents
2026-07-29 18:10:34 -04:00
johnnyq
e74307eaea
Feature: Add Dynamic Task editing in add ticket and add recurring ticket, recurring tickets now have their own task table as well
2026-07-29 17:48:41 -04:00
johnnyq
bc64c9e3d1
Feature: Abiliry to assign Ticket Templates to Recurring Tickets
2026-07-29 15:55:14 -04:00
johnnyq
7ccdc942fe
Bump imapEngine from v1.25.2 to v1.25.3
2026-07-23 00:59:07 -04:00
johnnyq
ee7ef71855
Correct plugins to libs path for zapCal library in functions
2026-07-14 18:15:32 -04:00
johnnyq
2181e92e44
Removed valueOrDash Function was able to replace with ?: '-'
2026-07-14 18:13:34 -04:00
johnnyq
746e919aff
Replace Function getFallBack with valueOrDash()
2026-07-14 18:00:12 -04:00
johnnyq
b8873039a4
Rename Functions: flash_alert, sanitizeFilename and display_folder_options using camelCase instead to match other custom php functions
2026-07-14 17:41:41 -04:00
johnnyq
29a0b3ead8
Replace Function fetchUpdates() with checkForUpdates()
2026-07-14 17:31:54 -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
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