fix(F6.1): load Area operator immediately for planned time
This commit is contained in:
@@ -49,6 +49,12 @@ function inspectorName(person: Inspector): string {
|
||||
return `${person.firstName} ${person.lastName}`.trim() || person.username;
|
||||
}
|
||||
|
||||
function currentLocalDateTime(): string {
|
||||
const now = new Date();
|
||||
const local = new Date(now.getTime() - now.getTimezoneOffset() * 60_000);
|
||||
return local.toISOString().slice(0, 16);
|
||||
}
|
||||
|
||||
export function InspectionVisitCreateF61Page() {
|
||||
const navigate = useNavigate();
|
||||
const [departments, setDepartments] = useState<Option[]>([]);
|
||||
@@ -61,8 +67,9 @@ export function InspectionVisitCreateF61Page() {
|
||||
const [yacimientoId, setYacimientoId] = useState('');
|
||||
const [operatorId, setOperatorId] = useState('');
|
||||
const [inspectorId, setInspectorId] = useState('');
|
||||
const [plannedStartAt, setPlannedStartAt] = useState('');
|
||||
const [plannedStartAt, setPlannedStartAt] = useState(currentLocalDateTime);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [loadingOperators, setLoadingOperators] = useState(false);
|
||||
const [busy, setBusy] = useState(false);
|
||||
const [error, setError] = useState('');
|
||||
|
||||
@@ -110,12 +117,14 @@ export function InspectionVisitCreateF61Page() {
|
||||
const parsedStart = new Date(plannedStartAt);
|
||||
if (Number.isNaN(parsedStart.getTime())) return;
|
||||
const at = encodeURIComponent(parsedStart.toISOString());
|
||||
setLoadingOperators(true);
|
||||
requestJson<{ data: Option[] }>(`/inspection-visits/planning-context/areas/${areaId}/operators?at=${at}`)
|
||||
.then((response) => {
|
||||
setOperators(response.data);
|
||||
if (response.data.length === 1 && response.data[0]) setOperatorId(response.data[0].id);
|
||||
})
|
||||
.catch((cause) => setError(cause instanceof Error ? cause.message : String(cause)));
|
||||
.catch((cause) => setError(cause instanceof Error ? cause.message : String(cause)))
|
||||
.finally(() => setLoadingOperators(false));
|
||||
}, [areaId, plannedStartAt]);
|
||||
|
||||
const submit = async (event: FormEvent) => {
|
||||
@@ -201,10 +210,11 @@ export function InspectionVisitCreateF61Page() {
|
||||
|
||||
<label className="field">
|
||||
<span>Operadora del Área</span>
|
||||
<SearchableSelect value={operatorId} onChange={(event) => setOperatorId(event.target.value)} searchPlaceholder="Buscar Operadora…" required disabled={!areaId || !plannedStartAt || operators.length === 0}>
|
||||
<option value="">{operators.length === 0 && areaId && plannedStartAt ? 'Sin Operadora vigente para esa fecha' : 'Seleccionar Operadora…'}</option>
|
||||
<SearchableSelect value={operatorId} onChange={(event) => setOperatorId(event.target.value)} searchPlaceholder="Buscar Operadora…" required disabled={!areaId || !plannedStartAt || loadingOperators || operators.length === 0}>
|
||||
<option value="">{loadingOperators ? 'Cargando Operadora…' : operators.length === 0 && areaId && plannedStartAt ? 'Sin Operadora vigente para esa fecha' : 'Seleccionar Operadora…'}</option>
|
||||
{operators.map((operator) => <option key={operator.id} value={operator.id}>{operator.name}</option>)}
|
||||
</SearchableSelect>
|
||||
<small className="muted">Se obtiene de la relación vigente del Área para la fecha y hora de inicio.</small>
|
||||
</label>
|
||||
|
||||
<label className="field">
|
||||
@@ -222,7 +232,7 @@ export function InspectionVisitCreateF61Page() {
|
||||
</div>
|
||||
|
||||
{areaId && yacimientos.length === 0 && <Alert>Esta Área no tiene Yacimientos cargados. No se puede planificar una Inspección hasta corregir su jerarquía.</Alert>}
|
||||
{areaId && plannedStartAt && operators.length === 0 && <Alert>Esta Área no tiene una Operadora vigente. Podés consultar el Inventario, pero no planificar una Inspección operativa hasta definir esa relación.</Alert>}
|
||||
{areaId && plannedStartAt && !loadingOperators && operators.length === 0 && <Alert>Esta Área no tiene una Operadora vigente para la fecha seleccionada. Podés consultar el Inventario, pero no planificar una Inspección operativa hasta definir esa relación.</Alert>}
|
||||
|
||||
<div className="form-actions">
|
||||
<Link className="button secondary" to="/inspecciones">Volver</Link>
|
||||
|
||||
Reference in New Issue
Block a user