Ergänze Auftragsbearbeitung, Disposition, Stammdaten, Kunden- und Transporteurportale, Lagerverwaltung, Abrechnung, Exporte und Statistik. Füge Kontoeinstellungen, Mitteilungen, Automatikdienste und Betriebsstatus sowie die zugehörigen Tests und PHP-Abgleichsdokumentation hinzu. Vergrößere die persönlichen Auftragslisten auf einheitliche Höhen und richte Statusanzeigen sowie die Ranking-Vorschau-Steuerelemente bündig aus. Validierung: 44 Frontendtests und Produktionsbuild erfolgreich. Backend funktional unverändert gegenüber dem vollständigen Lauf mit 1.624 erfolgreichen und drei übersprungenen Tests. Layout im Browser und lokale Bereitstellung geprüft.
17 lines
1.9 KiB
TypeScript
17 lines
1.9 KiB
TypeScript
import {useEffect,useState} from 'react';
|
|
import {request} from './api';
|
|
import {Modal} from './FormElements';
|
|
import {MasterDataEditor} from './BusinessForms';
|
|
import {Statistics} from './Statistics';
|
|
type Context={id:number;number:string;label:string;headquartersId:number;canOpenMaster:boolean;canStatistics:boolean;masterUnavailableReason:string};
|
|
export function AppointmentCustomerNavigation({customer,kind,onClose,onDirtyChange}:{customer:number;kind:'master'|'statistics';onClose:()=>void;onDirtyChange:(dirty:boolean)=>void}){
|
|
const [data,setData]=useState<Context|null>(null),[error,setError]=useState('');
|
|
useEffect(()=>{if(customer===0)return;let active=true;request<Context>(`/appointments/customers/${customer}/context`).then(d=>{if(active)setData(d);}).catch(e=>{if(active)setError(e.message);});return()=>{active=false;};},[customer]);
|
|
// The existing master editor owns save/uncertain-response and discard handling.
|
|
// Keep the outer calendar/workspace from unmounting an open editor silently.
|
|
const editing=kind==='master'&&(customer===0||!!data?.canOpenMaster);
|
|
useEffect(()=>{onDirtyChange(editing);return()=>onDirtyChange(false);},[editing,onDirtyChange]);
|
|
if(editing)return <MasterDataEditor kind="customers" id={customer} onClose={onClose} onSaved={()=>{}}/>;
|
|
return <Modal title={kind==='statistics'?'Kundenstatistik im Vertrieb':'Kundenstamm im Vertrieb'} wide onClose={onClose}><div className="admin-dialog-body">{error?<p role="alert" className="alert error">{error}</p>:!data?<p role="status">Kunde wird geladen …</p>:kind==='master'?<p>{data.masterUnavailableReason}</p>:!data.canStatistics?<p>Für diese Ansicht ist das Statistikrecht erforderlich.</p>:!data.number?<p>Beim Kunden fehlt die Kundennummer für die Statistik.</p>:<Statistics initialCustomer={{number:data.number,label:data.label,headquartersId:data.headquartersId,from:'2004-01-01'}}/>}</div></Modal>;
|
|
}
|