Erweitere VoTiAn NG um Fachfunktionen und verbessere die Listenoberfläche
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.
This commit is contained in:
1 parent
363bc27c26
commit
781a2b82dc
1165 files changed
+74986
-1028
No files matched your search
@@ -0,0 +1,16 @@
|
||||
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>;
|
||||
}
|
||||
Reference in new issue
Block a user