Compare commits
No commits in common. "main" and "feature/sag-tidsforbrug-v1" have entirely different histories.
main
...
feature/sa
90
.env.example
90
.env.example
@ -2,8 +2,6 @@
|
||||
# POSTGRESQL DATABASE - Local Development
|
||||
# =====================================================
|
||||
DATABASE_URL=postgresql://bmc_hub:bmc_hub@postgres:5432/bmc_hub
|
||||
HUB_BASE_URL=https://hub.bmcnetworks.dk
|
||||
MOBILE_RECORDER_PROVISIONING_TOKEN=replace-with-a-long-random-service-token
|
||||
|
||||
# Database credentials (bruges af docker-compose)
|
||||
POSTGRES_USER=bmc_hub
|
||||
@ -11,12 +9,6 @@ POSTGRES_PASSWORD=bmc_hub
|
||||
POSTGRES_DB=bmc_hub
|
||||
POSTGRES_PORT=5433 # Changed from 5432 to avoid conflicts with other services
|
||||
|
||||
# Public website content administration API
|
||||
WEBSITE_CONTENT_API_URL=https://isp.bmcnetworks.dk/api/admin-content.php
|
||||
WEBSITE_CONTENT_API_HOST_HEADER=ct.bmcnetworks.dk
|
||||
WEBSITE_CONTENT_API_TOKEN=
|
||||
WEBSITE_CONTENT_API_TIMEOUT_SECONDS=20
|
||||
|
||||
# =====================================================
|
||||
# API CONFIGURATION
|
||||
# =====================================================
|
||||
@ -24,16 +16,6 @@ API_HOST=0.0.0.0
|
||||
API_PORT=8001 # Changed from 8000 to avoid conflicts with other services
|
||||
ENABLE_RELOAD=false # Set to true for live code reload (causes log spam in Docker)
|
||||
|
||||
# Customer default economics (used as fallback defaults in customer detail)
|
||||
CUSTOMER_DEFAULT_MARGIN_PERCENT=20.0
|
||||
CUSTOMER_DEFAULT_INVOICE_FEE=49.0
|
||||
CUSTOMER_DEFAULT_HOURLY_RATE=1200.0
|
||||
|
||||
# FirmaAPI (CVR company lookup)
|
||||
FIRMAAPI_BASE_URL=https://firmaapi.dk/api/v1
|
||||
FIRMAAPI_API_KEY=
|
||||
FIRMAAPI_TIMEOUT_SECONDS=12
|
||||
|
||||
# =====================================================
|
||||
# SECURITY
|
||||
# =====================================================
|
||||
@ -77,57 +59,6 @@ ECONOMIC_AGREEMENT_GRANT_TOKEN=your_agreement_grant_token_here
|
||||
# 🚨 SAFETY SWITCHES - Beskytter mod utilsigtede ændringer
|
||||
ECONOMIC_READ_ONLY=true # Set to false ONLY after testing
|
||||
ECONOMIC_DRY_RUN=true # Set to false ONLY when ready for production writes
|
||||
|
||||
# =====================================================
|
||||
# ALSO Cloud Marketplace Integration (Optional)
|
||||
# =====================================================
|
||||
ALSO_ENABLED=false
|
||||
ALSO_API_BASE_URL=
|
||||
ALSO_API_KEY=
|
||||
ALSO_API_SECRET=
|
||||
ALSO_TIMEOUT_SECONDS=20
|
||||
|
||||
# 🚨 SAFETY SWITCHES - Beskytter mod utilsigtede importer/sync
|
||||
ALSO_READ_ONLY=true
|
||||
ALSO_DRY_RUN=true
|
||||
|
||||
# =====================================================
|
||||
# FedEx Integration (Optional)
|
||||
# =====================================================
|
||||
FEDEX_ENABLED=false
|
||||
FEDEX_API_KEY=
|
||||
FEDEX_API_SECRET=
|
||||
FEDEX_ACCOUNT_NUMBER=
|
||||
FEDEX_BASE_URL=
|
||||
FEDEX_TIMEOUT_SECONDS=20
|
||||
|
||||
# 🚨 SAFETY SWITCHES - Beskytter mod utilsigtede forsendelser
|
||||
FEDEX_READ_ONLY=true
|
||||
FEDEX_DRY_RUN=true
|
||||
|
||||
# =====================================================
|
||||
# Shipmondo Integration (Optional)
|
||||
# Opret API-bruger og API-nøgle i Shipmondo under Indstillinger > API.
|
||||
# Brug https://sandbox.shipmondo.com/api/public/v3 til sandbox.
|
||||
# =====================================================
|
||||
SHIPMONDO_ENABLED=false
|
||||
SHIPMONDO_API_BASE_URL=https://app.shipmondo.com/api/public/v3
|
||||
SHIPMONDO_API_USER=
|
||||
SHIPMONDO_API_KEY=
|
||||
SHIPMONDO_TIMEOUT_SECONDS=30
|
||||
SHIPMONDO_SENDER_NAME=BMC Networks
|
||||
SHIPMONDO_SENDER_ATTENTION=
|
||||
SHIPMONDO_SENDER_ADDRESS1=
|
||||
SHIPMONDO_SENDER_ADDRESS2=
|
||||
SHIPMONDO_SENDER_POSTAL_CODE=
|
||||
SHIPMONDO_SENDER_CITY=
|
||||
SHIPMONDO_SENDER_COUNTRY_CODE=DK
|
||||
SHIPMONDO_SENDER_EMAIL=
|
||||
SHIPMONDO_SENDER_PHONE=
|
||||
|
||||
# Start sikkert: drafts er tilladt, men booking er blokeret.
|
||||
SHIPMONDO_READ_ONLY=true
|
||||
SHIPMONDO_DRY_RUN=true
|
||||
# =====================================================
|
||||
# Nextcloud Integration (Optional)
|
||||
# =====================================================
|
||||
@ -138,20 +69,6 @@ NEXTCLOUD_CACHE_TTL_SECONDS=300
|
||||
# Generate a Fernet key: python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
|
||||
NEXTCLOUD_ENCRYPTION_KEY=
|
||||
|
||||
# =====================================================
|
||||
# Links / Endpoints Module (Optional)
|
||||
# =====================================================
|
||||
LINKS_MODULE_ENABLED=false
|
||||
LINKS_READ_ONLY=true
|
||||
LINKS_DRY_RUN=true
|
||||
LINKS_DEAD_LINK_CHECK_ENABLED=true
|
||||
LINKS_DEAD_LINK_CHECK_INTERVAL_MINUTES=60
|
||||
LINKS_CHECK_TIMEOUT_SECONDS=5
|
||||
|
||||
# Vaultwarden (Bitwarden-compatible)
|
||||
VAULTWARDEN_BASE_URL=
|
||||
VAULTWARDEN_API_TOKEN=
|
||||
|
||||
# =====================================================
|
||||
# vTiger Cloud Integration (Required for Subscriptions)
|
||||
# =====================================================
|
||||
@ -178,7 +95,6 @@ IMAP_USERNAME=your_email@gmail.com
|
||||
IMAP_PASSWORD=your_app_password
|
||||
IMAP_USE_SSL=true
|
||||
IMAP_FOLDER=INBOX
|
||||
IMAP_TEST_FOLDER=BMC_TEST # Shared test inbox for all mail scenarios
|
||||
IMAP_READ_ONLY=true # Safety: READ-ONLY mode
|
||||
|
||||
# Microsoft Graph API (Alternative to IMAP - for Office365/Outlook)
|
||||
@ -195,12 +111,8 @@ EMAIL_RULES_AUTO_PROCESS=false
|
||||
EMAIL_AI_ENABLED=false
|
||||
EMAIL_AUTO_CLASSIFY=false
|
||||
EMAIL_AI_CONFIDENCE_THRESHOLD=0.7
|
||||
EMAIL_REQUIRE_MANUAL_APPROVAL=true
|
||||
EMAIL_AUTO_CREATE_CASES_FROM_EMAIL=false
|
||||
EMAIL_MAX_FETCH_PER_RUN=50
|
||||
EMAIL_PROCESS_ALLOW_FOLDER_OVERRIDE=true
|
||||
EMAIL_PROCESS_INTERVAL_MINUTES=5
|
||||
EMAIL_WORKFLOWS_ENABLED=true
|
||||
EMAIL_WORKFLOW_AUTORUN_ENABLED=false
|
||||
EMAIL_MAX_UPLOAD_SIZE_MB=50
|
||||
ALLOWED_EXTENSIONS=.pdf,.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.zip
|
||||
ALLOWED_EXTENSIONS=.pdf,.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.zip
|
||||
@ -24,7 +24,6 @@ GITHUB_REPO=ct/bmc_hub
|
||||
# POSTGRESQL DATABASE - Production
|
||||
# =====================================================
|
||||
DATABASE_URL=postgresql://bmc_hub_prod:CHANGE_THIS_PASSWORD@postgres:5432/bmc_hub_prod
|
||||
HUB_BASE_URL=https://hub.bmcnetworks.dk
|
||||
|
||||
# Database credentials (bruges af docker-compose/podman-compose)
|
||||
POSTGRES_USER=bmc_hub_prod
|
||||
@ -45,16 +44,6 @@ API_HOST=0.0.0.0
|
||||
API_PORT=8000
|
||||
API_RELOAD=false
|
||||
|
||||
# Customer default economics (used as fallback defaults in customer detail)
|
||||
CUSTOMER_DEFAULT_MARGIN_PERCENT=20.0
|
||||
CUSTOMER_DEFAULT_INVOICE_FEE=49.0
|
||||
CUSTOMER_DEFAULT_HOURLY_RATE=1200.0
|
||||
|
||||
# FirmaAPI (CVR company lookup)
|
||||
FIRMAAPI_BASE_URL=https://firmaapi.dk/api/v1
|
||||
FIRMAAPI_API_KEY=
|
||||
FIRMAAPI_TIMEOUT_SECONDS=12
|
||||
|
||||
# =====================================================
|
||||
# SECURITY - Production
|
||||
# =====================================================
|
||||
@ -87,69 +76,3 @@ ECONOMIC_AGREEMENT_GRANT_TOKEN=your_production_grant_here
|
||||
# VIGTIGT: Brug kun 'true' eller 'false' uden kommentarer på samme linje
|
||||
ECONOMIC_READ_ONLY=true
|
||||
ECONOMIC_DRY_RUN=true
|
||||
|
||||
# =====================================================
|
||||
# ALSO Cloud Marketplace Integration - Production (Optional)
|
||||
# =====================================================
|
||||
ALSO_ENABLED=false
|
||||
ALSO_API_BASE_URL=
|
||||
ALSO_API_KEY=
|
||||
ALSO_API_SECRET=
|
||||
ALSO_TIMEOUT_SECONDS=20
|
||||
|
||||
# 🚨 SAFETY SWITCHES
|
||||
# Start ALTID med begge sat til true i ny production deployment!
|
||||
ALSO_READ_ONLY=true
|
||||
ALSO_DRY_RUN=true
|
||||
|
||||
# =====================================================
|
||||
# FedEx Integration - Production
|
||||
# =====================================================
|
||||
FEDEX_ENABLED=false
|
||||
FEDEX_API_KEY=
|
||||
FEDEX_API_SECRET=
|
||||
FEDEX_ACCOUNT_NUMBER=
|
||||
FEDEX_BASE_URL=
|
||||
FEDEX_TIMEOUT_SECONDS=20
|
||||
|
||||
# 🚨 SAFETY SWITCHES
|
||||
# Start ALTID med begge sat til true i ny production deployment!
|
||||
FEDEX_READ_ONLY=true
|
||||
FEDEX_DRY_RUN=true
|
||||
|
||||
# =====================================================
|
||||
# Shipmondo Integration - Production
|
||||
# =====================================================
|
||||
SHIPMONDO_ENABLED=false
|
||||
SHIPMONDO_API_BASE_URL=https://app.shipmondo.com/api/public/v3
|
||||
SHIPMONDO_API_USER=
|
||||
SHIPMONDO_API_KEY=
|
||||
SHIPMONDO_TIMEOUT_SECONDS=30
|
||||
SHIPMONDO_SENDER_NAME=BMC Networks
|
||||
SHIPMONDO_SENDER_ATTENTION=
|
||||
SHIPMONDO_SENDER_ADDRESS1=
|
||||
SHIPMONDO_SENDER_ADDRESS2=
|
||||
SHIPMONDO_SENDER_POSTAL_CODE=
|
||||
SHIPMONDO_SENDER_CITY=
|
||||
SHIPMONDO_SENDER_COUNTRY_CODE=DK
|
||||
SHIPMONDO_SENDER_EMAIL=
|
||||
SHIPMONDO_SENDER_PHONE=
|
||||
|
||||
# Start ALTID med begge sat til true.
|
||||
SHIPMONDO_READ_ONLY=true
|
||||
SHIPMONDO_DRY_RUN=true
|
||||
|
||||
# =====================================================
|
||||
# Links / Endpoints Module - Production (Optional)
|
||||
# =====================================================
|
||||
# Start disabled; enable after migration + validation
|
||||
LINKS_MODULE_ENABLED=false
|
||||
LINKS_READ_ONLY=true
|
||||
LINKS_DRY_RUN=true
|
||||
LINKS_DEAD_LINK_CHECK_ENABLED=true
|
||||
LINKS_DEAD_LINK_CHECK_INTERVAL_MINUTES=60
|
||||
LINKS_CHECK_TIMEOUT_SECONDS=5
|
||||
|
||||
# Vaultwarden (Bitwarden-compatible)
|
||||
VAULTWARDEN_BASE_URL=
|
||||
VAULTWARDEN_API_TOKEN=
|
||||
|
||||
@ -258,32 +258,6 @@ crontab -e
|
||||
|
||||
## 🔄 Opdatering til Ny Version
|
||||
|
||||
### Valg Af Update-metode
|
||||
|
||||
| Situation | Brug metode | Hvorfor |
|
||||
|---|---|---|
|
||||
| Små kodeændringer i `app/*` eller `main.py` | `./update_fast.sh --ref <ref>` | Hurtig update uden ny release-tag/pakke |
|
||||
| Ændringer i `migrations/*` | `./updateto.sh <version>` | Kræver kontrolleret release + migrations-flow |
|
||||
| Ændringer i `requirements.txt` eller `Dockerfile` | `./updateto.sh <version>` | Kræver fuld image-build og versionsstyring |
|
||||
| Ændringer i `docker-compose*.yml`, scripts eller `.env` | `./updateto.sh <version>` | Drift/infra-konfiguration skal deployes fuldt |
|
||||
| Når du er i tvivl | `./updateto.sh <version>` | Sikreste og mest forudsigelige metode |
|
||||
|
||||
Hurtig start for fast mode:
|
||||
|
||||
```bash
|
||||
# Tjek først scope
|
||||
./update_fast.sh --ref main --dry-run --allow-prod
|
||||
|
||||
# Kør update
|
||||
./update_fast.sh --ref <commit-eller-tag> --allow-prod
|
||||
```
|
||||
|
||||
Rollback i fast mode:
|
||||
|
||||
```bash
|
||||
./update_fast.sh --rollback <backup-id> --allow-prod
|
||||
```
|
||||
|
||||
### På din Mac:
|
||||
|
||||
```bash
|
||||
@ -7,7 +7,6 @@ RUN apt-get update && apt-get install -y \
|
||||
curl \
|
||||
git \
|
||||
libpq-dev \
|
||||
libzbar0 \
|
||||
gcc \
|
||||
g++ \
|
||||
python3-dev \
|
||||
|
||||
@ -1,29 +0,0 @@
|
||||
# Release Notes v2.2.81
|
||||
|
||||
Dato: 2026-05-04
|
||||
|
||||
## Fixes
|
||||
|
||||
- Kontakter: Stabiliseret paginering i `/api/v1/contacts` ved at tilfoeje deterministisk tie-break (`ORDER BY ... , c.id`).
|
||||
- Kontakter: Fjernet skrøbelig frontend query-key short-circuit i kontaktlisten, som kunne medfoere at listen ikke blev genindlaest korrekt efter afbrudte requests.
|
||||
- Telefoni: Rettet datofilter i `/api/v1/telefoni/calls` saa `date_to` er inklusiv hele dagen.
|
||||
- Telefoni: Validerer nu tydeligt `date_from`/`date_to` format (`YYYY-MM-DD`) med 422 ved ugyldig input.
|
||||
- Deployment: `updateto.sh` bruger nu dynamiske containernavne baseret paa `STACK_NAME` i stedet for hardcoded `-prod`.
|
||||
|
||||
## Beroerte filer
|
||||
|
||||
- `app/contacts/backend/router_simple.py`
|
||||
- `app/contacts/frontend/contacts.html`
|
||||
- `app/modules/telefoni/backend/router.py`
|
||||
- `updateto.sh`
|
||||
- `VERSION`
|
||||
|
||||
## Drift
|
||||
|
||||
Hvis stacken koerer som `v2`, deploy med:
|
||||
|
||||
```bash
|
||||
sudo -iu bmcadmin
|
||||
cd /srv/podman/bmc_hub_v2
|
||||
./updateto.sh v2.2.81
|
||||
```
|
||||
@ -1,21 +0,0 @@
|
||||
# Release Notes v2.2.82
|
||||
|
||||
Dato: 2026-05-04
|
||||
|
||||
## Hotfix
|
||||
|
||||
- `updateto.sh` fjerner nu automatisk `STACK_NAME` fra `.env` inden startup.
|
||||
- `updateto.sh` vaelger automatisk `STACK_NAME=v2` i `/srv/podman/bmc_hub_v2` (ellers `prod`).
|
||||
|
||||
## Hvorfor
|
||||
|
||||
Nogle prod-deployments crashede API ved startup med:
|
||||
|
||||
- `ValidationError: STACK_NAME Extra inputs are not permitted`
|
||||
|
||||
Aarsagen var, at `STACK_NAME` laa i `.env` og blev indlaest af FastAPI Settings.
|
||||
|
||||
## Berort fil
|
||||
|
||||
- `updateto.sh`
|
||||
- `VERSION`
|
||||
@ -1,14 +0,0 @@
|
||||
# Release Notes v2.2.83
|
||||
|
||||
Dato: 2026-05-04
|
||||
|
||||
## Hotfix
|
||||
|
||||
- `updateto.sh` loader nu `.env` sikkert uden `source`.
|
||||
- Deploy fejler ikke laengere med shell-fejl som fx `Hub: command not found` ved ugyldige tekstlinjer i `.env`.
|
||||
- Scriptet giver nu tydelig linjenummer-fejl ved ugyldige `.env` linjer.
|
||||
|
||||
## Berorte filer
|
||||
|
||||
- `updateto.sh`
|
||||
- `VERSION`
|
||||
@ -1,13 +0,0 @@
|
||||
# Release Notes v2.2.84
|
||||
|
||||
Dato: 2026-05-04
|
||||
|
||||
## Hotfix
|
||||
|
||||
- Rettet logikfejl i `updateto.sh` hvor `podman-compose up -d` kunne blive sprunget over efter successfuld build.
|
||||
- Scriptet bygger nu foerst, og starter derefter stacken i et separat trin med korrekt fejlhaandtering.
|
||||
|
||||
## Berorte filer
|
||||
|
||||
- `updateto.sh`
|
||||
- `VERSION`
|
||||
@ -1,15 +0,0 @@
|
||||
# Release Notes v2.2.85
|
||||
|
||||
Dato: 2026-05-04
|
||||
|
||||
## Hotfix
|
||||
|
||||
- Telefoni-siden (`/telefoni`) rendrer nu seneste opkald server-side ved page load (SSR fallback).
|
||||
- Dette sikrer, at brugeren ser opkald med det samme, selv hvis browserens JS/rendering/filter-state fejler eller er cachet.
|
||||
- Klient-side `loadCalls()` koerer stadig bagefter og opdaterer tabellen som foer.
|
||||
|
||||
## Berorte filer
|
||||
|
||||
- `app/modules/telefoni/frontend/views.py`
|
||||
- `app/modules/telefoni/templates/log.html`
|
||||
- `VERSION`
|
||||
@ -1,13 +0,0 @@
|
||||
# Release Notes v2.2.86
|
||||
|
||||
Dato: 2026-05-04
|
||||
|
||||
## Hotfix
|
||||
|
||||
- Rettet Telefoni UI race-condition hvor server-renderede kald blev vist ved page load, men kunne blive overskrevet med tom liste efter ca. 1 sekund af foerste JS-refresh.
|
||||
- Siden bevarer nu initialt viste kald, hvis foerste API-refresh uden aktive filtre returnerer tomt.
|
||||
|
||||
## Berorte filer
|
||||
|
||||
- `app/modules/telefoni/templates/log.html`
|
||||
- `VERSION`
|
||||
@ -1,14 +0,0 @@
|
||||
# Release Notes v2.2.87
|
||||
|
||||
Dato: 2026-05-05
|
||||
|
||||
## Hotfix
|
||||
|
||||
- Telefoni: Foerste auto-load ignorerer nu browser-restored filterfelter (dato/user/uden sag).
|
||||
- Dette forhindrer at opkald vises ved load og derefter forsvinder efter ca. 1 sekund.
|
||||
- Filtre aktiveres stadig normalt ved brugerens egen interaktion.
|
||||
|
||||
## Berorte filer
|
||||
|
||||
- `app/modules/telefoni/templates/log.html`
|
||||
- `VERSION`
|
||||
@ -1,19 +0,0 @@
|
||||
# v2.3.1 — 16. maj 2026
|
||||
|
||||
## Fix: contacts pagination and company enrichment
|
||||
|
||||
- **Hotfix:** Contacts showing too few rows (contacts pagination bug)
|
||||
- **Fix:** File `app/contacts/backend/router_simple.py` to stabilize pagination and company enrichment
|
||||
|
||||
## Contacts list
|
||||
|
||||
- Fixed bug where contacts list showed too few rows (pagination issue)
|
||||
- Stabilized company enrichment data for contacts
|
||||
|
||||
## File changed
|
||||
|
||||
- `app/contacts/backend/router_simple.py`
|
||||
|
||||
## Affected versions
|
||||
|
||||
- v2.3.1
|
||||
@ -1,5 +0,0 @@
|
||||
# RELEASE_NOTES_v2.3.2
|
||||
|
||||
**Date:** 16. maj 2026
|
||||
|
||||
**Summary:** Telefoni page no longer appears empty due to SSR fallback rows in `app/modules/telefoni/templates/log.html`
|
||||
@ -1,16 +0,0 @@
|
||||
# Release Notes: v2.3.3
|
||||
|
||||
**Date:** 16. maj 2026
|
||||
|
||||
## New Features
|
||||
|
||||
### Telefoni Status Banner
|
||||
A new status banner was added to `app/modules/telefoni/templates/log.html` to show explicit load/error/ready states:
|
||||
|
||||
- **`telefoni_status == "error"`** → "Telefoni: Error" with "Failed to load telefoni data."
|
||||
- **`telefoni_status == "loading"`** → "Telefoni: Loading..." with "Fetching telefoni data."
|
||||
- **`telefoni_status == "ready"`** → "Telefoni: Ready" with "Telefoni data loaded successfully."
|
||||
- **default (no status)** → "Telefoni: No data" with a stronger fallback message: "Telefoni is not available. Try again later or check the network."
|
||||
|
||||
This improves visibility of telefoni data availability and provides clearer error messages.
|
||||
|
||||
@ -1,12 +0,0 @@
|
||||
# Release Notes: v2.3.4 — 16. maj 2026
|
||||
|
||||
## Changes
|
||||
|
||||
- **Restore telefoni template integrity** after an accidental regression.
|
||||
- **Add explicit telefoniStatus load/error/empty/success banner** to improve user feedback.
|
||||
- File: `app/modules/telefoni/templates/log.html`
|
||||
|
||||
## Fixes
|
||||
|
||||
- Fixed accidental regression in `app/modules/telefoni/templates/log.html` that corrupted template integrity.
|
||||
- Added explicit `telefoniStatus` load/error/empty/success banner to improve user feedback.
|
||||
@ -1,17 +0,0 @@
|
||||
# Release Notes - BMC Hub v2.3.5
|
||||
|
||||
**Release Date:** 16. maj 2026
|
||||
**Release Tag:** `v2.3.5`
|
||||
|
||||
## Hotfix
|
||||
|
||||
- Restored `app/modules/telefoni/templates/log.html` from known good state (`v2.3.2`) after template corruption in `v2.3.4`.
|
||||
- Fixes production issue where `/telefoni` rendered blank.
|
||||
|
||||
## Affected File
|
||||
|
||||
- `app/modules/telefoni/templates/log.html`
|
||||
|
||||
## Notes
|
||||
|
||||
- This is a corrective patch release intended to be deployed immediately.
|
||||
@ -1,6 +0,0 @@
|
||||
# Release Notes v2.3.6 — 16. maj 2026
|
||||
|
||||
## Telefoni Callback Fix
|
||||
- telefoni callbacks now use both env and DB whitelist
|
||||
- added internal 172.16.0.0/12 fallback acceptance
|
||||
- added migration `migrations/186_telefoni_ip_whitelist_setting.sql`
|
||||
@ -1,10 +0,0 @@
|
||||
# Release Notes: v2.3.7
|
||||
**Date:** 16. maj 2026
|
||||
|
||||
## Changes
|
||||
- fallback to mission_call_state when telefoni_opkald is empty
|
||||
- legacy rows shown read-only in telefoni UI
|
||||
|
||||
## Files changed
|
||||
- app/modules/telefoni/backend/router.py
|
||||
- app/modules/telefoni/templates/log.html
|
||||
@ -1,9 +0,0 @@
|
||||
# Release Notes: v2.3.8
|
||||
**Date:** 16. maj 2026
|
||||
|
||||
## Summary
|
||||
- Added secure read-only SQL Console page under /settings/sql
|
||||
- Added superadmin-protected execute endpoint /settings/sql/execute (SELECT/WITH only)
|
||||
- Added SQL Console nav link in settings
|
||||
- Added preset query buttons for telefoni/mission diagnostics
|
||||
- files: app/settings/backend/views.py, app/settings/frontend/sql_console.html, app/settings/frontend/settings.html
|
||||
@ -1,23 +0,0 @@
|
||||
# Release Notes - BMC Hub v2.3
|
||||
|
||||
**Release Date:** 16. maj 2026
|
||||
**Release Tag:** `v2.3`
|
||||
**Gitea:** https://g.bmcnetworks.dk/ct/bmc_hub/releases/tag/v2.3
|
||||
|
||||
## Highlights
|
||||
|
||||
- Added Service Contract Report page with customer and contract selection.
|
||||
- Implemented bug reporting feature with screenshot support.
|
||||
|
||||
## Included Commits (since v2.2.99)
|
||||
|
||||
- `a36e3e7` - feat: Add Service Contract Report page with customer and contract selection
|
||||
- `770f822` - feat: Implement bug reporting feature with screenshot support
|
||||
- `71f6372` - feat: Implement bug reporting feature with screenshot support
|
||||
|
||||
## Notes
|
||||
|
||||
- This release is tagged from the `main` branch.
|
||||
- e-conomic safety switches must remain enabled in production:
|
||||
- `ECONOMIC_READ_ONLY=true`
|
||||
- `ECONOMIC_DRY_RUN=true`
|
||||
@ -1,64 +0,0 @@
|
||||
# Release Notes: v2.5.0
|
||||
|
||||
**Dato:** 18. august 2026
|
||||
|
||||
## Overblik
|
||||
|
||||
Version 2.5 samler den store omlægning af sager, tidsregistrering og bundmenuen samt nye arbejdsgange for kontakter, abonnementer, lokationer, netværk, leverandørdata og fakturakontrol.
|
||||
|
||||
## Sager og tidsregistrering
|
||||
|
||||
- Timeren fortsætter korrekt efter sideskift og genindlæsning.
|
||||
- En medarbejder kan kun have én aktiv timer, men flere pausede timere.
|
||||
- Aktive, pausede og afsluttede timere kan åbnes og håndteres fra bundmenuen.
|
||||
- Afsluttede timere kan registreres som fakturering, klippekort, abonnement eller intern tid.
|
||||
- Arbejdstid kan klassificeres, blandt andet som support, udvikling og vedligehold.
|
||||
- Fanen **Tidsforbrug** på en sag viser og håndterer timere, som tilhører sagen.
|
||||
- Den aktive timer vises på den tilhørende sag på tværs af sagens faner.
|
||||
- Timervisning og dialogen **Skift sag** er gjort mere kompakt og viser tydeligere sag, kunde, kontakt, status og tidsforbrug.
|
||||
- Sagsfiltre, herunder hastesager, sender nu til de rigtige filtrerede visninger.
|
||||
- Advarsel og bekræftelse ved lukning af en sag uden registreret tid.
|
||||
|
||||
## Bundmenu og sidepaneler
|
||||
|
||||
- Timer-, besked-, opgave-, note- og sagsfordelingsvisninger er omarbejdet og bruger pladsen bedre.
|
||||
- Valgt fane og åben/lukket tilstand bevares under navigation.
|
||||
- Beskeder har individuelle læse- og kvitteringsstatusser pr. bruger.
|
||||
- Lederadgang til medarbejdertimere er strammet op, og almindelige brugere ser kun egne timere.
|
||||
- Timerkonvertering åbner som en særskilt arbejdsgang og virker direkte fra timerfanen.
|
||||
- Links fra bundmenuen bruger de kanoniske sagssider.
|
||||
|
||||
## Kontakter og kundehistorik
|
||||
|
||||
- Dublerede kontakter kan flettes med relaterede sager, samtaler, e-mails og historik.
|
||||
- Kontaktsøgning foreslår automatisk brugerens navn i de relevante arbejdsgange.
|
||||
- Samlet kontakt- og aktivitetshistorik bevares ved fletning.
|
||||
|
||||
## Abonnement, drift og rapportering
|
||||
|
||||
- Abonnement er en tydelig sagstype og en selvstændig arbejdsgang på sagen.
|
||||
- Tidsregistrering understøtter udvikling og vedligehold som rapporterbare typer.
|
||||
- Data kan rapporteres på tværs af sager, medarbejdere, arbejdstyper og afregningsformer.
|
||||
|
||||
## Øvrige større forbedringer
|
||||
|
||||
- Udvidet lokations-, krydsfelt-, vægudtags- og UISP/netværksoverblik.
|
||||
- Forbedret migrationscenter og sagsoprettelse fra migreringsdata.
|
||||
- Udvidet AnyDesk-integration og administration af leverandørers e-maildomæner.
|
||||
- Oprettelse af produkter fra ALSO-importlinjer.
|
||||
- Forbedringer til leverandørfakturaer og fakturafejlfinder.
|
||||
- Sikkerhedsrettelser til ejerskabskontrol, lederadgang og visning af brugeroprettet indhold.
|
||||
|
||||
## Databaseændringer
|
||||
|
||||
Releasen indeholder de nødvendige migrationer til timer-, besked-, kontakt-, lokations-, abonnements- og integrationsfunktionerne. Migrationerne køres ved normal opstart/deploy.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- Målrettede sags- og danske UI-tests: **26 bestået**.
|
||||
- Samlet `tests/`-suite: **104 bestået, 7 kendte test-isoleringsfejl** i ældre databaseafhængige tests.
|
||||
- Python-kompilering, JavaScript-syntakskontrol og applikationens health-check er bestået.
|
||||
|
||||
## Tilbageførsel
|
||||
|
||||
Tilstanden før bundmenu- og timergennemgangen er bevaret i branch `checkpoint-before-bottom-bar-review-20260817` på commit `88f7cec`.
|
||||
@ -1,34 +0,0 @@
|
||||
# Release Notes: v2.5.1
|
||||
|
||||
**Dato:** 18. august 2026
|
||||
|
||||
## Overblik
|
||||
|
||||
Version 2.5.1 retter de vigtigste fejl fundet efter 2.5-udgivelsen i tidsregistrering, VoIP og oprettelse af nye sager.
|
||||
|
||||
## Tidsregistrering
|
||||
|
||||
- Manuel tidsregistrering bruger nu den indtastede lokale dato og tid uden utilsigtet tidszoneforskydning.
|
||||
- Flere medarbejdere kan vælges i samme registrering, og der oprettes én tidsregistrering under hver valgt medarbejder.
|
||||
- Medarbejdervælgeren viser sagens tilgængelige brugere tydeligt og er adskilt fra live tracking.
|
||||
- Registreringer, der krydser midnat, får korrekt slutdato.
|
||||
- Sagsvisningen leveres uden browsercache, så de seneste ændringer i tidsregistreringen vises med det samme.
|
||||
|
||||
## VoIP
|
||||
|
||||
- Ved et ukendt telefonnummer kan en ny kontakt knyttes til et valgt firma direkte i VoIP-popupen.
|
||||
- De viste åbne sager kan åbnes og knyttes direkte til opkaldet.
|
||||
- Click-to-call accepterer nu en godkendt bruger på Hubens lokale eller interne adresse, selv når en proxy skjuler klientens lokale IP-adresse.
|
||||
- VoIP-klientens cacheversion er opdateret.
|
||||
|
||||
## Opret ny sag
|
||||
|
||||
- Når et firma vælges først, hentes og vises firmaets kontaktpersoner automatisk.
|
||||
- Kontaktsøgningen afgrænses til det valgte firmas kontakter og søger på navn, rolle, e-mail og telefon.
|
||||
- Fjernes firmaet, skifter kontaktfeltet tilbage til den globale kontaktsøgning.
|
||||
- Det er fortsat muligt at vælge flere kontaktpersoner på sagen.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- Målrettede tests for sager, tidsregistrering og VoIP: **36 bestået**.
|
||||
- Python- og diff-kontrol samt lokal API-health-check er gennemført.
|
||||
@ -1,34 +0,0 @@
|
||||
# Release Notes: v2.6.0
|
||||
|
||||
**Dato:** 25. august 2026
|
||||
|
||||
## Overblik
|
||||
|
||||
Version 2.6.0 udvider BMC Hub med Shipmondo-forsendelser, en samlet afregningsgang for tidskøen og en mere robust produktintegration. Sagsvisningen har samtidig fået forbedret historik og arbejdsgange omkring produkter og forsendelser.
|
||||
|
||||
## Shipmondo
|
||||
|
||||
- Ny Shipmondo-integration med produktoversigt, lokale bookingkladder, afsendelse, tracking og PDF-labels.
|
||||
- Forsendelser knyttes til sag, kunde og kontakt og gemmes med pakker, status og API-resultat.
|
||||
- Sikker standardopsætning med integrationen deaktiveret samt `read-only` og `dry-run` aktiveret.
|
||||
- Nye miljøindstillinger og Docker-konfiguration til API-adgang og afsenderoplysninger.
|
||||
|
||||
## Tidskø og afregning
|
||||
|
||||
- Valgte tidsregistreringer kan forhåndsvalideres og afregnes samlet.
|
||||
- Understøttelse af ordrekladde, klippekort og ikke-fakturerbar afregning uden at blande betalingsmetoder.
|
||||
- Oprettede ordrekladder og afregningsoplysninger spores direkte på tidsregistreringerne, så dobbeltbehandling undgås.
|
||||
- Kundeidentifikation prioriterer sagens virksomhed og håndterer ældre trackingdata som fallback.
|
||||
|
||||
## Produkter og sager
|
||||
|
||||
- Produktdata fra API Gateway normaliseres på tværs af leverandørernes forskellige feltnavne og payload-formater.
|
||||
- Produktsøgning, sortering og import er gjort mere robust ved manglende eller indlejrede data.
|
||||
- Købs- og salgslinjer kan oprettes atomisk på en sag fra én produkthandling.
|
||||
- Sagsdetaljen og historikken viser flere relevante handlinger og tidsstempler.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- Målrettede tests for sager, tidskø, produkter og Shipmondo: **45 bestået**.
|
||||
- Python-kompilering og diff-kontrol er gennemført.
|
||||
- Den samlede vedligeholdte testsuite har 131 beståede og 7 eksisterende fejl i databaseafhængige eller andre ikke-berørte moduler.
|
||||
@ -1,21 +0,0 @@
|
||||
# Release Notes: v2.6.1
|
||||
|
||||
**Dato:** 25. august 2026
|
||||
|
||||
## Overblik
|
||||
|
||||
Version 2.6.1 retter genkørsel af fem ældre migrationer, som produktionsserverens schema-detektion korrekt fandt, men som ikke var fuldt idempotente.
|
||||
|
||||
## Databasemigrationer
|
||||
|
||||
- Settings- og ticket-triggers fjernes sikkert, før de genoprettes.
|
||||
- `sag_salgsvarer` oprettes fra rod-migrationerne, hvis den modul-lokale grundmigration ikke tidligere er kørt.
|
||||
- Produkt-, leverandørfaktura- og sporbarhedskolonner kan derefter tilføjes sikkert.
|
||||
- Ticket-views med udvidede tabelkolonner genskabes sikkert ved genkørsel.
|
||||
- Den forældede unikke CVR-regel er fjernet i overensstemmelse med den nuværende datamodel, hvor flere kundeposter må dele CVR-nummer.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- De fem berørte migrationer er kørt samlet mod lokal PostgreSQL: **5 bestået**.
|
||||
- Hele sættet er derefter genkørt: **5 bestået**, hvilket bekræfter idempotens.
|
||||
- Diff-kontrol er gennemført.
|
||||
@ -1,19 +0,0 @@
|
||||
# Release Notes: v2.6.2
|
||||
|
||||
**Dato:** 25. august 2026
|
||||
|
||||
## Overblik
|
||||
|
||||
Version 2.6.2 retter udgående opkald fra kontakt-popupen på en sag.
|
||||
|
||||
## Telefoni
|
||||
|
||||
- En manglende afsluttende klamme i SMS-eventlisteneren gjorde den tilhørende JavaScript-blok ugyldig.
|
||||
- Click-to-call-funktionen indlæses nu korrekt igen.
|
||||
- Ring-knappen bruger fortsat kontaktens mobilnummer som førstevalg og telefonnummeret som fallback.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- JavaScript-syntakskontrol bestået for den berørte blok.
|
||||
- Sag-modulets tests: **31 bestået**.
|
||||
- Diff-kontrol gennemført.
|
||||
@ -1,25 +0,0 @@
|
||||
# Release Notes: v2.7.0
|
||||
|
||||
**Dato:** 25. august 2026
|
||||
|
||||
## Overblik
|
||||
|
||||
Version 2.7.0 gør linkede telefonopkald og AnyDesk-sessioner synlige i både sagens tidsregistrering og samlede historik.
|
||||
|
||||
## Tidsregistrering
|
||||
|
||||
- Ny oversigt over linkede opkald og AnyDesk-sessioner på sagen.
|
||||
- Aktiviteter viser type, tidspunkt, varighed, kontakt/nummer og medarbejder.
|
||||
- Aktiviteterne vises som kildedata og opretter ikke automatisk fakturerbar tid.
|
||||
|
||||
## Historik
|
||||
|
||||
- Linkede indgående og udgående opkald indgår som selvstændige historikhændelser.
|
||||
- Linkede AnyDesk-sessioner indgår med status, varighed og ansvarlig medarbejder.
|
||||
- Historik med undersager inkluderer også aktiviteter linket til undersagerne.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- Sag-modul: **33 bestået**.
|
||||
- Telefoni: **5 bestået**.
|
||||
- Python-kompilering og diff-kontrol gennemført.
|
||||
@ -1,20 +0,0 @@
|
||||
# Release Notes: v2.7.1
|
||||
|
||||
**Dato:** 25. august 2026
|
||||
|
||||
## Overblik
|
||||
|
||||
Version 2.7.1 retter linkning og varighed for ældre telefonopkald fra Mission Control.
|
||||
|
||||
## Telefoni
|
||||
|
||||
- Ældre opkald fra `mission_call_state` flyttes til den almindelige telefonilog, når en kontakt eller sag linkes.
|
||||
- Alle linkede opkald bliver dermed synlige på sagen samt i Tidregistrering og Historik.
|
||||
- Den stabile eksterne call-id og kildetype sendes med ved linkning.
|
||||
- Forsinkede afslutningshændelser kan ikke længere skabe varigheder på flere måneder.
|
||||
- Eksisterende urimelige varigheder over 12 timer skjules som ukendt varighed.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- Telefoni- og sag-tests: **41 bestået**.
|
||||
- Python-kompilering og diff-kontrol gennemført.
|
||||
@ -1,30 +0,0 @@
|
||||
# BMC Hub v2.7.2
|
||||
|
||||
## CRM
|
||||
|
||||
- Kunde- og kontaktkort har nye faner til direkte relaterede sager og e-mails.
|
||||
- Kontaktsøgning understøtter navn i flere rækkefølger, firma, titel, afdeling, e-mail og normaliserede telefonnumre.
|
||||
- Kontakter kan oprettes eller opdateres fra Outlook `.msg`/`.eml` med godkendelse før lagring.
|
||||
- CVR fra mails valideres gennem den eksisterende FirmaAPI-integration, og eksisterende virksomheder genbruges.
|
||||
- Leverandørservice kan administreres direkte fra kundens økonomiske oplysninger.
|
||||
|
||||
## Sager og telefoni
|
||||
|
||||
- Nye sager forvælger den aktuelle bruger som ansvarlig.
|
||||
- Kontaktkort på sager har direkte handlinger til opkald og SMS.
|
||||
- Opkald startet fra en sag knyttes til sagen og vises i opkaldshistorikken.
|
||||
- Firmaet i sagens topområde linker direkte til kundekortet.
|
||||
|
||||
## Abonnementer
|
||||
|
||||
- Udvidet aftale-, faktureringskalender- og ændringsflow.
|
||||
- Nye migreringer til første fakturalinjer, periodisering og integritetskontrol.
|
||||
|
||||
## Websiteindhold
|
||||
|
||||
- Nyt administrationsmodul til kundereferencer og driftsinformation.
|
||||
- Rettighedsstyret visning og redigering samt website-endpoints til indhold og logoer.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- Målrettede CRM-, sag-, telefoni-, abonnements- og website-tests er kørt før release.
|
||||
@ -1,18 +0,0 @@
|
||||
# BMC Hub v2.8.0
|
||||
|
||||
## Ny sag
|
||||
|
||||
- Redesignet, mere fokuseret oprettelsesflow med kompakte typevalg og progressive paneler.
|
||||
- Browser-kladdesystem, hurtigskabeloner, tagvælger og tastaturgenvej til oprettelse.
|
||||
- Duplikatindsigt for kunde og valgt kontakt samt arbejdsbelastning for ansvarlig medarbejder.
|
||||
- Brand- og type-tagforslag ud fra sagens titel og beskrivelse.
|
||||
|
||||
## Interne beskeder
|
||||
|
||||
- Nyt, mere overskueligt beskedflow mellem medarbejdere.
|
||||
- Understøttelse af korte telefonbeskeder med valgfri kontaktperson og tilbageringningsnummer.
|
||||
|
||||
## Database
|
||||
|
||||
- Kør `migrations/238_case_create_templates.sql`.
|
||||
- Kør `migrations/239_internal_phone_messages.sql`.
|
||||
@ -1,39 +0,0 @@
|
||||
# BMC Hub v2.8.1
|
||||
|
||||
## Planner
|
||||
|
||||
- Nyt Planner-modul til fordeling af sager og overblik over teamets kapacitet.
|
||||
- Dag-, uge- og månedsvisning med planlagte blokke, registreret tid og ekstern travl tid.
|
||||
- Drag-and-drop af sager med kompakt forhåndsvisning, 15-minutters placering og håndterbare standardblokke.
|
||||
- Bredere sagsoversigt og forbedret pladsudnyttelse i kalenderen.
|
||||
- Kalender og Planlægger er samlet i en Kalender-undermenu.
|
||||
|
||||
## Systemlog og drift
|
||||
|
||||
- Ny administrativ systemlog til telefoni, e-mail og øvrige integrationshændelser.
|
||||
- Udvidet hændelseslogning og adgangskontrol i indstillingerne.
|
||||
|
||||
## AI og fakturaskabeloner
|
||||
|
||||
- Rettet AI Auto-generer i Template Builder.
|
||||
- Tilføjet manglende `OWN_CVR`-konfiguration og validering af Ollama-fejl.
|
||||
- Ollama fakturaudtræk tvinges til struktureret JSON.
|
||||
- GUI'en viser nu den konkrete AI-fejl i stedet for en generisk fejlbesked.
|
||||
|
||||
## Integrationer og brugerflade
|
||||
|
||||
- Forbedringer til telefoni, e-mail og ALSO Cloud-integrationerne.
|
||||
- Mindre rettelser til login, indstillinger og den fælles navigation.
|
||||
- Fremtidige udviklingsplaner har fået et fast dokumentationsområde.
|
||||
|
||||
## Database
|
||||
|
||||
- Kør `migrations/240_planner.sql`.
|
||||
- Kør `migrations/241_system_event_log.sql`.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- Planner: 8 tests bestået.
|
||||
- Samlet testsuite: 271 bestået, 1 sprunget over.
|
||||
- Fire eksisterende tests kræver databaseinitialisering eller har forældede invoice-history mocks.
|
||||
- Python- og JavaScript-syntakskontrol bestået.
|
||||
@ -1,11 +0,0 @@
|
||||
# BMC Hub v2.8.10
|
||||
|
||||
## Gem e-conomic-ordrenummer
|
||||
|
||||
- Gemmer `economic_draft_id` fra det eksisterende eksportflow som kladdens e-conomic-ordrenummer.
|
||||
- Audit-eventet `export_success` indeholder dermed det faktiske nummer i stedet for `null`.
|
||||
- Bevarer understøttelse af de øvrige eksisterende feltnavne i eksportsvaret.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- Regressionstest dækker mapping fra `economic_draft_id` til e-conomic-ordrenummer.
|
||||
@ -1,6 +0,0 @@
|
||||
# BMC Hub v2.8.11
|
||||
|
||||
## Ordreoverskrift
|
||||
|
||||
- Ordrekladder oprettet fra ALSO-abonnementer får overskriften `Abonnementer`.
|
||||
- Eksisterende åbne abonnementskladder får samme overskrift, når der tilføjes flere godkendte linjer.
|
||||
@ -1,21 +0,0 @@
|
||||
# BMC Hub v2.8.12
|
||||
|
||||
## Eksportkvittering og afstemning
|
||||
|
||||
- Gemmer e-conomic-kunde, valuta, layout, nettobeløb, request, response, ekstern reference, oprettede varer og brugeren, der eksporterede.
|
||||
- Sender den interne idempotency-reference med ordrekladden til e-conomic.
|
||||
- En ordre kan ikke længere markeres som eksporteret, bogført eller betalt uden et e-conomic-ordrenummer.
|
||||
- Eksisterende poster i den ugyldige kombination flyttes til `uncertain`, så de skal afstemmes før en eventuel ny eksport.
|
||||
- Gemmer og viser den seneste eksportfejl.
|
||||
|
||||
## Ordrevisning
|
||||
|
||||
- Viser kundenavn sammen med Hub-ID og e-conomic-kundenummer.
|
||||
- Viser en kompakt eksportkvittering med ordrenummer, periode, valuta, layout, nettobeløb, bruger og reference.
|
||||
- Viser eksporthistorik som læsbare beskrivelser i stedet for rå JSON.
|
||||
- Skjuler fakturanummer indtil bogføring og skjuler tvungen geneksport efter gennemført eksport.
|
||||
- Retter eksisterende ALSO-abonnementskladder til titlen `Abonnementer`.
|
||||
|
||||
## Installation
|
||||
|
||||
- Kør migration `245_ordre_export_receipt.sql` før applikationen opdateres.
|
||||
@ -1,13 +0,0 @@
|
||||
# BMC Hub v2.8.14
|
||||
|
||||
## ALSO ordrekladder og e-conomic-reference
|
||||
|
||||
- Bruger Hub-ordre-ID som `Eksternt ID` ved eksport til e-conomic.
|
||||
- Efterlader `Tekst 1` tom for nye ALSO-genererede ordrekladder.
|
||||
- Tilføjer perioden fra CSV-feltet `Actual Charge Interval` til varelinjens beskrivelse.
|
||||
- Migration 247 rydder den tidligere systemtekst og opdaterer eksisterende, ikke-eksporterede ALSO-ordrekladder med perioden.
|
||||
- Bevarer den tidligere eksportreference ved afstemning af allerede påbegyndte eksportforsøg.
|
||||
|
||||
## Opgradering
|
||||
|
||||
Kør `migrations/247_also_order_external_id.sql` efter deployment. Migrationen ændrer kun ALSO-ordrekladder med status `pending`; eksporterede ordre ændres ikke.
|
||||
@ -1,11 +0,0 @@
|
||||
# BMC Hub v2.8.15
|
||||
|
||||
## ALSO-perioder på ordrelinjer
|
||||
|
||||
- Viser perioden fra `Actual Charge Interval` på en ny linje under produktnavnet.
|
||||
- Migration 248 retter eksisterende, ikke-eksporterede ALSO-ordrekladder.
|
||||
- Allerede eksporterede ordre ændres ikke.
|
||||
|
||||
## Opgradering
|
||||
|
||||
Kør `migrations/248_also_order_period_line_break.sql` efter deployment.
|
||||
@ -1,9 +0,0 @@
|
||||
# BMC Hub v2.8.16
|
||||
|
||||
## Flerlinjede ordrebeskrivelser
|
||||
|
||||
- Viser ordrelinjens produkt og ALSO-periode på separate linjer i både opret- og detaljevisningen.
|
||||
- Bruger et kompakt tekstområde ved redigering, så linjeskiftet bevares ved gem og eksport til e-conomic.
|
||||
- Viser linjeskift i forhåndsvisningen af en e-conomic-opdatering.
|
||||
|
||||
Der følger ingen ny databasemigration med denne release.
|
||||
@ -1,13 +0,0 @@
|
||||
# BMC Hub v2.8.2
|
||||
|
||||
## AI Template Builder
|
||||
|
||||
- Rettet fejl når Ollama returnerer fakturabeløb som tekst i stedet for numerisk JSON.
|
||||
- Understøtter nu både danske beløbsformater som `1.471,20 DKK` og engelske formater som `1471.20`.
|
||||
- Ugyldige eller tomme beløb håndteres uden at afbryde AI-analysen.
|
||||
- Tilføjet regressionstest for beløbsnormalisering.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- Regressionstest: 2 bestået.
|
||||
- Python-syntaks og diff-kontrol bestået.
|
||||
@ -1,38 +0,0 @@
|
||||
# BMC Hub v2.8.3
|
||||
|
||||
## Internetforbindelser og abonnementer
|
||||
|
||||
- Ny hurtig oprettelse med særskilte flows for fysisk forbindelse, delt hovedfiber og BMCnet.
|
||||
- Delt hovedfiber oprettes med BMC Networks som ejer og uden produkt, abonnement eller abonnementssag.
|
||||
- BMCnet opretter og forbinder kunde, internetprodukt, abonnement og delt hovedforbindelse i ét flow.
|
||||
- Kundens adresse bruges til tolerant forslag af delt hovedforbindelse, inklusive mindre staveforskelle.
|
||||
- Forenklet BMCnet-formular, hvor tekniske værdier arves og kun et valgfrit notefelt vises.
|
||||
- Forbedret overblik over delte hovedforbindelser, BMCnet-kunder, kapacitet og økonomi.
|
||||
|
||||
## Leverandørfakturaer
|
||||
|
||||
- Hybrid fakturaudtræk kombinerer tekst, layout og AI med kontrolleret fallback.
|
||||
- Forbedret udtræk af danske beløb, fakturafelter og varelinjer fra forskellige leverandørformater.
|
||||
- Template Builder viser fundne data tydeligere og håndterer AI-fejl mere robust.
|
||||
- Internetfakturaer kan behandles og følges i internetforbindelsesmodulet.
|
||||
|
||||
## E-mail og arbejdsgange
|
||||
|
||||
- Forenklet valg af mailtype og arbejdsflow med tydeligere handlinger.
|
||||
- Leverandørfaktura-flow kan registrere internetfakturaer til efterfølgende behandling.
|
||||
- Forbedret leverandør- og kundematch samt mere kompakt visning af avancerede oplysninger.
|
||||
|
||||
## Sager, kontakter og brugerflade
|
||||
|
||||
- Kontakter fra andre virksomheder markeres tydeligt på en sag.
|
||||
- Kontakter kan oprettes direkte fra kontaktsøgningen, også når søgningen ikke giver resultat.
|
||||
- Bugrapporter bruger en hurtigere og mere stabil lokal indsamling af relevant sideinformation.
|
||||
- Rettelser til ALSO Cloud-søgning, fælles navigation og øvrige betjeningsdetaljer.
|
||||
- Plan for AI-baseret kundestemning og sikker fakturabehandling er gemt under `fremtidige planer`.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- 279 tests bestået og 1 sprunget over.
|
||||
- Fire kendte, ikke-release-relaterede tests fejler fortsat: tre forældede invoice-error mocks og én databaseafhængig deaktiveringstest.
|
||||
- Nye regressionstests for hybrid fakturaudtræk og hurtig oprettelse af internetforbindelser består.
|
||||
- Python- og JavaScript-syntaks samt diff-kontrol bestået.
|
||||
@ -1,13 +0,0 @@
|
||||
# BMC Hub v2.8.4
|
||||
|
||||
## e-conomic ordreeksport
|
||||
|
||||
- Ordremodulet arver nu de globale `ECONOMIC_READ_ONLY` og `ECONOMIC_DRY_RUN`, når de valgfrie `ORDRE_ECONOMIC_*`-indstillinger ikke er defineret.
|
||||
- Eksplicitte ordreindstillinger har fortsat førsteprioritet.
|
||||
- Sikker standard bevares: uden eksplicit konfiguration er eksport stadig read-only/dry-run.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- Regressionstest for både global fallback og eksplicit ordreoverride består.
|
||||
- Relevante faktura- og internettests består.
|
||||
- Python-syntaks og diff-kontrol består.
|
||||
@ -1,13 +0,0 @@
|
||||
# BMC Hub v2.8.5
|
||||
|
||||
## e-conomic ordreeksport
|
||||
|
||||
- Henter kundens standardopsætning fra e-conomic før oprettelse af en ordrekladde.
|
||||
- Medsender obligatoriske betalingsbetingelser, modtageroplysninger og momszone.
|
||||
- Bruger kundens valuta og adresseoplysninger fra e-conomic.
|
||||
- Viser e-conomics konkrete valideringsfejl i stedet for kun HTTP-status 400.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- 9 relevante regressionstests består.
|
||||
- Python-syntaks og diff-kontrol består.
|
||||
@ -1,13 +0,0 @@
|
||||
# BMC Hub v2.8.6
|
||||
|
||||
## e-conomic ordreeksport
|
||||
|
||||
- Bruger kundens gyldige standardlayout fra e-conomic i stedet for et ugyldigt lokalt standardnummer.
|
||||
- Kontrollerer produktnumre mod e-conomic inden eksport.
|
||||
- Ukendte lokale produktnumre eksporteres som fritekstlinjer uden ugyldig produktreference.
|
||||
- Bevarer produktreferencen, når produktet findes i e-conomic.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- Fokuserede regressionstests består.
|
||||
- Python-syntaks og diff-kontrol består.
|
||||
@ -1,21 +0,0 @@
|
||||
# BMC Hub v2.8.7
|
||||
|
||||
## Varer, priser og e-conomic
|
||||
|
||||
- Nyt varekatalog med importkontrol, låste e-conomic-koblinger og synkroniseringsstatus.
|
||||
- Lokale prisregler, særskilte prisrettigheder og bevarelse af priser på gemte kladder.
|
||||
- Kontrol af varer og priser før ordreeksport samt afstemning efter usikre eksportforsøg.
|
||||
- Ændring af eksisterende kunder og varer i e-conomic kræver en begrundet anmodning og godkendelse fra en anden bruger med særskilt rettighed.
|
||||
- Direkte ekstern skrivning er begrænset til oprettelse af kunder, varer og ordrekladder; godkendte kunde- og vareændringer har en særskilt adgangskontrol.
|
||||
|
||||
## Installation
|
||||
|
||||
- Kør migration `242_economic_product_integration.sql` og derefter `243_economic_four_eyes_changes.sql` før aktivering af den nye version.
|
||||
- Migrationerne tilføjer tabeller, felter, indeks, constraints og rettigheder. Eksisterende varenumre kobles ikke automatisk.
|
||||
- Tilknyt og kontrollér aftalen via **Indstillinger → Varer, priser og synkronisering**, før forbindelsen aktiveres. Se `docs/ECONOMIC_PRODUCT_CATALOG.md`.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- 69 fokuserede tests består, inklusive seks lokale databasetests med rollback og uden eksterne e-conomic-skrivninger.
|
||||
- Isoleret browsertest består for varekobling, decimalpriser, livscyklus, prisregler og eksportfanen uden JavaScript-fejl.
|
||||
- Python- og JavaScript-syntakskontrol samt diff-kontrol består.
|
||||
@ -1,17 +0,0 @@
|
||||
# BMC Hub v2.8.8
|
||||
|
||||
## Rettelse af adgang til e-conomic-varekataloget
|
||||
|
||||
- Tildeler de nye e-conomic-rettigheder til den eksisterende `Administrators`-gruppe.
|
||||
- Retter fejlen `Missing required permission: economic.catalog.view` for almindelige administratorer.
|
||||
- Andre grupper og brugere får ikke nye rettigheder automatisk.
|
||||
|
||||
## Ordreeksport
|
||||
|
||||
- Stopper eksporten før afsendelse, hvis et varenummer ikke findes i e-conomic.
|
||||
- Viser de manglende varenumre og sender ikke længere prislinjer uden den produktreference, som e-conomic kræver.
|
||||
|
||||
## Installation
|
||||
|
||||
- Kør migration `244_economic_permissions_backfill.sql` efter migration 242 og 243.
|
||||
- Migrationen er idempotent og ændrer kun gruppens koblinger til eksisterende rettigheder.
|
||||
@ -1,14 +0,0 @@
|
||||
# BMC Hub v2.8.9
|
||||
|
||||
## Produktoprettelse ved ordreeksport
|
||||
|
||||
- Hvis en ordrelinjes vare ikke findes i e-conomic, åbnes et forhåndsvindue før eksport.
|
||||
- Vinduet viser varenummer, navn, salgspris, EAN/stregkode, beskrivelse og varegruppe for hver vare, der skal oprettes.
|
||||
- Brugeren vælger eller kontrollerer varegruppen og godkender samlet med **Opret varer og eksportér**.
|
||||
- Før godkendelsen udføres kun opslag. Efter godkendelsen oprettes de viste varer og derefter ordrekladden.
|
||||
- Vareoprettelse kræver fortsat rettigheden `economic.catalog.manage`; ordreeksport kræver `economic.documents.export`.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- Regressionstest dækker den præcise e-conomic-payload med pris, EAN, beskrivelse og varegruppe.
|
||||
- Python- og JavaScript-syntakskontrol samt diff-kontrol består.
|
||||
@ -22,34 +22,6 @@ cd /srv/podman/bmc_hub_v1.0
|
||||
./updateto.sh v1.3.16
|
||||
```
|
||||
|
||||
## Fast small update (kode-only, uden ny release tag)
|
||||
|
||||
Brug denne metode til meget små ændringer i `app/*` eller `main.py`, hvor du ikke vil lave en fuld release-pakke.
|
||||
|
||||
```bash
|
||||
ssh bmcadmin@172.16.31.183
|
||||
cd /srv/podman/bmc_hub_v1.0
|
||||
|
||||
# Download/refresh fast update script
|
||||
curl -O https://g.bmcnetworks.dk/ct/bmc_hub/raw/branch/main/update_fast.sh
|
||||
chmod +x update_fast.sh
|
||||
|
||||
# Tjek først hvad der ændres (anbefalet)
|
||||
./update_fast.sh --ref main --dry-run --allow-prod
|
||||
|
||||
# Kør fast update (eksempel: specifik commit)
|
||||
./update_fast.sh --ref 08f4097 --allow-prod
|
||||
```
|
||||
|
||||
Vigtigt:
|
||||
- `update_fast.sh` er kun til kode/templates/static ændringer i fast scope.
|
||||
- Hvis der er ændringer i migrationer, dependencies, docker/compose eller env: brug `./updateto.sh`.
|
||||
- Rollback kan køres med backup-id:
|
||||
|
||||
```bash
|
||||
./update_fast.sh --rollback 20260517-142155 --allow-prod
|
||||
```
|
||||
|
||||
## Manuel deployment (hvis scriptet ikke virker)
|
||||
|
||||
```bash
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user