add visoes

This commit is contained in:
Luiz H. R. Silva 2024-07-05 09:52:27 -03:00
parent 8e34798496
commit 9300367948
11 changed files with 1079 additions and 1 deletions

View file

@ -18,6 +18,7 @@ import {
z_filtro,
zp_serie_registrar,
} from "./_serie_consultar"
import { extruturas_de_campos, visoes } from "./visoes"
export { tiposSeriesAgregacoes }
@ -34,4 +35,7 @@ export const pPilao = {
operadores_pilao,
operadores_permitidos_por_tipo,
z_filtro,
visoes,
...visoes,
extruturas_de_campos,
}

View file

@ -0,0 +1,111 @@
import { z } from "zod"
import { z_filtro } from "../_serie_consultar"
// usar describe para definir o tipo de campo para render do componente
const z_tipos_campos = z.enum([
"tabela",
"coluna",
"texto",
"lista_colunas",
"lista_filtros",
])
export const z_contagem_em_barra_vertical = z.object({
tabela: z.string(),
colanuEixoX: z.string(),
colunaAgrupamento: z.string().array(),
filtros: z_filtro.array(),
descricao_pelo_usuario: z.string(),
})
export const z_contagem_em_pizza = z.object({
tabela: z.string(),
colanuEixoX: z.string(),
filtros: z_filtro.array(),
descricao_pelo_usuario: z.string(),
})
export const visoes = {
z_contagem_em_barra_vertical,
z_contagem_em_pizza,
}
/** Cria a estrutura de campos para insersão de dados */
export const extruturas_de_campos: {
[z in keyof typeof visoes]: {
/** Nome da Visão */
visao: z
/** Retorna a tabela Referente ao Registro */
tabela: (_: z.infer<(typeof visoes)[z]>) => string
/** Descrição */
descricao: (_: z.infer<(typeof visoes)[z]>) => string
/** Lista os campos e suas configurações */
campos: {
[c in keyof z.infer<(typeof visoes)[z]>]: {
tipo_campo: z.infer<typeof z_tipos_campos>
}
}
}
} = {
z_contagem_em_barra_vertical: {
visao: "z_contagem_em_barra_vertical",
tabela: ({ tabela }) => tabela,
descricao: ({
tabela,
descricao_pelo_usuario,
colanuEixoX,
filtros,
colunaAgrupamento,
}) => {
if (String(descricao_pelo_usuario || "").trim())
return String(descricao_pelo_usuario || "").trim()
return `Contagem de ${tabela} por ${colanuEixoX}${
!filtros?.length
? ""
: `, quando ${filtros
.map(
({ coluna, operador, valor }) =>
`${coluna} ${operador} ${valor}`,
)
.join(", ")}`
}${
!colunaAgrupamento?.length
? ""
: `, agrupado por ${colunaAgrupamento.join(", ")}`
}.`
},
campos: {
colanuEixoX: { tipo_campo: "coluna" },
tabela: { tipo_campo: "tabela" },
colunaAgrupamento: { tipo_campo: "lista_colunas" },
filtros: { tipo_campo: "lista_filtros" },
descricao_pelo_usuario: { tipo_campo: "texto" },
},
},
z_contagem_em_pizza: {
visao: "z_contagem_em_pizza",
tabela: ({ tabela }) => tabela,
descricao: ({ tabela, descricao_pelo_usuario, colanuEixoX, filtros }) => {
if (String(descricao_pelo_usuario || "").trim())
return String(descricao_pelo_usuario || "").trim()
return `Contagem de ${tabela} por ${colanuEixoX}${
!filtros?.length
? ""
: `, quando ${filtros
.map(
({ coluna, operador, valor }) =>
`${coluna} ${operador} ${valor}`,
)
.join(", ")}`
}.`
},
campos: {
colanuEixoX: { tipo_campo: "coluna" },
tabela: { tipo_campo: "tabela" },
filtros: { tipo_campo: "lista_filtros" },
descricao_pelo_usuario: { tipo_campo: "texto" },
},
},
}