@oondemand/create-central-oon 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +91 -0
- package/README.md +70 -0
- package/bin/cli.js +58 -0
- package/package.json +32 -0
- package/src/index.js +117 -0
- package/src/render.js +74 -0
- package/templates/_base/README.md +27 -0
- package/templates/_base/backend/central.config.js +33 -0
- package/templates/_base/backend/central.manifest.json +10 -0
- package/templates/_base/backend/env.example +12 -0
- package/templates/_base/backend/package.json +17 -0
- package/templates/_base/backend/src/collections/gitkeep +0 -0
- package/templates/_base/backend/src/controllers/gitkeep +0 -0
- package/templates/_base/backend/src/documents/gitkeep +0 -0
- package/templates/_base/backend/src/hooks/gitkeep +0 -0
- package/templates/_base/backend/src/integrations/gitkeep +0 -0
- package/templates/_base/backend/src/mappings/gitkeep +0 -0
- package/templates/_base/backend/src/models/gitkeep +0 -0
- package/templates/_base/backend/src/pipelines/gitkeep +0 -0
- package/templates/_base/backend/src/routes/gitkeep +0 -0
- package/templates/_base/backend/src/services/gitkeep +0 -0
- package/templates/_base/backend/src/triggers/gitkeep +0 -0
- package/templates/_base/backend/src/validations/gitkeep +0 -0
- package/templates/_base/frontend/central.ui.json +9 -0
- package/templates/_base/frontend/env.example +5 -0
- package/templates/_base/frontend/index.html +12 -0
- package/templates/_base/frontend/package.json +27 -0
- package/templates/_base/frontend/src/collections/gitkeep +0 -0
- package/templates/_base/frontend/src/dashboards/gitkeep +0 -0
- package/templates/_base/frontend/src/documents/gitkeep +0 -0
- package/templates/_base/frontend/src/main.tsx +12 -0
- package/templates/_base/frontend/src/overrides/gitkeep +0 -0
- package/templates/_base/frontend/src/pipelines/gitkeep +0 -0
- package/templates/_base/frontend/tsconfig.json +17 -0
- package/templates/_base/frontend/vite.config.ts +7 -0
- package/templates/_base/gitignore +6 -0
- package/templates/basic/backend/src/models/Pessoa.js +19 -0
- package/templates/basic/frontend/central.ui.json +9 -0
- package/templates/documentos-fiscais/backend/central.config.js +30 -0
- package/templates/documentos-fiscais/backend/src/models/DocumentoFiscal.js +23 -0
- package/templates/documentos-fiscais/frontend/central.ui.json +17 -0
- package/templates/multi-moedas/backend/central.config.js +30 -0
- package/templates/multi-moedas/backend/src/models/Cotacao.js +23 -0
- package/templates/multi-moedas/backend/src/models/Moeda.js +15 -0
- package/templates/multi-moedas/frontend/central.ui.json +12 -0
- package/templates/omie-sidecar/backend/central.config.js +31 -0
- package/templates/omie-sidecar/backend/src/mappings/pessoa-cliente.js +20 -0
- package/templates/omie-sidecar/backend/src/models/Pessoa.js +24 -0
- package/templates/omie-sidecar/backend/src/triggers/Pessoa.js +14 -0
- package/templates/omie-sidecar/frontend/central.ui.json +9 -0
- package/templates/pedidos-marketplace/backend/central.config.js +30 -0
- package/templates/pedidos-marketplace/backend/src/models/Pedido.js +22 -0
- package/templates/pedidos-marketplace/backend/src/models/Produto.js +16 -0
- package/templates/pedidos-marketplace/frontend/central.ui.json +11 -0
- package/templates/servicos-prestados/backend/central.config.js +30 -0
- package/templates/servicos-prestados/backend/src/models/Cliente.js +15 -0
- package/templates/servicos-prestados/backend/src/models/ServicoPrestado.js +22 -0
- package/templates/servicos-prestados/frontend/central.ui.json +11 -0
- package/templates/servicos-tomados/backend/central.config.js +30 -0
- package/templates/servicos-tomados/backend/src/models/Pessoa.js +15 -0
- package/templates/servicos-tomados/backend/src/models/Servico.js +22 -0
- package/templates/servicos-tomados/frontend/central.ui.json +11 -0
|
File without changes
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2020",
|
|
4
|
+
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
|
5
|
+
"module": "ESNext",
|
|
6
|
+
"moduleResolution": "bundler",
|
|
7
|
+
"jsx": "react-jsx",
|
|
8
|
+
"strict": true,
|
|
9
|
+
"skipLibCheck": true,
|
|
10
|
+
"noEmit": true,
|
|
11
|
+
"allowImportingTsExtensions": true,
|
|
12
|
+
"resolveJsonModule": true,
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"types": ["vite/client"]
|
|
15
|
+
},
|
|
16
|
+
"include": ["src", "central.ui.json", "vite.config.ts"]
|
|
17
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const { defineModel, fields } = require("@oondemand/oon-core-back");
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Pessoa — domínio puro: só schema + CRUD. Auth, RBAC, paginação, auditoria e
|
|
5
|
+
* metadata vêm do Core. A tela é renderizada pelo front a partir da metadata.
|
|
6
|
+
*/
|
|
7
|
+
defineModel({
|
|
8
|
+
name: "Pessoa",
|
|
9
|
+
singular: "pessoa",
|
|
10
|
+
basePath: "/pessoas",
|
|
11
|
+
schema: {
|
|
12
|
+
nome: fields.string({ required: true, label: "Nome" }),
|
|
13
|
+
email: fields.string({ label: "E-mail" }),
|
|
14
|
+
documento: fields.string({ label: "Documento" }),
|
|
15
|
+
tipo: fields.enum(["pf", "pj"], { label: "Tipo", default: "pf" }),
|
|
16
|
+
status: fields.enum(["ativo", "inativo"], { label: "Status", default: "ativo" }),
|
|
17
|
+
},
|
|
18
|
+
crud: { enabled: true, roles: { write: ["admin"] } },
|
|
19
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central __NAME__ — template documentos-fiscais. Liga o módulo de documentos
|
|
3
|
+
* do Core (aprovação, anexos, status).
|
|
4
|
+
*/
|
|
5
|
+
module.exports = {
|
|
6
|
+
name: "__NAME__",
|
|
7
|
+
slug: "__SLUG__",
|
|
8
|
+
|
|
9
|
+
modules: {
|
|
10
|
+
collections: true,
|
|
11
|
+
documents: true,
|
|
12
|
+
pipelines: false,
|
|
13
|
+
integrations: false,
|
|
14
|
+
omie: false,
|
|
15
|
+
assistants: false,
|
|
16
|
+
currencies: false,
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
domain: {
|
|
20
|
+
models: "src/models",
|
|
21
|
+
validations: "src/validations",
|
|
22
|
+
triggers: "src/triggers",
|
|
23
|
+
hooks: "src/hooks",
|
|
24
|
+
mappings: "src/mappings",
|
|
25
|
+
documents: "src/documents",
|
|
26
|
+
pipelines: "src/pipelines",
|
|
27
|
+
integrations: "src/integrations",
|
|
28
|
+
routes: "src/routes",
|
|
29
|
+
},
|
|
30
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const { defineModel, fields } = require("@oondemand/oon-core-back");
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Documento fiscal com fluxo de aprovação. O front (CoreDocument) usa o
|
|
5
|
+
* `status` para badge e as actions RESTful approve/reject do Core.
|
|
6
|
+
*/
|
|
7
|
+
defineModel({
|
|
8
|
+
name: "DocumentoFiscal",
|
|
9
|
+
singular: "documentoFiscal",
|
|
10
|
+
basePath: "/documentos-fiscais",
|
|
11
|
+
schema: {
|
|
12
|
+
numero: fields.string({ required: true, label: "Número" }),
|
|
13
|
+
tipo: fields.enum(["nfe", "nfse", "nfce", "outro"], { label: "Tipo", default: "nfe" }),
|
|
14
|
+
emitente: fields.string({ label: "Emitente" }),
|
|
15
|
+
valor: fields.currency({ label: "Valor" }),
|
|
16
|
+
dataEmissao: fields.date({ label: "Emissão" }),
|
|
17
|
+
status: fields.enum(["pendente", "aprovado", "reprovado"], {
|
|
18
|
+
default: "pendente",
|
|
19
|
+
label: "Status",
|
|
20
|
+
}),
|
|
21
|
+
},
|
|
22
|
+
crud: { enabled: true, roles: { write: ["admin"] } },
|
|
23
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "__NAME__",
|
|
3
|
+
"slug": "__SLUG__",
|
|
4
|
+
"backend": { "metadataUrl": "/core/metadata" },
|
|
5
|
+
"navigation": { "mode": "auto" },
|
|
6
|
+
"collections": [],
|
|
7
|
+
"pipelines": [],
|
|
8
|
+
"documents": [
|
|
9
|
+
{
|
|
10
|
+
"model": "DocumentoFiscal",
|
|
11
|
+
"label": "Documentos fiscais",
|
|
12
|
+
"approval": true,
|
|
13
|
+
"attachments": true,
|
|
14
|
+
"section": "Fiscal"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central __NAME__ — template multi-moedas. Liga o módulo de moedas do Core
|
|
3
|
+
* (cotações, conversão).
|
|
4
|
+
*/
|
|
5
|
+
module.exports = {
|
|
6
|
+
name: "__NAME__",
|
|
7
|
+
slug: "__SLUG__",
|
|
8
|
+
|
|
9
|
+
modules: {
|
|
10
|
+
collections: true,
|
|
11
|
+
documents: false,
|
|
12
|
+
pipelines: false,
|
|
13
|
+
integrations: false,
|
|
14
|
+
omie: false,
|
|
15
|
+
assistants: false,
|
|
16
|
+
currencies: true,
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
domain: {
|
|
20
|
+
models: "src/models",
|
|
21
|
+
validations: "src/validations",
|
|
22
|
+
triggers: "src/triggers",
|
|
23
|
+
hooks: "src/hooks",
|
|
24
|
+
mappings: "src/mappings",
|
|
25
|
+
documents: "src/documents",
|
|
26
|
+
pipelines: "src/pipelines",
|
|
27
|
+
integrations: "src/integrations",
|
|
28
|
+
routes: "src/routes",
|
|
29
|
+
},
|
|
30
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const { defineModel, fields } = require("@oondemand/oon-core-back");
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Cotação em moeda estrangeira com valor convertido para BRL. Mostra os
|
|
5
|
+
* helpers `fields.currency*` do módulo Multi-moedas.
|
|
6
|
+
*/
|
|
7
|
+
defineModel({
|
|
8
|
+
name: "Cotacao",
|
|
9
|
+
singular: "cotacao",
|
|
10
|
+
basePath: "/cotacoes",
|
|
11
|
+
schema: {
|
|
12
|
+
descricao: fields.string({ required: true, label: "Descrição" }),
|
|
13
|
+
valor: fields.currency({ label: "Valor" }),
|
|
14
|
+
moeda: fields.currencyCode({ label: "Moeda" }),
|
|
15
|
+
valorConvertido: fields.currencyConverted({ base: "BRL", label: "Valor (BRL)" }),
|
|
16
|
+
validade: fields.date({ label: "Validade" }),
|
|
17
|
+
status: fields.enum(["rascunho", "enviada", "aprovada", "recusada"], {
|
|
18
|
+
default: "rascunho",
|
|
19
|
+
label: "Status",
|
|
20
|
+
}),
|
|
21
|
+
},
|
|
22
|
+
crud: { enabled: true, roles: { write: ["admin"] } },
|
|
23
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const { defineModel, fields } = require("@oondemand/oon-core-back");
|
|
2
|
+
|
|
3
|
+
/** Moeda com cotação corrente (atualizada via action do módulo currencies). */
|
|
4
|
+
defineModel({
|
|
5
|
+
name: "Moeda",
|
|
6
|
+
singular: "moeda",
|
|
7
|
+
basePath: "/moedas",
|
|
8
|
+
schema: {
|
|
9
|
+
codigo: fields.currencyCode({ required: true, label: "Código" }),
|
|
10
|
+
nome: fields.string({ required: true, label: "Nome" }),
|
|
11
|
+
cotacao: fields.number({ label: "Cotação (BRL)", default: 1 }),
|
|
12
|
+
ativa: fields.boolean({ label: "Ativa", default: true }),
|
|
13
|
+
},
|
|
14
|
+
crud: { enabled: true, roles: { write: ["admin"] } },
|
|
15
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "__NAME__",
|
|
3
|
+
"slug": "__SLUG__",
|
|
4
|
+
"backend": { "metadataUrl": "/core/metadata" },
|
|
5
|
+
"navigation": { "mode": "auto" },
|
|
6
|
+
"collections": [
|
|
7
|
+
{ "model": "Moeda", "mode": "dynamic", "section": "Multi-moedas" },
|
|
8
|
+
{ "model": "Cotacao", "mode": "dynamic", "section": "Multi-moedas" }
|
|
9
|
+
],
|
|
10
|
+
"pipelines": [],
|
|
11
|
+
"documents": []
|
|
12
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central __NAME__ — template omie-sidecar. Liga os módulos de integração e
|
|
3
|
+
* Omie do Core. O engine de Omie (chaves, fila, retries) vive no Core; aqui só
|
|
4
|
+
* declaramos o mapping de domínio.
|
|
5
|
+
*/
|
|
6
|
+
module.exports = {
|
|
7
|
+
name: "__NAME__",
|
|
8
|
+
slug: "__SLUG__",
|
|
9
|
+
|
|
10
|
+
modules: {
|
|
11
|
+
collections: true,
|
|
12
|
+
documents: false,
|
|
13
|
+
pipelines: false,
|
|
14
|
+
integrations: true,
|
|
15
|
+
omie: true,
|
|
16
|
+
assistants: false,
|
|
17
|
+
currencies: false,
|
|
18
|
+
},
|
|
19
|
+
|
|
20
|
+
domain: {
|
|
21
|
+
models: "src/models",
|
|
22
|
+
validations: "src/validations",
|
|
23
|
+
triggers: "src/triggers",
|
|
24
|
+
hooks: "src/hooks",
|
|
25
|
+
mappings: "src/mappings",
|
|
26
|
+
documents: "src/documents",
|
|
27
|
+
pipelines: "src/pipelines",
|
|
28
|
+
integrations: "src/integrations",
|
|
29
|
+
routes: "src/routes",
|
|
30
|
+
},
|
|
31
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const { defineOmieMapping } = require("@oondemand/oon-core-back");
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Mapping de domínio Pessoa -> Cliente Omie. `toOmie` traduz o payload do
|
|
5
|
+
* domínio na chamada da API Omie. O engine (chaves, fila, retries) é do Core.
|
|
6
|
+
*/
|
|
7
|
+
defineOmieMapping("pessoa-cliente", {
|
|
8
|
+
toOmie: (pessoa) => ({
|
|
9
|
+
endpoint: "geral/clientes/",
|
|
10
|
+
call: "IncluirCliente",
|
|
11
|
+
param: [
|
|
12
|
+
{
|
|
13
|
+
codigo_cliente_integracao: String(pessoa.idPessoa || pessoa._id || ""),
|
|
14
|
+
razao_social: pessoa.nome,
|
|
15
|
+
email: pessoa.email,
|
|
16
|
+
cnpj_cpf: pessoa.documento,
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
}),
|
|
20
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const { defineModel, fields } = require("@oondemand/oon-core-back");
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Pessoa/Cliente sincronizada com a Omie. Os campos de sincronização são
|
|
5
|
+
* preenchidos pelo Core via o mapping declarado em src/mappings.
|
|
6
|
+
*/
|
|
7
|
+
defineModel({
|
|
8
|
+
name: "Pessoa",
|
|
9
|
+
singular: "pessoa",
|
|
10
|
+
basePath: "/pessoas",
|
|
11
|
+
schema: {
|
|
12
|
+
nome: fields.string({ required: true, label: "Nome" }),
|
|
13
|
+
email: fields.string({ label: "E-mail" }),
|
|
14
|
+
documento: fields.string({ label: "Documento" }),
|
|
15
|
+
tipo: fields.enum(["pf", "pj"], { label: "Tipo", default: "pf" }),
|
|
16
|
+
codigo_cliente_omie: fields.string({ searchable: false, label: "Código Omie" }),
|
|
17
|
+
status_sincronizacao_omie: fields.enum(["pendente", "sucesso", "erro"], {
|
|
18
|
+
default: "pendente",
|
|
19
|
+
label: "Sync Omie",
|
|
20
|
+
}),
|
|
21
|
+
status: fields.enum(["ativo", "inativo"], { label: "Status", default: "ativo" }),
|
|
22
|
+
},
|
|
23
|
+
crud: { enabled: true, roles: { write: ["admin"] } },
|
|
24
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const { defineTrigger, omie } = require("@oondemand/oon-core-back");
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Após criar/alterar uma Pessoa, enfileira o sync com a Omie usando o mapping
|
|
5
|
+
* declarado. No-op seguro se a Omie não estiver configurada (sem app_key).
|
|
6
|
+
*/
|
|
7
|
+
defineTrigger("Pessoa", {
|
|
8
|
+
after: async (doc) => {
|
|
9
|
+
await omie.sync({
|
|
10
|
+
mapping: "pessoa-cliente",
|
|
11
|
+
payload: { idPessoa: String(doc._id), nome: doc.nome, email: doc.email, documento: doc.documento },
|
|
12
|
+
});
|
|
13
|
+
},
|
|
14
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central __NAME__ — template pedidos-marketplace. Catálogo de produtos +
|
|
3
|
+
* esteira de pedidos.
|
|
4
|
+
*/
|
|
5
|
+
module.exports = {
|
|
6
|
+
name: "__NAME__",
|
|
7
|
+
slug: "__SLUG__",
|
|
8
|
+
|
|
9
|
+
modules: {
|
|
10
|
+
collections: true,
|
|
11
|
+
documents: false,
|
|
12
|
+
pipelines: true,
|
|
13
|
+
integrations: false,
|
|
14
|
+
omie: false,
|
|
15
|
+
assistants: false,
|
|
16
|
+
currencies: false,
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
domain: {
|
|
20
|
+
models: "src/models",
|
|
21
|
+
validations: "src/validations",
|
|
22
|
+
triggers: "src/triggers",
|
|
23
|
+
hooks: "src/hooks",
|
|
24
|
+
mappings: "src/mappings",
|
|
25
|
+
documents: "src/documents",
|
|
26
|
+
pipelines: "src/pipelines",
|
|
27
|
+
integrations: "src/integrations",
|
|
28
|
+
routes: "src/routes",
|
|
29
|
+
},
|
|
30
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const { defineModel, fields } = require("@oondemand/oon-core-back");
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Pedido do marketplace. O campo `status` define as colunas da esteira de
|
|
5
|
+
* fulfillment renderizada pelo front (CorePipeline).
|
|
6
|
+
*/
|
|
7
|
+
defineModel({
|
|
8
|
+
name: "Pedido",
|
|
9
|
+
singular: "pedido",
|
|
10
|
+
basePath: "/pedidos",
|
|
11
|
+
schema: {
|
|
12
|
+
numero: fields.string({ required: true, label: "Número" }),
|
|
13
|
+
cliente: fields.string({ label: "Cliente" }),
|
|
14
|
+
total: fields.currency({ label: "Total" }),
|
|
15
|
+
dataPedido: fields.date({ label: "Data" }),
|
|
16
|
+
status: fields.enum(
|
|
17
|
+
["novo", "pago", "separacao", "enviado", "entregue", "cancelado"],
|
|
18
|
+
{ default: "novo", label: "Status" }
|
|
19
|
+
),
|
|
20
|
+
},
|
|
21
|
+
crud: { enabled: true, roles: { write: ["admin"] } },
|
|
22
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const { defineModel, fields } = require("@oondemand/oon-core-back");
|
|
2
|
+
|
|
3
|
+
/** Produto do catálogo do marketplace. */
|
|
4
|
+
defineModel({
|
|
5
|
+
name: "Produto",
|
|
6
|
+
singular: "produto",
|
|
7
|
+
basePath: "/produtos",
|
|
8
|
+
schema: {
|
|
9
|
+
nome: fields.string({ required: true, label: "Produto" }),
|
|
10
|
+
sku: fields.string({ label: "SKU" }),
|
|
11
|
+
preco: fields.currency({ label: "Preço" }),
|
|
12
|
+
estoque: fields.number({ label: "Estoque", default: 0 }),
|
|
13
|
+
status: fields.enum(["ativo", "inativo"], { label: "Status", default: "ativo" }),
|
|
14
|
+
},
|
|
15
|
+
crud: { enabled: true, roles: { write: ["admin"] } },
|
|
16
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "__NAME__",
|
|
3
|
+
"slug": "__SLUG__",
|
|
4
|
+
"backend": { "metadataUrl": "/core/metadata" },
|
|
5
|
+
"navigation": { "mode": "auto" },
|
|
6
|
+
"collections": [{ "model": "Produto", "mode": "dynamic", "section": "Catálogo" }],
|
|
7
|
+
"pipelines": [
|
|
8
|
+
{ "model": "Pedido", "label": "Pedidos", "stageField": "status", "section": "Operação" }
|
|
9
|
+
],
|
|
10
|
+
"documents": []
|
|
11
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central __NAME__ — template servicos-prestados. Esteira de acompanhamento
|
|
3
|
+
* dos serviços prestados ao cliente.
|
|
4
|
+
*/
|
|
5
|
+
module.exports = {
|
|
6
|
+
name: "__NAME__",
|
|
7
|
+
slug: "__SLUG__",
|
|
8
|
+
|
|
9
|
+
modules: {
|
|
10
|
+
collections: true,
|
|
11
|
+
documents: false,
|
|
12
|
+
pipelines: true,
|
|
13
|
+
integrations: false,
|
|
14
|
+
omie: false,
|
|
15
|
+
assistants: false,
|
|
16
|
+
currencies: false,
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
domain: {
|
|
20
|
+
models: "src/models",
|
|
21
|
+
validations: "src/validations",
|
|
22
|
+
triggers: "src/triggers",
|
|
23
|
+
hooks: "src/hooks",
|
|
24
|
+
mappings: "src/mappings",
|
|
25
|
+
documents: "src/documents",
|
|
26
|
+
pipelines: "src/pipelines",
|
|
27
|
+
integrations: "src/integrations",
|
|
28
|
+
routes: "src/routes",
|
|
29
|
+
},
|
|
30
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const { defineModel, fields } = require("@oondemand/oon-core-back");
|
|
2
|
+
|
|
3
|
+
/** Cliente a quem os serviços são prestados. */
|
|
4
|
+
defineModel({
|
|
5
|
+
name: "Cliente",
|
|
6
|
+
singular: "cliente",
|
|
7
|
+
basePath: "/clientes",
|
|
8
|
+
schema: {
|
|
9
|
+
nome: fields.string({ required: true, label: "Nome" }),
|
|
10
|
+
email: fields.string({ label: "E-mail" }),
|
|
11
|
+
documento: fields.string({ label: "Documento" }),
|
|
12
|
+
status: fields.enum(["ativo", "inativo"], { label: "Status", default: "ativo" }),
|
|
13
|
+
},
|
|
14
|
+
crud: { enabled: true, roles: { write: ["admin"] } },
|
|
15
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const { defineModel, fields } = require("@oondemand/oon-core-back");
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Serviço prestado a um Cliente. O campo `etapa` define as colunas da esteira
|
|
5
|
+
* renderizada pelo front (CorePipeline).
|
|
6
|
+
*/
|
|
7
|
+
defineModel({
|
|
8
|
+
name: "ServicoPrestado",
|
|
9
|
+
singular: "servicoPrestado",
|
|
10
|
+
basePath: "/servicos-prestados",
|
|
11
|
+
schema: {
|
|
12
|
+
descricao: fields.string({ required: true, label: "Descrição" }),
|
|
13
|
+
cliente: fields.ref("Cliente", { required: true, label: "Cliente" }),
|
|
14
|
+
valor: fields.currency({ label: "Valor" }),
|
|
15
|
+
dataInicio: fields.date({ label: "Início" }),
|
|
16
|
+
etapa: fields.enum(["proposta", "em-execucao", "entregue", "faturado", "cancelado"], {
|
|
17
|
+
default: "proposta",
|
|
18
|
+
label: "Etapa",
|
|
19
|
+
}),
|
|
20
|
+
},
|
|
21
|
+
crud: { enabled: true, roles: { write: ["admin"] } },
|
|
22
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "__NAME__",
|
|
3
|
+
"slug": "__SLUG__",
|
|
4
|
+
"backend": { "metadataUrl": "/core/metadata" },
|
|
5
|
+
"navigation": { "mode": "auto" },
|
|
6
|
+
"collections": [{ "model": "Cliente", "mode": "dynamic", "section": "Cadastros" }],
|
|
7
|
+
"pipelines": [
|
|
8
|
+
{ "model": "ServicoPrestado", "label": "Serviços prestados", "stageField": "etapa", "section": "Operação" }
|
|
9
|
+
],
|
|
10
|
+
"documents": []
|
|
11
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central __NAME__ — template servicos-tomados. Liga o módulo de esteiras
|
|
3
|
+
* (pipelines) do Core para acompanhar o processamento dos serviços.
|
|
4
|
+
*/
|
|
5
|
+
module.exports = {
|
|
6
|
+
name: "__NAME__",
|
|
7
|
+
slug: "__SLUG__",
|
|
8
|
+
|
|
9
|
+
modules: {
|
|
10
|
+
collections: true,
|
|
11
|
+
documents: false,
|
|
12
|
+
pipelines: true,
|
|
13
|
+
integrations: false,
|
|
14
|
+
omie: false,
|
|
15
|
+
assistants: false,
|
|
16
|
+
currencies: false,
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
domain: {
|
|
20
|
+
models: "src/models",
|
|
21
|
+
validations: "src/validations",
|
|
22
|
+
triggers: "src/triggers",
|
|
23
|
+
hooks: "src/hooks",
|
|
24
|
+
mappings: "src/mappings",
|
|
25
|
+
documents: "src/documents",
|
|
26
|
+
pipelines: "src/pipelines",
|
|
27
|
+
integrations: "src/integrations",
|
|
28
|
+
routes: "src/routes",
|
|
29
|
+
},
|
|
30
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const { defineModel, fields } = require("@oondemand/oon-core-back");
|
|
2
|
+
|
|
3
|
+
/** Prestador de serviço. */
|
|
4
|
+
defineModel({
|
|
5
|
+
name: "Pessoa",
|
|
6
|
+
singular: "pessoa",
|
|
7
|
+
basePath: "/pessoas",
|
|
8
|
+
schema: {
|
|
9
|
+
nome: fields.string({ required: true, label: "Nome" }),
|
|
10
|
+
email: fields.string({ label: "E-mail" }),
|
|
11
|
+
documento: fields.string({ label: "Documento" }),
|
|
12
|
+
status: fields.enum(["ativo", "inativo"], { label: "Status", default: "ativo" }),
|
|
13
|
+
},
|
|
14
|
+
crud: { enabled: true, roles: { write: ["admin"] } },
|
|
15
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const { defineModel, fields } = require("@oondemand/oon-core-back");
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Serviço tomado, vinculado a uma Pessoa. O campo `statusProcessamento` define
|
|
5
|
+
* as colunas da esteira renderizada pelo front (CorePipeline).
|
|
6
|
+
*/
|
|
7
|
+
defineModel({
|
|
8
|
+
name: "Servico",
|
|
9
|
+
singular: "servico",
|
|
10
|
+
basePath: "/servicos",
|
|
11
|
+
schema: {
|
|
12
|
+
descricao: fields.string({ required: true, label: "Descrição" }),
|
|
13
|
+
pessoa: fields.ref("Pessoa", { required: true, label: "Prestador" }),
|
|
14
|
+
valor: fields.currency({ label: "Valor" }),
|
|
15
|
+
dataContratacao: fields.date({ label: "Contratação" }),
|
|
16
|
+
statusProcessamento: fields.enum(
|
|
17
|
+
["aberto", "pendente", "processando", "pago", "cancelado"],
|
|
18
|
+
{ default: "aberto", label: "Etapa" }
|
|
19
|
+
),
|
|
20
|
+
},
|
|
21
|
+
crud: { enabled: true, roles: { write: ["admin"] } },
|
|
22
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "__NAME__",
|
|
3
|
+
"slug": "__SLUG__",
|
|
4
|
+
"backend": { "metadataUrl": "/core/metadata" },
|
|
5
|
+
"navigation": { "mode": "auto" },
|
|
6
|
+
"collections": [{ "model": "Pessoa", "label": "Prestadores", "mode": "dynamic", "section": "Cadastros" }],
|
|
7
|
+
"pipelines": [
|
|
8
|
+
{ "model": "Servico", "label": "Serviços tomados", "stageField": "statusProcessamento", "section": "Operação" }
|
|
9
|
+
],
|
|
10
|
+
"documents": []
|
|
11
|
+
}
|