119 Commits
Author SHA1 Message Date
Thanakorn c6e5ab2841 Version theme CSS/JS URLs so browsers drop the cached CDN main.css 2026-09-24 15:38:10 +07:00
Thanakorn f11af6e949 Self-host front-end libraries, minimal sign-in header and CSP
- sign-in pages load only what they use (include_login_header.php, ajax_core.js)
- every library, font and data file served from assets/vendor with pinned
  versions (VERSIONS.json); no CDN at runtime
- Content-Security-Policy on app, sign-in and landing pages
- remove httpbin Dropzone target and source-map references
2026-09-24 14:53:41 +07:00
Thanakorn 8705be0d1b Enforce roles on admin endpoints and return real status codes
- users, SMTP and batch-lock endpoints are owner/admin only
- engines answer 400/403/404/409/500 instead of 200 with an error body;
  database errors no longer leak to the client
2026-09-24 14:53:40 +07:00
Thanakorn 73c680e844 Harden sign-in and password reset
- OTP attempt limits, constant-time compare, random reference codes
- DB-backed rate limits (429) on sign-in, OTP, reset, register, onboarding
- one generic sign-in failure message; reset request no longer reveals accounts
- no password kept in the session; real status codes on failures
2026-09-24 14:53:40 +07:00
Thanakorn ae98dcdcdd Harden web root, secrets and realtime auth
- .htaccess: refuse .git, .env, docker, nodejs, sdlc*, scripts, archives and
  app internals; security headers, HSTS over TLS, optional HTTPS redirect
- uploads served through app/file.php to signed-in users only
- Apache/PHP hardening config for the container (ServerTokens, expose_php)
- least-privilege DB account and APP_SECRET_KEY via docker/php/provision.php;
  SMTP passwords re-encrypted with a random IV (secret_box.php)
