johnnyq
156c51224d
Fix client portal review findings: PIN wipe, log indexing, statement currency (db 2.7.8)
...
Setting a PIN containing < or > silently cleared it: the length check ran before escapeSql(), whose strip_tags() then emptied the value, and the UPDATE stored the blank while flashing success. Length is now checked after sanitising.
Password and PIN changes require the current password. SSO contacts are exempt - no local password to check, and the IdP already did it.
New index on logs(log_user_id, log_client_id) for the portal profile and activity pages, which were scanning the whole table twice per profile view. admin/audit_logs.php's date filter rewritten as a half-open range so KEY log_created_at is usable - DATE(log_created_at) BETWEEN made it non-sargable.
Portal statement page and PDF now render in the client's currency, matching the guest view and the emailed statement.
Quick Send asks for confirmation; confirm-link extended to submit buttons.
Portal audit entries logged an empty name - client/post.php used , which only exists agent-side.
2026-08-28 16:38:42 -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
858acbcd30
Bump AdminLTE which brings back AdminLTE colors
2026-08-18 12:24:31 -04:00
johnnyq
bdab434707
Fix Margins in various areas
2026-08-15 13:34:38 -04:00
johnnyq
2375e69f2d
Update badge classes to bg
2026-08-15 13:00:41 -04:00
johnnyq
8c0e5246b4
Fix Card Margin bottoms client header and ticket cards on the right
2026-08-14 19:08:15 -04:00
johnnyq
bbbfff7413
All Jquery removed replaced with stand JS and non jqery dependent libs
2026-08-14 17:28:06 -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
108781db5b
Move more select * to column select for further optimization
2026-08-06 13:44:02 -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
b8c9d5b4cf
Query Optimization: Select only needed columns instead of SELECT * on looped queries
2026-08-06 12:59:43 -04:00
johnnyq
ddd9c2b56a
clientScopeSql sweep whicn now removed the extra unessesary client joins
2026-08-06 11:45:56 -04:00
johnnyq
7a44cdd438
Fix Autofill products in invoice, quotes, recurring invoice, tax field wasnt updating and a dash was being put in front
2026-08-03 13:28:41 -04:00
johnnyq
89fba247c5
Add some missing maxlength form options to prevent info overflow and result in error 500
2026-08-02 16:08:01 -04:00
johnnyq
1494d2cb5e
Backed out of Refunds which still keeps the fix to properly set the invoice status when payment is deleted
2026-07-28 22:03:35 -04:00
johnnyq
31921ee99b
Add Refunding capability along with Stripe Refunding
2026-07-28 21:34:06 -04:00
johnnyq
b3f959ac55
Use Short echo tags across the code
2026-07-28 18:47:52 -04:00
johnnyq
41b118ab87
Add formatAddress function and replace all addresses with it
2026-07-23 18:10:39 -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
8da3a107fb
Rename plugins to libs and update all file references
2026-07-10 13:24:20 -04:00
johnnyq
47a5825d3e
OAUTH Send Invoice Fix: was reading smtp host var needed to read smtp provider as smtp host is not filled in when OAUTH2 is selected
2026-07-07 15:04:48 -04:00
johnnyq
a819dff19a
Mail: Update mail configuration check to use smtp_provider instead of smtp_host as host is blank upon using oath2
2026-06-24 12:47:41 -04:00
johnnyq
6d2cb0aea3
Split out item edits into seperate posts and modals for editing invoice, quote and recurring invoice items
2026-03-07 12:12:27 -05:00
johnnyq
a81edc122d
Add CSRF Checks on Agent ajax endpoints that would update / delete or add something to the db
2026-03-05 17:12:44 -05:00
johnnyq
4440581f14
Invoice: Add missing CSRF checks and missing permissions
2026-03-01 22:22:21 -05:00
wrongecho
5a274061f3
Invoice - add a basic picking/packaging slip
2026-01-15 13:58:53 +00: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
7737dbc65d
Migrate Invoice to Recurring Invoice to an ajax modal
2025-11-28 15:15:01 -05:00
johnnyq
c851e54e1d
Fix Decimal not showing on the iphone for specific fields associated to price cost percentage etc
2025-11-26 13:54:24 -05:00
johnnyq
96b8fcad3a
Fix Pay With a Saved Card in Invoice Listing if Saved Cards are on files for that client
2025-11-16 17:34:37 -05:00
johnnyq
cea7d61481
Updated Bread crumbs in ticket, quote invoice to show All as the first breadcrumb
2025-11-03 15:43:56 -05:00
wrongecho
24d8635dac
Invoice product autocomplete - search product code as well as name
2025-11-01 17:59:12 +00:00
johnnyq
b8e2423dbd
Mugrated Payment Modals from invoice folder to payment modal folder
2025-10-30 14:46:49 -04:00
johnnyq
edabc5c33f
rename /user/ to /agent/ and update links to use agent/ instead
2025-09-23 18:04:23 -04:00