Cotação
7 funções do TermoPortal para cotação.
// npm install termo_core --save-exact
import * as portal from "termo_core/portal";
// ou: import { portal } from "termo_core";| Função | Rota | O que faz |
|---|---|---|
buscar_paginador_cotacao | GET /cotacao | Lista as cotações paginadas |
criar_cotacao | POST /cotacao | Cria uma cotação (carrinho enviado) |
buscar_auto_complete_cotacao | GET /cotacao/autocomplete | Lista básica de cotações para seleção |
buscar_pelo_filtro_cotacao | GET /cotacao/filtro | Busca cotações por filtro |
buscar_pelo_id_cotacao | GET /cotacao/{id} | Busca uma cotação pelo id |
atualizar_pelo_id_cotacao | PATCH /cotacao/{id} | Muda o status de uma cotação |
deletar_pelo_id_cotacao | DELETE /cotacao/{id} | Exclui uma cotação |
buscar_paginador_cotacao
GET/cotacao Exige credencial
Lista as cotações paginadas
Exige a permissão ver no módulo Cotacoes do perfil de quem chama (administrador e master têm tudo). Das mais novas para as mais antigas; status opcional. Quem não é colaborador interno precisa informar unidade_id de uma unidade da própria sessão; colaborador interno pode omitir e vê todas. Paginado com 50 itens por página (fixo); pagina começa em 1 (padrão 1). A resposta traz itens, total (registros que casam), pagina e tamanho.
function buscar_paginador_cotacao(
credencial_de_acesso: CredencialDeAcesso,
parametros: ParametrosDeBuscarPaginadorCotacao = {},
opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.PaginaCotacao>import { CredencialDeAcesso } from "termo_core";
import { buscar_paginador_cotacao } from "termo_core/portal";
const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_paginador_cotacao(credencial_de_acesso, { unidade_id: "..." });Argumentos
Nome
Tipo
Retorno: Promise<tipos.PaginaCotacao> · Rust: Result<tipos::PaginaCotacao, ErroAoChamarServico> · veja PaginaCotacao.
criar_cotacao
POST/cotacao Exige credencial
Cria uma cotação (carrinho enviado)
Exige a permissão criar no módulo Cotacoes do perfil de quem chama (administrador e master têm tudo). Monta a cotação no servidor a partir dos itens (produto_id, quantidade acima de zero e até 9999, embalagem_fechada, preco_unitario visto pelo cliente), com 1 a 200 itens e sem produto repetido. Recalcula preços por faixa, confere total_esperado e grava com o status inicial. A unidade precisa ser da sessão (colaborador interno acessa todas) e, para quem não é colaborador interno, o autor é sempre quem chama. acima_do_limite indica que a cotação passa o limite de faturamento da unidade. Campos: unidade_id (uuid) é a unidade compradora, da sessão; autor_cliente_id é a pessoa autora (uuid; para quem não é colaborador interno vale sempre a própria pessoa); itens é a lista de 1 a 200 itens, cada um com produto_id, quantidade, embalagem_fechada e preco_unitario; economia_tier é a economia do grupo de cliente vista no carrinho (decimal, informativo).
function criar_cotacao(
credencial_de_acesso: CredencialDeAcesso,
corpo_da_requisicao: tipos.CotacaoCriar,
opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.Cotacao>import { CredencialDeAcesso } from "termo_core";
import { criar_cotacao } from "termo_core/portal";
const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await criar_cotacao(credencial_de_acesso, corpo_da_requisicao);Argumentos
Nome
Tipo
Retorno: Promise<tipos.Cotacao> · Rust: Result<tipos::Cotacao, ErroAoChamarServico> · veja Cotacao.
buscar_auto_complete_cotacao
GET/cotacao/autocomplete Exige credencial
Lista básica de cotações para seleção
Exige a permissão ver no módulo Cotacoes do perfil de quem chama (administrador e master têm tudo). Devolve id e rotulo (unidade, autor e data), em ordem da razão social. busca procura na razão social e no autor. Quem não é colaborador interno precisa informar unidade_id de uma unidade da própria sessão; colaborador interno pode omitir e vê todas. tamanho tem padrão 10 e vai de 1 a 50; pagina começa em 1. A resposta traz itens, total, pagina e tamanho.
function buscar_auto_complete_cotacao(
credencial_de_acesso: CredencialDeAcesso,
parametros: ParametrosDeBuscarAutoCompleteCotacao = {},
opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.PaginaCotacaoAutoComplete>import { CredencialDeAcesso } from "termo_core";
import { buscar_auto_complete_cotacao } from "termo_core/portal";
const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_auto_complete_cotacao(credencial_de_acesso, { busca: "..." });Argumentos
Nome
Tipo
Retorno: Promise<tipos.PaginaCotacaoAutoComplete> · Rust: Result<tipos::PaginaCotacaoAutoComplete, ErroAoChamarServico> · veja PaginaCotacaoAutoComplete.
buscar_pelo_filtro_cotacao
GET/cotacao/filtro Exige credencial
Busca cotações por filtro
Exige a permissão ver no módulo Cotacoes do perfil de quem chama (administrador e master têm tudo). Devolve as cotações não excluídas que casam com o filtro, até 50 por página (pagina, a partir de 1, padrão 1), das mais novas para as mais antigas. Quem não é colaborador interno precisa informar unidade_id de uma unidade da própria sessão; colaborador interno pode omitir e vê todas. autor_cliente_id e status (rascunho, esperando_aprovacao, concluido, nao_aprovado, em_transporte) são exatos.
function buscar_pelo_filtro_cotacao(
credencial_de_acesso: CredencialDeAcesso,
parametros: ParametrosDeBuscarPeloFiltroCotacao = {},
opcoes_da_chamada?: OpcoesDaChamada,
): Promise<Array<tipos.Cotacao>>import { CredencialDeAcesso } from "termo_core";
import { buscar_pelo_filtro_cotacao } from "termo_core/portal";
const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_pelo_filtro_cotacao(credencial_de_acesso, { unidade_id: "..." });Argumentos
Nome
Tipo
Retorno: Promise<Array<tipos.Cotacao>> · Rust: Result<Vec<tipos::Cotacao>, ErroAoChamarServico>
buscar_pelo_id_cotacao
GET/cotacao/{id} Exige credencial
Busca uma cotação pelo id
Exige a permissão ver no módulo Cotacoes do perfil de quem chama (administrador e master têm tudo). Cotação excluída, ou de unidade fora da sessão, responde 404. Traz itens e totais.
function buscar_pelo_id_cotacao(
credencial_de_acesso: CredencialDeAcesso,
id: string,
opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.Cotacao>import { CredencialDeAcesso } from "termo_core";
import { buscar_pelo_id_cotacao } from "termo_core/portal";
const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_pelo_id_cotacao(credencial_de_acesso, id);Argumentos
Nome
Tipo
Retorno: Promise<tipos.Cotacao> · Rust: Result<tipos::Cotacao, ErroAoChamarServico> · veja Cotacao.
atualizar_pelo_id_cotacao
PATCH/cotacao/{id} Exige credencial
Muda o status de uma cotação
Exige a permissão editar no módulo Cotacoes do perfil de quem chama (administrador e master têm tudo). Muda status (rascunho, esperando_aprovacao, concluido, nao_aprovado, em_transporte). Só colaborador interno marca concluido ou em_transporte; aprovar cotação acima do limite de faturamento exige confirmar_acima_do_limite: true. Cotação de unidade fora da sessão responde 404. Atualização parcial: campo ausente mantém o valor atual. Campos: confirmar_acima_do_limite (booleano) confirma o aviso de limite de faturamento ao aprovar.
function atualizar_pelo_id_cotacao(
credencial_de_acesso: CredencialDeAcesso,
id: string,
corpo_da_requisicao: tipos.CotacaoAtualizar,
opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.Cotacao>import { CredencialDeAcesso } from "termo_core";
import { atualizar_pelo_id_cotacao } from "termo_core/portal";
const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await atualizar_pelo_id_cotacao(credencial_de_acesso, id, corpo_da_requisicao);Argumentos
Nome
Tipo
Retorno: Promise<tipos.Cotacao> · Rust: Result<tipos::Cotacao, ErroAoChamarServico> · veja Cotacao.
deletar_pelo_id_cotacao
DELETE/cotacao/{id} Exige credencial
Exclui uma cotação
Exige a permissão excluir no módulo Cotacoes do perfil de quem chama (administrador e master têm tudo). Cotação de unidade fora da sessão responde 404. A exclusão é lógica: o registro some das leituras, mas a linha não é apagada.
function deletar_pelo_id_cotacao(
credencial_de_acesso: CredencialDeAcesso,
id: string,
opcoes_da_chamada?: OpcoesDaChamada,
): Promise<void>import { CredencialDeAcesso } from "termo_core";
import { deletar_pelo_id_cotacao } from "termo_core/portal";
const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
await deletar_pelo_id_cotacao(credencial_de_acesso, id);Argumentos
Nome
Tipo
Retorno: Promise<void> · Rust: Result<(), ErroAoChamarServico> · sem corpo na resposta.
Tipos
Tipos usados pelas funções desta página. O nome é o mesmo nos dois pacotes.
Cotacao
import type { Cotacao } from "termo_core/portal";
export interface Cotacao {
acima_do_limite: boolean;
atualizado_em: string;
autor_cliente_id: string;
autor_nome: string;
criado_em: string;
desconto: number;
economia_tier?: number | null;
id: string;
itens: Array<CotacaoItem>;
quantidade_itens: number;
status: string;
subtotal: number;
total: number;
total_skus: number;
unidade_id: string;
unidade_razao_social: string;
valor_frete: number;
}CotacaoAtualizar
import type { CotacaoAtualizar } from "termo_core/portal";
export interface CotacaoAtualizar {
confirmar_acima_do_limite?: boolean | null;
status?: string | null;
}CotacaoCriar
import type { CotacaoCriar } from "termo_core/portal";
export interface CotacaoCriar {
autor_cliente_id: string;
economia_tier?: number | null;
itens: Array<CotacaoItemCriar>;
total_esperado?: number | null;
unidade_id: string;
}CotacaoItem
import type { CotacaoItem } from "termo_core/portal";
export interface CotacaoItem {
embalagem_fechada: boolean;
imagem_url?: string | null;
incremento_minimo: number;
nome: string;
preco_unitario: number;
produto_id: string;
quantidade: number;
quantidade_minima: number;
sku: string;
unidade: string;
unidade_medida: string;
}CotacaoItemCriar
import type { CotacaoItemCriar } from "termo_core/portal";
export interface CotacaoItemCriar {
embalagem_fechada?: boolean | null;
preco_unitario?: number | null;
produto_id: string;
quantidade: number;
}PaginaCotacao
import type { PaginaCotacao } from "termo_core/portal";
export interface PaginaCotacao {
itens: Array<PaginaCotacaoItensItem>;
pagina: number;
tamanho: number;
total: number;
}PaginaCotacaoAutoComplete
import type { PaginaCotacaoAutoComplete } from "termo_core/portal";
export interface PaginaCotacaoAutoComplete {
itens: Array<PaginaCotacaoAutoCompleteItensItem>;
pagina: number;
tamanho: number;
total: number;
}PaginaCotacaoAutoCompleteItensItem
import type { PaginaCotacaoAutoCompleteItensItem } from "termo_core/portal";
export interface PaginaCotacaoAutoCompleteItensItem {
id: string;
rotulo: string;
}PaginaCotacaoItensItem
import type { PaginaCotacaoItensItem } from "termo_core/portal";
export interface PaginaCotacaoItensItem {
acima_do_limite: boolean;
atualizado_em: string;
autor_cliente_id: string;
autor_nome: string;
criado_em: string;
desconto: number;
economia_tier?: number | null;
id: string;
itens: Array<CotacaoItem>;
quantidade_itens: number;
status: string;
subtotal: number;
total: number;
total_skus: number;
unidade_id: string;
unidade_razao_social: string;
valor_frete: number;
}