From 36430fde633bec7846b24b607c1e600be0e878ac Mon Sep 17 00:00:00 2001 From: julian Date: Wed, 22 Jul 2026 18:00:06 +0000 Subject: [PATCH] feat(web): desconto de regra nao vem mais pre-preenchido no carrinho Item entra com 0% mesmo com promocao/regra vigente: o selo de condicao comercial avisa o rep, que concede o desconto apenas se o cliente negociar. A alcada no backend segue aceitando ate o % da regra. Co-Authored-By: Claude Fable 5 --- apps/web/src/cockpits/rep/NewOrderPage.tsx | 27 ++++------------------ 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/apps/web/src/cockpits/rep/NewOrderPage.tsx b/apps/web/src/cockpits/rep/NewOrderPage.tsx index cb1cf1c..6e58bb3 100644 --- a/apps/web/src/cockpits/rep/NewOrderPage.tsx +++ b/apps/web/src/cockpits/rep/NewOrderPage.tsx @@ -41,12 +41,10 @@ import type { FormaPagamento, Pauta, ProdutoSummary, - RegraVigente, TopProduto, } from '@sar/api-interface'; import { useClientList, useClientDetail, useClientTopProdutos } from '../../lib/queries/clients'; import { useCatalog, useFormasPagamento, usePautas } from '../../lib/queries/catalog'; -import { useRegrasVigentes } from '../../lib/queries/politicas'; import { useCondicoesComerciais } from '../../lib/condicoes-comerciais'; import { CondicaoTag } from '../../components/CondicaoTag'; import { apiFetch } from '../../lib/api-client'; @@ -1325,24 +1323,10 @@ export function NewOrderPage() { setClientSearch(''); } - // ── Regras de desconto vigentes (criadas pelo gerente para este rep) ── - const { data: regrasData } = useRegrasVigentes(); - - // Maior desconto liberado por regra vigente que casa com o grupo/subgrupo do - // produto. Regra sem grupo/subgrupo vale para qualquer produto. Pré-aplicado - // ao adicionar o item; o rep pode ajustar dentro da alçada. - const regraDescontoPct = (codGrupo: number | null, codSubgrupo: number | null): number => { - const regras: RegraVigente[] = regrasData?.regras ?? []; - return regras - .filter( - (r) => - (r.codGrupo == null || (codGrupo != null && r.codGrupo === codGrupo)) && - (r.codSubgrupo == null || (codSubgrupo != null && r.codSubgrupo === codSubgrupo)), - ) - .reduce((max, r) => Math.max(max, r.descPct), 0); - }; - // ── Handlers do carrinho ── + // Item entra SEM desconto mesmo quando há promoção/regra vigente (selo + // "Condição comercial" avisa o rep): a proposta é carta de negociação — o rep + // concede só se o cliente pedir, e a alçada no backend aceita até o % da regra. const addToCart = (p: ProdutoSummary, qty?: number) => { const lote = p.loteMulVenda ?? 1; const finalQty = qty ?? lote; @@ -1363,7 +1347,7 @@ export function NewOrderPage() { unidade: p.unidade ?? '', qtd: finalQty, precoUnitario: Number(p.vlPreco1), - descontoPerc: regraDescontoPct(p.codGrupo, p.codSubgrupo), + descontoPerc: 0, loteMulVenda: p.loteMulVenda, }, ]; @@ -1386,8 +1370,7 @@ export function NewOrderPage() { unidade: p.unidade ?? '', qtd: qty, precoUnitario: p.ultimoPreco, - // TopProduto não traz grupo/subgrupo — aplica só regra sem restrição - descontoPerc: regraDescontoPct(null, null), + descontoPerc: 0, loteMulVenda: null, }, ];