Campo Ambiente ASX
Ticket: FORCEWEB-984 > Última atualização: 28 de setembro de 2024
Visão Geral
Funcionalidade que permite selecionar e enviar o campo de ambiente (AD_AMBIENTE) para cada produto em vendas ASX. O objetivo é garantir que o ambiente do produto seja informado corretamente, conforme regras de negócio, e sincronizado com o ERP Sankhya.
Essa Funcionalidade serve para o Force-Web, Sales-Web e Force-App, somente as pastas podem ter a nomenclatura diferente mas a ideia é a mesma!
Arquivos Modificados
| Arquivo | Localização | Responsabilidade |
|---|---|---|
products.sales.create.controller.ts | src/controllers/sale/create/ | Lógica principal para envio do campo ambiente |
ProductAmbienceTab/index.tsx | src/components/sale/ProductModal/ | Exibição e seleção do ambiente do produto |
Tabs/index.tsx | src/components/sale/ProductModal/ | Inclusão da aba de ambiente no modal do produto |
NewSaleHeader.tsx | src/components/sale/ | Exibição do ambiente selecionado no cabeçalho da venda |
activity.service.tsx | src/service/activity/ | Serviço para buscar opções de ambiente |
activity.slice.ts | src/store/ | Estado global e ações para ambientes |
sale-create.slice.ts | src/store/ | Atualização do campo ambiente no produto da venda |
sync.slice.ts | src/store/ | Sincronização dos dados de ambiente |
sale.type.ts | src/types/sale/ | Tipagem para campos de venda |
activity.type.ts | src/types/activity/ | Tipagem para campos de ambiente |
product.types.ts | src/types/product/ | Tipagem do produto incluindo campo ambiente |
permission.ts | src/utils/ | Controle de permissão para exibir campo ambiente |
Fluxo Operacional
- Sincronização: Ao iniciar uma nova venda, as opções de ambiente são carregadas via
activity.service.tsxe armazenadas no estado global (activity.slice.ts). - Exibição: No modal do produto, a aba "Ambiente" (
ProductAmbienceTab/index.tsx) exibe as opções disponíveis para seleção. - Seleção: O usuário seleciona o ambiente desejado, que é salvo no campo
AD_AMBIENTEdo produto via ação Redux (changeSelectedItensFieldsemsale-create.slice.ts). - Envio: Ao finalizar a venda, o campo ambiente é enviado junto com os dados do produto para o backend.
- Reset: Ao cancelar ou finalizar a venda, o campo ambiente é resetado no estado global.
Tipagem TypeScript
Interface do Produto
// src/types/product/product.types.ts
export interface Product {
// ...campos existentes...
AD_AMBIENTE?: string; // Código do ambiente selecionado
}
Interface de Ambiente
// src/types/activity/activity.type.ts
export type ItensFieldsAmbience = {
data: ItensFieldsData[];
qtdRegistros: number;
hasError: boolean;
};
export type ItensFieldsData = {
opcoes: ItensFieldsOptions[];
nome: string;
descricao: string;
};
export type ItensFieldsOptions = {
LABEL: string;
VALUE: string;
};
Controle de Permissões
A exibição do campo ambiente é condicionada à permissão ASX, verificada via função utilitária:
// src/utils/permission.ts
isASX = () => this?.baseUrl?.includes?.("asx");
Implementação Técnica
- Busca de opções: O serviço
activity.service.tsxconsulta as opções de ambiente disponíveis e atualiza o estado global. - Estado global: O slice
activity.slice.tsmantém as opções e o ambiente selecionado. - Exibição e seleção: O componente
ProductAmbienceTab/index.tsxrenderiza as opções e permite a seleção, disparando a ação para atualizar o produto. - Envio do campo: O controller
products.sales.create.controller.tsgarante que o campoAD_AMBIENTEseja enviado corretamente ao backend.
Exemplo Prático
Seleção de Ambiente
- Usuário abre o modal do produto.
- Aba "Ambiente" exibe opções como:
- Sala de Estar
- Quarto
- Escritório
- Usuário seleciona "Sala de Estar".
- O campo
AD_AMBIENTEdo produto é atualizado para o valor correspondente.
Observações
- O campo ambiente é obrigatório para produtos ASX.
- Caso não haja opções disponíveis, o campo não é exibido.
- A sincronização das opções depende da integração com o ERP Sankhya.