diff --git a/src/pages/Supplies.tsx b/src/pages/Supplies.tsx index 287967b..4fff5d7 100644 --- a/src/pages/Supplies.tsx +++ b/src/pages/Supplies.tsx @@ -1949,6 +1949,141 @@ const PurchaseMaterialQueue = ({ needs }: { needs: SupplyPurchaseNeed[] }) => ( ); +const PurchaseServiceQueue = ({ needs }: { needs: SupplyPurchaseNeed[] }) => ( + <> +
+
+ Serviço e impacto + Volume a programar + Próximo passo +
+
+
+ {needs.map(need => { + const products = need.products || []; + const isCovered = need.purchaseKg <= 0; + + return ( +
+
+
+
+

{getNeedDisplayName(need)}

+ + {isCovered ? 'Sem programação' : 'Programar serviço'} + +
+

+ {need.colors.length ? need.colors.join(', ') : 'Todas as cores'} + + {need.suppliers.length ? need.suppliers.join(', ') : 'Fornecedor não informado'} +

+
+ +
+
+

Volume previsto

+

{formatNeedQuantity(need, need.plannedKg)}

+
+
+

A programar

+

{formatNeedQuantity(need, need.purchaseKg)}

+
+
+ +
+

Impacto

+

{products.length} {products.length === 1 ? 'SKU' : 'SKUs'} dependem

+

{formatNumber(sumNeedProducts(need, 'suggestedQuantity'))} un. planejadas

+
+
+ + {products.length > 0 && ( +
+ Produtos afetados + {products.slice(0, 3).map(product => ( + + #{product.productId} · {product.name} + + ))} + {products.length > 3 && +{products.length - 3} SKUs} +
+ )} +
+ ); + })} +
+ +); + +const PurchaseMappingQueue = ({ needs }: { needs: SupplyPurchaseNeed[] }) => ( + <> +
+
+ SKU sem composição confiável + Impacto antes de comprar + Correção +
+
+
+ {needs.map(need => { + const referenceProduct = need.products?.[0]; + const productName = referenceProduct?.name || getNeedDisplayName(need); + const productId = referenceProduct?.productId || ''; + const soldQuantity = referenceProduct?.quantitySold ?? sumNeedProducts(need, 'quantitySold'); + const stockQuantity = referenceProduct?.stockQuantity ?? sumNeedProducts(need, 'stockQuantity'); + + return ( +
+
+
+ {productId ? ( + {productName} + ) : ( +

{productName}

+ )} +
+ {productId ? `SKU ${productId}` : 'SKU não informado'} + {getNeedPendingLabel(need)} +
+
+ +
+
+

Vendido

+

{formatNumber(soldQuantity, 0)} un.

+
+
+

Estoque produto

+

{formatNumber(stockQuantity, 0)} un.

+
+
+

Necessidade estimada

+

{formatNeedQuantity(need, need.purchaseKg)}

+
+
+ +
+ {referenceProduct ? ( + + + Mapear consumo + + ) : ( + SKU necessário para corrigir + )} +
+
+
+ ); + })} +
+ +); + const PurchaseNeedsScreen = () => { const [summary, setSummary] = useState(emptySupplySummary); const [isLoading, setIsLoading] = useState(true); @@ -2147,147 +2282,9 @@ const PurchaseNeedsScreen = () => { {activeTab === 'materials' ? ( ) : activeTab === 'mapping' ? ( - - - - - - - - - - - - - - - - - - - - - {paginatedNeeds.map(need => { - const referenceProduct = need.products?.[0]; - const productName = referenceProduct?.name || getNeedDisplayName(need); - const productId = referenceProduct?.productId || ''; - const soldQuantity = referenceProduct?.quantitySold ?? sumNeedProducts(need, 'quantitySold'); - const stockQuantity = referenceProduct?.stockQuantity ?? sumNeedProducts(need, 'stockQuantity'); - - return ( - - - - - - - - - ); - })} - -
ProdutoVendidoEstoque produtoImpacto estimadoPendênciaAção
-
-

{productName}

-

- {productId ? `SKU ${productId}` : 'SKU não informado'} -

-
-
{formatNumber(soldQuantity, 0)} un.{formatNumber(stockQuantity, 0)} un.{formatNeedQuantity(need, need.purchaseKg)} - - {getNeedPendingLabel(need)} - - - {referenceProduct ? ( - - - - ) : ( - Sem SKU - )} -
+ ) : ( - - - - - - - - - - - - - - - - - - - - - - - {paginatedNeeds.map(need => { - const referenceProduct = need.products?.[0]; - return ( - - - - - - - - - - ); - })} - -
DemandaServiçoVolume previstoAgendadoEm abertoContratarSituação
- {need.products?.length ? ( -
-

{need.products.length} {need.products.length === 1 ? 'SKU impactado' : 'SKUs impactados'}

-

Demanda: {formatNumber(sumNeedProducts(need, 'suggestedQuantity'))} un.

-

- {need.products.slice(0, 3).map(product => #{product.productId})} - {need.products.length > 3 && +{need.products.length - 3}} -

-
- ) : Plano manual} -
-
-

{getNeedDisplayName(need)}

-
-

- {need.missingReference - ? 'Cadastre produto/material em Cadastros > Referência de Consumo' - : `${(need.colors.length ? need.colors.join(', ') : 'Todas as cores')} · ${(need.suppliers.length ? need.suppliers.join(', ') : 'Sem fornecedor')}`} -

- {need.missingReference && referenceProduct ? ( - - - - ) : null} -
-
-
{formatNeedQuantity(need, need.plannedKg)} 0 ? 'text-amber-300' : 'text-emerald-300'}`}>{formatNeedQuantity(need, need.purchaseKg)} - - Programar serviço - -
+ )}