- Socket.IO rooms from a PHP-signed token; /emit and cron refuse empty secrets
- escape notification text; CLI guards on build scripts; no fixed demo password
2026-09-24 14:53:40 +07:00
Thanakorn e579dd596c Start every session through session.php; idle timeout, app access and auth status codes 2026-09-24 14:30:35 +07:00
Thanakorn c89b28da4c Fix QA review findings: server-side validation, notes encoding, dashboard totals
Validate document lines on the server and recompute their totals, store notes with quotes/markup/emoji (utf8mb4, idempotent escaping, decode in form fields), exclude transfers from company-wide stock in/out, count revenue from confirmed orders only, one low-stock rule everywhere, list unapproved lots, natural bin sort, stable order/PO sort, status tiles that add up.
2026-09-19 10:58:42 +07:00
Thanakorn 3668f22e55 Fix customer return confirm, auto credit note VAT and quotation link
Store the put-away location on return lines (new td_return_item columns, needs setup.php), split auto credit notes into net and VAT with the parent's department, drop the write to a td_quotation column that does not exist, and have the demo seed confirm its customer return.
2026-09-19 07:32:07 +07:00
Thanakorn 9a8998796c Redirect finance detail pages to their list when opened without an id 2026-09-19 06:33:45 +07:00
Thanakorn 033846dece Fix stock-out boot, transfer 500, Clear buttons and uncaught engine errors
Return JSON from any uncaught engine exception, stop the empty stock-out warehouse list aborting page boot, reject non-transfer rows in the transfer lookup, define the missing reset_input helper, and remove a stale unreferenced copy of confirm_order.php.
2026-09-18 20:21:34 +07:00
Thanakorn c60b705d98 Fix GL journal save, edit, detail view and list filters
Send journal lines, gl_id and list filters inside the ajax data payload where ajax_request reads them, select period when replacing a manual journal, and show ledger amounts to two decimals.
2026-09-18 16:19:27 +07:00
Thanakorn f70f226bd1 Fix timestamps, delete requests, invoice dates and GR quantities
Apply the configured timezone to PHP and both DB connections, wrap
unwrapped ajax payloads so delete buttons reach their engines, normalise
and validate invoice due dates, reject stock quantities below the stored
4dp scale, and list stock movements across all warehouses.
2026-09-17 09:00:15 +07:00
Thanakorn c915379e2e Fix item counts, PR/QT conversions, validation and department loss 2026-09-15 16:11:47 +07:00
Thanakorn 693c72f9ea Fix transfer quantity, unify date format, align demo seeds
Stock Transfer list showed 0.00 (read in instead of out); stock-out/transfer forms show the location quantity; dates display as YYYY-MM-DD HH:mm:ss. Demo seeds map product accounts and use product names and supplier batches.
2026-09-15 13:09:19 +07:00
Thanakorn 45331948c1 Use absolute URLs in invitation emails 2026-09-14 17:18:42 +07:00
Thanakorn ba73456185 Send the chosen company when switching branch 2026-09-14 17:17:40 +07:00
Thanakorn 6a271c1f7d Default the app registry when config.php does not define it 2026-09-14 16:57:36 +07:00
Thanakorn 4efab9f7c9 Rename retrieve_rack.php to retrieve_bin.php 2026-09-14 16:27:53 +07:00
Thanakorn 6b3a590aa9 Make email OTP login off by default 2026-09-14 15:38:36 +07:00
Thanakorn cf8106771b Make onboarding SMTP optional when OTP is off 2026-09-14 15:27:01 +07:00
Thanakorn 9afcf072b0 Add OTP_REQUIRED switch for email OTP login 2026-09-14 15:03:16 +07:00
Thanakorn 5d021d7683 Accept uppercase channel names in onboarding and company settings 2026-09-14 13:31:26 +07:00
Thanakorn 5ee0c8d41b Keep PHP notices out of login API JSON responses 2026-09-14 12:46:13 +07:00
Thanakorn c3113bc70d Fix login redirect and hide PHP errors on pages 2026-09-14 12:46:13 +07:00
Thanakorn 234814a23c Seed Demo Data - Rebranding 2026-08-17 13:12:07 +07:00
Thanakorn 0eab2a3b96 Demo Data Population 2026-08-14 14:10:31 +07:00
nok 618045540a fix login and configurations 2026-08-03 11:17:41 +07:00
Thanakorn S 7b294f70da Classe methods: remove reducdancy 2026-05-29 08:56:58 +07:00
Thanakorn S 356d308907 Fix horizontal scrollbar caused by sidebar margin overflowing viewport 2026-05-28 16:58:15 +07:00
Thanakorn S 9c7a4a139d Block concurrent login: reject new session if account already active 2026-05-28 16:21:55 +07:00
Thanakorn S b634372b22 Scope stock table access by company warehouses 2026-05-28 15:36:49 +07:00
Thanakorn S 2a6441c6a9 Complete Rack→Bin rename and fix ReportManager property bug 2026-05-28 09:53:19 +07:00
Thanakorn S 987cf7ded9 Change 'Rack' to 'Bin' 2026-05-27 17:14:53 +07:00
Thanakorn S ea94b6a6ae Wire targeted toast notifications to document status transitions 2026-05-27 13:44:55 +07:00
Thanakorn S dbbc89f8f2 notify node: userIDguard 2026-05-27 13:12:18 +07:00
Thanakorn S 82f66b0c41 NODEJS cron fix 2026-05-27 12:05:29 +07:00
Thanakorn S 8905b5bf35 fix NodeJS cron 2026-05-27 11:56:40 +07:00
Thanakorn S 8916d9180d cron low stock - overdue invoice 2026-05-27 11:45:48 +07:00
Thanakorn S 5bfaf6f8c3 all .md reviewed - fix remaining gaps 2026-05-27 10:42:44 +07:00
Thanakorn S 17a62e50e4 add missing roleGuards 2026-05-27 09:19:52 +07:00
Thanakorn S 1c5236d8e0 Master data review: spec updates and C1/C2/M3-M6 fixes 2026-05-26 17:33:58 +07:00
Thanakorn S 6ca4c91865 Document lifecycle review: spec updates and C2/M9 code fixes 2026-05-26 16:23:46 +07:00
Thanakorn S 632c039790 system notification 2026-05-26 13:26:57 +07:00
Thanakorn S 1a952b42dd Seal transaction limit coverage gaps 2026-05-26 13:10:54 +07:00
Thanakorn S 9e200d31fe Security hardening: invited user onboarding flow (C1–N7) 2026-05-26 10:18:40 +07:00
Thanakorn S 0815ae3292 document number sequence 2026-05-26 08:19:40 +07:00
Thanakorn S 5c0166ae73 Seal live dashboard event gaps 2026-05-25 17:02:52 +07:00
Thanakorn S 3c9475f3fa Close login gap 2026-05-25 15:34:12 +07:00
Thanakorn S 8027ab569e PHP event trigger by NodeJS [stock dashboard] 2026-05-25 14:33:36 +07:00
Thanakorn S 1237888ab9 stock aggregate table 2026-05-25 13:30:10 +07:00