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 <noreply@anthropic.com>
This commit is contained in:
@@ -41,12 +41,10 @@ import type {
|
|||||||
FormaPagamento,
|
FormaPagamento,
|
||||||
Pauta,
|
Pauta,
|
||||||
ProdutoSummary,
|
ProdutoSummary,
|
||||||
RegraVigente,
|
|
||||||
TopProduto,
|
TopProduto,
|
||||||
} from '@sar/api-interface';
|
} from '@sar/api-interface';
|
||||||
import { useClientList, useClientDetail, useClientTopProdutos } from '../../lib/queries/clients';
|
import { useClientList, useClientDetail, useClientTopProdutos } from '../../lib/queries/clients';
|
||||||
import { useCatalog, useFormasPagamento, usePautas } from '../../lib/queries/catalog';
|
import { useCatalog, useFormasPagamento, usePautas } from '../../lib/queries/catalog';
|
||||||
import { useRegrasVigentes } from '../../lib/queries/politicas';
|
|
||||||
import { useCondicoesComerciais } from '../../lib/condicoes-comerciais';
|
import { useCondicoesComerciais } from '../../lib/condicoes-comerciais';
|
||||||
import { CondicaoTag } from '../../components/CondicaoTag';
|
import { CondicaoTag } from '../../components/CondicaoTag';
|
||||||
import { apiFetch } from '../../lib/api-client';
|
import { apiFetch } from '../../lib/api-client';
|
||||||
@@ -1325,24 +1323,10 @@ export function NewOrderPage() {
|
|||||||
setClientSearch('');
|
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 ──
|
// ── 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 addToCart = (p: ProdutoSummary, qty?: number) => {
|
||||||
const lote = p.loteMulVenda ?? 1;
|
const lote = p.loteMulVenda ?? 1;
|
||||||
const finalQty = qty ?? lote;
|
const finalQty = qty ?? lote;
|
||||||
@@ -1363,7 +1347,7 @@ export function NewOrderPage() {
|
|||||||
unidade: p.unidade ?? '',
|
unidade: p.unidade ?? '',
|
||||||
qtd: finalQty,
|
qtd: finalQty,
|
||||||
precoUnitario: Number(p.vlPreco1),
|
precoUnitario: Number(p.vlPreco1),
|
||||||
descontoPerc: regraDescontoPct(p.codGrupo, p.codSubgrupo),
|
descontoPerc: 0,
|
||||||
loteMulVenda: p.loteMulVenda,
|
loteMulVenda: p.loteMulVenda,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
@@ -1386,8 +1370,7 @@ export function NewOrderPage() {
|
|||||||
unidade: p.unidade ?? '',
|
unidade: p.unidade ?? '',
|
||||||
qtd: qty,
|
qtd: qty,
|
||||||
precoUnitario: p.ultimoPreco,
|
precoUnitario: p.ultimoPreco,
|
||||||
// TopProduto não traz grupo/subgrupo — aplica só regra sem restrição
|
descontoPerc: 0,
|
||||||
descontoPerc: regraDescontoPct(null, null),
|
|
||||||
loteMulVenda: null,
|
loteMulVenda: null,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user