System

Change Log

Audit trail of every save, delete, import, and workflow update across the backend.

Total Changes1,790
Today0
Latest 2026-10-23 04:11
Reset

1,790 results · Page 33 of 36

documents · upload
2026-04-12 12:42:24 · anonymous
backend_document #14
Context
{"file_name":"Codex-Update-04-12-2026.odt","mime_type":"application/vnd.oasis.opendocument.text"}
Before
[]
Changed Data
{"backend_document_id":"14","document_type":"upload","title":"Codex - Updates Fixes Issues 04-13-2026","slug":"codex-updates-fixes-issues-04-13-2026","summary_text":"Codex - Updates Fixes Issues 04-13-2026 Detailed Documentation","content_markdown":null,"content_html":null,"file_name":"Codex-Update-04-12-2026.odt","stored_name":"20260412-164224-b4b11b83.odt","mime_type":"application/vnd.oasis.opendocument.text","file_size_bytes":"49423","storage_path":"/mnt/drive1/customerdb/backend/documents_storage/20260412-164224-b4b11b83.odt","is_deleted":"0","created_at":"2026-04-12 12:42:24","updated_at":"2026-04-12 12:42:24","editor_content":"Comprehensive implementation log (through  April 12, 2026 ) and remaining work: Scope Snapshot The branch currently has very large churn ( 242 files changed ), including canonical backend work plus broad  webui/backend/*  compatibility-loader rewiring. Core functional work for your issues is concentrated in backend/frontend reporting, Setmore import, visit save/receipt logic, payroll import, and payment ledger. I also validated syntax for key new/modified PHP modules (all clean). What Was Implemented Cron hardening + morning smoke test Added cron-safe preflight script to fail fast when runtime prerequisites are missing:  backend/jobs/smoke_morning_jobs.php Smoke test now explicitly checks  mysqli  extension and required functions (including  app_unified_appointments ). Wired cron “Morning Import” and “Morning Jobs” commands to run smoke test first:  backend/cron_manager.php Documented smoke command chain in backend docs:  backend/README.md Fixed unified appointments SQL ambiguity / cron fatal Added/updated centralized unified appointment query service:  backend/appointment_service.php Fixed ambiguous  customer_id  in union query by qualifying Setmore side as  setmore_appointments.customer_id . Included  setmore_import_locked  in unified rows (used by workflow/import safeguards). Setmore import improvements (notes + booking source + lock flag) Implemented robust note extraction from multiple payload fields and flattened additional fields:  backend/setmore_service.php Added booking source extraction ( booking_source  /  booked_from  / parsed note line “Booked from ...”) and write-through to visits when column exists. Added import lock behavior ( setmore_import_locked ) so re-import does not overwrite locked visits. Added lock column bootstrap/ensure + bulk lock helper:  backend/morning_jobs_service.php Added schema evolution for lock and ledger fields in installer:  backend/install_schema.php Visit save 500 fix + item type reliability Added  item_type_name  persistence to  order_items  and updated reads to prefer stored label (fallback to  item_types ):  frontend/api/visit_save.php ,  frontend/api/visit_get.php ,  frontend/api/visit_report_generate.php ,  backend/visit_service.php Added migration to backfill  item_type_name  and drop fragile FK dependency on type table:  migrations/20260411_order_items_item_type_name_no_fk.sql Updated base schema accordingly:  mariadb_core_schema.sql Payment ledger architecture (single transaction table with tips) Added/expanded canonical ledger table  customer_payment_transactions  with  tip_amount  and indexes:  backend/install_schema.php Implemented sync/rebuild services from  payments  with bucket classification ( cash/check/credit/edwards/tip ):  backend/payment_ledger_service.php Added ledger rebuild CLI:  backend/jobs/rebuild_payment_ledger.php Added ledger UI/report page with filters and summary cards:  backend/payment_ledger.php Added ledger table to Live Table Manager map:  backend/live_table_manager_service.php Legacy CustomerTotals import into ledger + forward resync Added CLI import from Access CSV into ledger ( source=legacy_customer_totals ) and optional forward rebuild from next date:  backend/jobs/import_customer_totals_csv_to_ledger.php Your run imported  2757  rows for  2023-12-24  to  2026-04-06  and resynced  55  rows forward ( 2026-04-07  to  2026-04-12 ). Report totals now ledger-first (with fallback strategy) Added ledger-driven daily/period/month/year aggregation paths, including Edwards handling and totals-no-Edwards logic:  backend/report_service.php Updated dashboard snapshot APIs to use ledger when range rows exist (instead of always preferring legacy tables):  frontend/api/totals_snapshot.php ,  frontend/api/totals_snapshot_live.php ,  webui/api/totals_snapshot.php ,  webui/api/totals_snapshot_live.php New reconciliation / audit backend modules Added totals reconciliation page (report total vs ledger total vs daily mismatch rows + exact ledger rows):  backend/report_reconciliation.php Added daily source-vs-source totals audit page:  backend/report_totals_audit.php Added unmatched report attachment helper page:  backend/report_unmatched.php Added navigation links in backend home/reports:  backend/index.php ,  backend/reports.php Receipts and work orders moved toward ledger truth visit_get  now returns ledger payment rows/totals (deposit/tip/paid-toward-balance):  frontend/api/visit_get.php PDF receipt/work-order generator uses ledger-first totals and item_type_name fallback:  frontend/api/visit_report_generate.php Frontend receipt/work-order screens updated to prefer  ledger_totals :  frontend/receipt.html ,  frontend/work_order.html Save flow includes tip safety net so Square tip is persisted as a Tip payment row if missing in payload:  frontend/api/visit_save.php ,  backend/visit_service.php Email receipt vs print receipt mismatch Reworked email receipt generation path in visit page to build from live  visit_get + settings_get  data and ledger-aware totals, replacing simplified/legacy divergence path:  frontend/visit.html Payroll module fixes Added alias normalization and clause support ( Jana/Janna  ->  Yana ) so counts/reports don’t zero out due name variants:  backend/payroll_service.php Improved pasted Excel parsing robustness (delimiter/header detection, fallback parsing, skip-reason diagnostics):  backend/payroll_service.php UI now surfaces import diagnostics and styled KPI cards:  backend/payroll.php Frontend activity monitor Added backend page to monitor frontend edits/signatures/status changes using  backend_change_log :  backend/frontend_activity.php UI cleanup for weird characters Frontdesk title and refresh text normalized to plain readable values:  frontend/index.html Item types management module Added standalone item type manager page and update/delete APIs:  frontend/item_types.html ,  frontend/api/item_type_update.php ,  frontend/api/item_type_delete.php Backend/WebUI canonicalization Large set of  webui/backend/*  files converted to thin loaders pointing to canonical  /backend/*  files to reduce drift; examples:  webui/backend/bootstrap.php ,  webui/backend/payment_ledger.php ,  webui/backend/report_reconciliation.php Validation Done Ran PHP lint on critical modules; all reported “No syntax errors detected”: backend/payment_ledger.php ,  backend/payment_ledger_service.php ,  backend/report_reconciliation.php ,  backend/report_totals_audit.php backend/jobs/import_customer_totals_csv_to_ledger.php ,  backend/jobs/rebuild_payment_ledger.php ,  backend/jobs/smoke_morning_jobs.php backend/morning_jobs_service.php ,  backend/appointment_service.php frontend/api/visit_get.php ,  frontend/api/visit_save.php ,  frontend/api/visit_report_generate.php backend/payroll_service.php ,  backend/payroll.php What Is Still Left To Do Finalize totals parity for April 2025 / April 2026 edge cases Remaining mismatch indicates ledger contents/classification still differ from your Access truth set for some rows (especially Edwards split + date bucketing). Action left: run reconciliation for target ranges and correct source rows/bucket rules until report total == ledger total == expected monthly total. Confirm all frontend totals pages are fully ledger-backed end-to-end You asked  reports.html ,  dashboard ,  index.html ,  webui.html  to use new table. Snapshot endpoints were updated, but full UI-path verification for each page still needs click-through + data diff. Receipt equivalence final QA Email receipt builder was unified in  frontend/visit.html , but still needs real-record side-by-side test against print receipt on the problematic visits to confirm exact parity in totals/labels/lines. Payroll import API parity backend/api/payroll_import.php  still hard-validates worker as only  Yana/Lola  (no alias normalization there). If that endpoint is used directly, aliases may still fail. Should align this API with service-layer alias logic. Ledger population completeness You imported Access CSV and forward-resynced, but full historical backfill strategy still needs final sign-off: Decide whether to trust imported Access rows as authoritative for all prior dates and keep live rebuild only forward. Run one full-range ledger audit after any additional historical imports. Potentially risky broad file churn review before release There are many unrelated changed/deleted files (including docs storage artifacts and backups). Needs staging/cleanup before commit/deploy so only intended production changes are shipped.","is_text_editable":1,"can_edit_inline":0}
live_table_manager · update
2026-04-12 11:25:44 · anonymous
item_types #238
Context
[]
Before
{"item_type_id":"238","type_name":"Dance costume"}
Changed Data
{"item_type_id":"238","type_name":"Dance costume"}
live_table_manager · update
2026-04-12 11:25:27 · anonymous
item_types #410
Context
[]
Before
{"item_type_id":"410","type_name":"tanktop"}
Changed Data
{"item_type_id":"410","type_name":"Tank Top"}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #5
Context
[]
Before
{"item_type_id":"5","type_name":"Formal Dress"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #6
Context
[]
Before
{"item_type_id":"6","type_name":"Mother of the Bride"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #7
Context
[]
Before
{"item_type_id":"7","type_name":"Mother of the Groom"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #17
Context
[]
Before
{"item_type_id":"17","type_name":"Coat"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #18
Context
[]
Before
{"item_type_id":"18","type_name":"Other Formal Wear"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #19
Context
[]
Before
{"item_type_id":"19","type_name":"Other"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #21
Context
[]
Before
{"item_type_id":"21","type_name":"Mother Of Bride Gown Top Shoulder Alterations"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #153
Context
[]
Before
{"item_type_id":"153","type_name":"Formal"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #154
Context
[]
Before
{"item_type_id":"154","type_name":"Non-Formal"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #155
Context
[]
Before
{"item_type_id":"155","type_name":"Casual"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #156
Context
[]
Before
{"item_type_id":"156","type_name":"Bridesmaid Dress Bridemaid Dress"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #157
Context
[]
Before
{"item_type_id":"157","type_name":"Formal Alter Suit"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #158
Context
[]
Before
{"item_type_id":"158","type_name":"bridesmaids dress"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #159
Context
[]
Before
{"item_type_id":"159","type_name":"sports banquet"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #160
Context
[]
Before
{"item_type_id":"160","type_name":"Suit jacket and pants"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #168
Context
[]
Before
{"item_type_id":"168","type_name":"Baby Dress"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #192
Context
[]
Before
{"item_type_id":"192","type_name":"Tuxedo Pants"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #193
Context
[]
Before
{"item_type_id":"193","type_name":"Overskirt"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #197
Context
[]
Before
{"item_type_id":"197","type_name":"Uniform Shirts"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #198
Context
[]
Before
{"item_type_id":"198","type_name":"Mother Of Groom Dress"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #199
Context
[]
Before
{"item_type_id":"199","type_name":"Bathing Suit"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #203
Context
[]
Before
{"item_type_id":"203","type_name":"Romper"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #205
Context
[]
Before
{"item_type_id":"205","type_name":"Bowling Jersey"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:04:49 · anonymous
item_types #211
Context
[]
Before
{"item_type_id":"211","type_name":"Mother of the Bride Dress"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #161
Context
[]
Before
{"item_type_id":"161","type_name":"Choose"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #162
Context
[]
Before
{"item_type_id":"162","type_name":"Bridemaid Dress"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #163
Context
[]
Before
{"item_type_id":"163","type_name":"Jerseys"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #165
Context
[]
Before
{"item_type_id":"165","type_name":"gown"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #167
Context
[]
Before
{"item_type_id":"167","type_name":"dresses"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #170
Context
[]
Before
{"item_type_id":"170","type_name":"30"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #171
Context
[]
Before
{"item_type_id":"171","type_name":"50"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #172
Context
[]
Before
{"item_type_id":"172","type_name":"Other Item"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #173
Context
[]
Before
{"item_type_id":"173","type_name":"Jackets"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #174
Context
[]
Before
{"item_type_id":"174","type_name":"27"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #175
Context
[]
Before
{"item_type_id":"175","type_name":"7"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #176
Context
[]
Before
{"item_type_id":"176","type_name":"21"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #177
Context
[]
Before
{"item_type_id":"177","type_name":"Alter Suit"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #178
Context
[]
Before
{"item_type_id":"178","type_name":"Table cloth"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #180
Context
[]
Before
{"item_type_id":"180","type_name":"denim pant and skirt, vest"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #181
Context
[]
Before
{"item_type_id":"181","type_name":"Wrap"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #182
Context
[]
Before
{"item_type_id":"182","type_name":"clothes"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #185
Context
[]
Before
{"item_type_id":"185","type_name":"46"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #186
Context
[]
Before
{"item_type_id":"186","type_name":"Karate Uniform"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #187
Context
[]
Before
{"item_type_id":"187","type_name":"short pants"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #188
Context
[]
Before
{"item_type_id":"188","type_name":"Bed Sheet"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #189
Context
[]
Before
{"item_type_id":"189","type_name":"cheerleading uniform"}
Changed Data
{"deleted":true}
live_table_manager · delete
2026-04-11 19:02:49 · anonymous
item_types #190
Context
[]
Before
{"item_type_id":"190","type_name":"Curtains"}
Changed Data
{"deleted":true}
← Prev 1 … 31 32 33 34 35 36 Next →