diff --git a/CHANGELOG.md b/CHANGELOG.md
index 34ec32d..297a5e9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,10 @@ Alle wichtigen Änderungen an diesem Projekt werden in dieser Datei dokumentiert
Das Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.0.0/),
und dieses Projekt adhäriert zu [Semantic Versioning](https://semver.org/lang/de/).
+## [1.2.2] - 2024-03-19
+### Geändert
+- Verbesserte Telefonnummern-Formatierung: Führende "0" wird immer hinzugefügt, wenn der Benutzer von einer erlaubten IP-Adresse zugreift
+
## [1.2.1] - 2024-03-18
### Geändert
- Verbesserte CSV-Import-Funktionalität mit pandas
diff --git a/templates/index.html b/templates/index.html
index 4d282fb..9382cb2 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -16,45 +16,52 @@
-
medisoftware Kundensuche
+
Kundensuche
-
-
-
- 🔍
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
-
+
@@ -63,21 +70,19 @@
-
-
-
+
- Link kopiert!
+ Link in die Zwischenablage kopiert!
@@ -87,15 +92,45 @@
function createPhoneLink(phone) {
if (!phone) return 'N/A';
- const cleaned = phone.replace(/[^\d+\s]/g, '');
+
const clientIP = '{{ request.headers.get("X-Forwarded-For", request.remote_addr) }}';
const allowedIPRanges = '{{ allowed_ip_ranges }}'.split(',');
-
+
// Überprüfen, ob die Client-IP in einem der erlaubten Bereiche liegt
- const isAllowed = allowedIPRanges.some(range => clientIP.startsWith(range.trim()));
-
- const telLink = cleaned.startsWith('+') ? cleaned : (isAllowed ? '0' + cleaned.replace(/\s/g, '') : cleaned.replace(/\s/g, ''));
- return `${phone}`;
+ const isAllowed = allowedIPRanges.some(range => isIPInSubnet(clientIP, range.trim()));
+
+ // Debug-Ausgabe für die IP-Bereiche
+ console.log('Client IP in createPhoneLink:', clientIP);
+ console.log('Allowed IP Ranges:', allowedIPRanges);
+ console.log('isAllowed in createPhoneLink:', isAllowed);
+ console.log('Original phone:', phone);
+
+ // Entferne alle nicht-numerischen Zeichen
+ let cleanNumber = phone.replace(/\D/g, '');
+ console.log('Cleaned number:', cleanNumber);
+
+ // Füge eine führende 0 hinzu, wenn isAllowed true ist
+ if (isAllowed) {
+ console.log('Adding leading 0 to:', cleanNumber);
+ cleanNumber = '0' + cleanNumber;
+ console.log('Number after adding 0:', cleanNumber);
+ }
+
+ // Formatiere die Nummer
+ let formattedNumber = cleanNumber;
+ if (cleanNumber.length === 11) {
+ formattedNumber = cleanNumber.replace(/(\d{4})(\d{7})/, '$1-$2');
+ } else if (cleanNumber.length === 10) {
+ formattedNumber = cleanNumber.replace(/(\d{3})(\d{7})/, '$1-$2');
+ }
+
+ console.log('Final formatted number:', formattedNumber);
+ console.log('Final clean number for tel link:', cleanNumber);
+
+ // Erstelle den Link
+ const link = `${formattedNumber}`;
+ console.log('Final link:', link);
+ return link;
}
function createEmailLink(email) {
@@ -103,48 +138,10 @@
return `${email}`;
}
- function highlightText(text, searchTerms) {
- // Konvertiere text zu String und prüfe auf null/undefined
- const textStr = String(text || '');
- if (!textStr || !searchTerms || searchTerms.length === 0) return textStr;
-
- // Escapen der Suchbegriffe für reguläre Ausdrücke
- const escapedTerms = searchTerms.map(term =>
- String(term || '').replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
- ).filter(term => term.length > 0);
-
- if (escapedTerms.length === 0) return textStr;
-
- // Erstelle einen temporären div-Element
- const tempDiv = document.createElement('div');
- tempDiv.innerHTML = textStr;
-
- // Funktion zum Hervorheben von Text
- function highlightNode(node) {
- if (node.nodeType === 3) { // Text node
- const text = node.textContent;
- let newText = text;
-
- escapedTerms.forEach(term => {
- const regex = new RegExp(`(${term})`, 'gi');
- newText = newText.replace(regex, '$1');
- });
-
- if (newText !== text) {
- const span = document.createElement('span');
- span.innerHTML = newText;
- node.parentNode.replaceChild(span, node);
- }
- } else if (node.nodeType === 1) { // Element node
- // Überspringe mark-Tags und Links
- if (node.tagName !== 'MARK' && node.tagName !== 'A') {
- Array.from(node.childNodes).forEach(highlightNode);
- }
- }
- }
-
- highlightNode(tempDiv);
- return tempDiv.innerHTML;
+ function highlightText(text, searchTerm) {
+ if (!searchTerm) return text;
+ const regex = new RegExp(`(${searchTerm})`, 'gi');
+ return text.replace(regex, '$1');
}
function createAddressLink(street, plz, city) {
@@ -236,154 +233,129 @@
function updateResultCounts() {
// Nur Gesamtzahl anzeigen
const generalCount = lastResults.length;
- document.getElementById('generalCount').textContent =
+ document.getElementById('resultCount').textContent =
generalCount > 0 ? `${generalCount} Treffer gefunden` : '';
- document.getElementById('generalCount').classList.toggle('visible', generalCount > 0);
+ document.getElementById('resultCount').classList.toggle('visible', generalCount > 0);
}
- function searchCustomers() {
- const query = document.getElementById('searchInput').value.trim();
- const fachrichtung = document.getElementById('fachrichtungInput').value.trim();
- const ort = document.getElementById('ortInput').value.trim();
- const name = document.getElementById('nameInput').value.trim();
- const telefon = document.getElementById('telefonInput').value.trim();
- const kundennummer = document.getElementById('kundennummerInput')?.value.trim() || '';
+ function displayResults(results) {
+ const resultsDiv = document.getElementById('results');
+ resultsDiv.innerHTML = '';
- // Sammle alle nicht-leeren Suchbegriffe
- const searchTerms = [query, fachrichtung, ort, name, telefon, kundennummer]
- .filter(term => term && term.length > 0);
-
- // Prüfe, ob alle Suchfelder leer sind
- if (searchTerms.length === 0) {
- const resultsDiv = document.getElementById('results');
- const generalCount = document.getElementById('generalCount');
- resultsDiv.innerHTML = '';
- generalCount.textContent = '';
- generalCount.classList.remove('visible');
+ if (results.length === 0) {
+ resultsDiv.innerHTML = '