Add Azure Blob Storage archive & email safety net

- Add AzureBlobStorageService, DocumentArchiveSyncService, and related config for secondary PDF archiving of invoices/reminders
- Add SQL procs and schema changes for archive backfill
- Update invoice/reminder services to upload PDFs to blob storage
- Add telemetry counters and unit tests for blob storage/archive logic
- Add Fuchs:Email:OverrideRecipient config and enforce dev/test email redirect in ProcessWebComService, with tests
- Improve JS date parsing (German formats), stricter JSON date detection
- Increase widget SQL timeouts, update dependencies, docs, and project files
This commit is contained in:
Stefan
2026-07-03 10:15:04 +02:00
parent 3035ef1719
commit c3395bc83c
47 changed files with 1723 additions and 101 deletions
+6 -2
View File
@@ -11,9 +11,13 @@
$(this).remove();
api.rendered = false;
};
$ocms.isDateString = function (inp) {
/* Tests whether a string is a JSON/ISO-8601 date(-time) value as emitted by the
backend's JSON serializer (e.g. Newtonsoft "2021-09-09T00:00:00[.fff][Z|+hh:mm]").
Deliberately NOT based on the native Date constructor, which guesses ambiguous
formats (e.g. dotted dd.MM.yy strings) heuristically and inconsistently. */
$ocms.isJSONDateString = function (inp) {
if (typeof inp !== 'string') { return false; } else {
return isNaN(new Date(inp)) === false;
return /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})?)?$/.test(inp);
}
}
$ocms.failure = function (jqXHR) {