diff --git a/src/pages/Cutting.tsx b/src/pages/Cutting.tsx index aa74aab..3763cf7 100644 --- a/src/pages/Cutting.tsx +++ b/src/pages/Cutting.tsx @@ -168,6 +168,7 @@ const Cutting = () => { const [selectedPreviewRowIds, setSelectedPreviewRowIds] = useState([]); const [lotSelections, setLotSelections] = useState>({}); const [productionPlanForm, setProductionPlanForm] = useState({ name: '', contractor: '', expectedDate: '', notes: '' }); + const [isPlanDetailsOpen, setIsPlanDetailsOpen] = useState(false); const [editingCutRow, setEditingCutRow] = useState(null); const [quickCutEdit, setQuickCutEdit] = useState({}); const [isQuickCutEditSaving, setIsQuickCutEditSaving] = useState(false); @@ -668,6 +669,7 @@ const Cutting = () => { setSelectedPreviewRowIds(rowsAvailableForOrder.map(row => row.id)); setLotSelections({}); setProductionPlanForm({ name: cutPlanReference, contractor: '', expectedDate: '', notes: '' }); + setIsPlanDetailsOpen(false); setIsOrderPreviewOpen(true); }; @@ -900,34 +902,30 @@ const Cutting = () => { -
- {[ - ['Selecionadas', `${formatNumber(selectedPreviewRows.length)} de ${formatNumber(rowsAvailableForOrder.length)}`, 'text-dark-text'], - ['Unidades selecionadas', `${formatNumber(orderPreviewTotalUnits)} un.`, 'text-brand-primary'], - ['Cobertura alvo', `${formatNumber(targetCoverageDays)} dias`, 'text-dark-text'], - ['Revisar dados', formatNumber(previewRowsWithIssues), previewRowsWithIssues ? 'text-amber-300' : 'text-emerald-300'] - ].map(([label, value, tone]) =>

{label}

{value}

)} +
+
+ {formatNumber(selectedPreviewRows.length)} selecionada{selectedPreviewRows.length === 1 ? '' : 's'} + · + {formatNumber(orderPreviewTotalUnits)} un. + {previewRowsWithIssues > 0 && <>·{formatNumber(previewRowsWithIssues)} para revisar} +
+ Cobertura de {formatNumber(targetCoverageDays)} dias
-
-
-

Plano de produção

-

Estas OPs serão gravadas dentro de um único plano PCP. O plano pode avançar todas as OPs ativas juntas.

-
-
- - - - +
+
+ +
+ {isPlanDetailsOpen &&
+ + + +
}
@@ -985,7 +983,7 @@ const Cutting = () => {
-
+ {selectedMaterialRequirements.length > 0 &&

Reservar lotes para este corte

@@ -994,7 +992,7 @@ const Cutting = () => { {formatNumber(selectedLotReservations.length)} lote(s) reservado(s)
{selectedMaterialRequirements.length ?
{selectedMaterialRequirements.map(requirement => { const selection = lotSelections[requirement.key] || { lotId: '', quantity: '' }; const lots = supplyLots.filter(lot => { const lotKey = normalizeMaterialKey(lot.product); const materialMatch = lotKey === requirement.key || lotKey === normalizeMaterialKey(requirement.label); return lot.availableQuantity > 0 && materialMatch && lot.unit.toLowerCase() === requirement.unit.toLowerCase(); }); return ; })}
Material necessárioNecessárioLote reservadoQuantidade reservada

{requirement.label}

{requirement.key}

{formatNumber(requirement.quantity, 4)} {requirement.unit} setLotSelections(current => ({ ...current, [requirement.key]: { lotId: current[requirement.key]?.lotId || '', quantity: event.target.value } }))} disabled={!selection.lotId} className="h-9 w-32 rounded-lg border border-dark-border bg-dark-input px-2 text-right text-xs font-semibold text-dark-text outline-none placeholder:text-dark-muted focus:border-brand-primary disabled:cursor-not-allowed disabled:opacity-50" placeholder={formatNumber(requirement.quantity, 4)} />
:

Os SKUs selecionados não possuem componentes de material sincronizados. Eles podem seguir para OP, mas não geram reserva.

} -
+
}