complete new audit system

This commit is contained in:
2026-03-21 18:23:54 +01:00
parent 4f359df161
commit 219e1930f7
159 changed files with 2841 additions and 736 deletions
+11 -10
View File
@@ -16,6 +16,7 @@ import FileUpload from '../../components/ui/FileUpload';
import { Edit, Trash2, Copy, Eye, EyeOff, ArrowLeft, ArrowRight, Download, ExternalLink, Plus, ChevronDown, ChevronUp, Gauge, CheckCircle, Circle, ClipboardList, MessageSquare, Calculator, Info, X, BellOff, Lock, Shield } from 'lucide-react';
import { calculateConsumption, calculateCosts, calculateMultiMeterConsumption } from '../../utils/energyCalculations';
import CopyButton, { CopyableBlock } from '../../components/ui/CopyButton';
import { formatDate } from '../../utils/dateFormat';
import type { ContractType, ContractStatus, SimCard, MeterReading, ContractTask, ContractTaskSubtask, ContractMeter } from '../../types';
const typeLabels: Record<ContractType, string> = {
@@ -273,8 +274,8 @@ function MeterReadingsSection({
className="flex justify-between items-center text-sm group py-1 border-b border-gray-200 last:border-0"
>
<span className="text-gray-500 flex items-center gap-1">
{new Date(reading.readingDate).toLocaleDateString('de-DE')}
<CopyButton value={new Date(reading.readingDate).toLocaleDateString('de-DE')} />
{formatDate(reading.readingDate)}
<CopyButton value={formatDate(reading.readingDate)} />
</span>
<div className="flex items-center gap-2">
<span className="font-mono flex items-center gap-1">
@@ -315,7 +316,7 @@ function MeterReadingsSection({
{!isExpanded && readings.length > 0 && (
<p className="text-sm text-gray-500">
Letzter Stand: {sortedReadings[0].value.toLocaleString('de-DE')} {sortedReadings[0].unit} ({new Date(sortedReadings[0].readingDate).toLocaleDateString('de-DE')})
Letzter Stand: {sortedReadings[0].value.toLocaleString('de-DE')} {sortedReadings[0].unit} ({formatDate(sortedReadings[0].readingDate)})
</p>
)}
@@ -1033,8 +1034,8 @@ function ContractTaskItem({
<p className="text-xs text-gray-400">
{subtask.createdBy && `${subtask.createdBy}`}
{isSubtaskCompleted
? `Erledigt am ${subtask.completedAt ? new Date(subtask.completedAt).toLocaleDateString('de-DE') : new Date(subtask.updatedAt).toLocaleDateString('de-DE')}`
: new Date(subtask.createdAt).toLocaleDateString('de-DE')}
? `Erledigt am ${subtask.completedAt ? formatDate(subtask.completedAt) : formatDate(subtask.updatedAt)}`
: formatDate(subtask.createdAt)}
</p>
</div>
</div>
@@ -1077,8 +1078,8 @@ function ContractTaskItem({
<p className="text-xs text-gray-400 mt-1">
{task.createdBy && `${task.createdBy}`}
{isCompleted
? `Erledigt am ${task.completedAt ? new Date(task.completedAt).toLocaleDateString('de-DE') : '-'}`
: new Date(task.createdAt).toLocaleDateString('de-DE')}
? `Erledigt am ${task.completedAt ? formatDate(task.completedAt) : '-'}`
: formatDate(task.createdAt)}
</p>
{/* Subtasks */}
@@ -1713,7 +1714,7 @@ export default function ContractDetail() {
{c.nextReviewDate && new Date(c.nextReviewDate) > new Date() && (
<div className="flex items-center gap-1 px-2 py-1 bg-amber-100 text-amber-800 rounded-full text-xs">
<BellOff className="w-3 h-3" />
<span>Zurückgestellt bis {new Date(c.nextReviewDate).toLocaleDateString('de-DE')}</span>
<span>Zurückgestellt bis {formatDate(c.nextReviewDate)}</span>
{hasPermission('contracts:update') && (
<button
onClick={() => setShowUnsnoozeConfirm(true)}
@@ -2616,7 +2617,7 @@ export default function ContractDetail() {
{c.internetDetails.installationDate && (
<div>
<dt className="text-sm text-gray-500">Installation</dt>
<dd>{new Date(c.internetDetails.installationDate).toLocaleDateString('de-DE')}</dd>
<dd>{formatDate(c.internetDetails.installationDate)}</dd>
</div>
)}
{c.internetDetails.homeId && (
@@ -2891,7 +2892,7 @@ export default function ContractDetail() {
<div>
<dt className="text-sm text-gray-500">Erstzulassung</dt>
<dd>
{new Date(c.carInsuranceDetails.firstRegistration).toLocaleDateString('de-DE')}
{formatDate(c.carInsuranceDetails.firstRegistration)}
</dd>
</div>
)}