feat: checklists em tickets + automações
- Adiciona checklist no ticket (itens obrigatórios/opcionais) e bloqueia encerramento com pendências\n- Cria templates de checklist (globais/por empresa) + tela em /settings/checklists\n- Nova ação de automação: aplicar template de checklist\n- Corrige crash do Select (value vazio), warnings de Dialog e dimensionamento de charts\n- Ajusta SMTP (STARTTLS) e melhora teste de integração
This commit is contained in:
parent
4306b0504d
commit
88a9ef454e
27 changed files with 2685 additions and 226 deletions
|
|
@ -309,6 +309,22 @@ export default defineSchema({
|
|||
),
|
||||
formTemplate: v.optional(v.string()),
|
||||
formTemplateLabel: v.optional(v.string()),
|
||||
checklist: v.optional(
|
||||
v.array(
|
||||
v.object({
|
||||
id: v.string(),
|
||||
text: v.string(),
|
||||
done: v.boolean(),
|
||||
required: v.optional(v.boolean()),
|
||||
templateId: v.optional(v.id("ticketChecklistTemplates")),
|
||||
templateItemId: v.optional(v.string()),
|
||||
createdAt: v.optional(v.number()),
|
||||
createdBy: v.optional(v.id("users")),
|
||||
doneAt: v.optional(v.number()),
|
||||
doneBy: v.optional(v.id("users")),
|
||||
})
|
||||
)
|
||||
),
|
||||
relatedTicketIds: v.optional(v.array(v.id("tickets"))),
|
||||
resolvedWithTicketId: v.optional(v.id("tickets")),
|
||||
reopenDeadline: v.optional(v.number()),
|
||||
|
|
@ -633,6 +649,28 @@ export default defineSchema({
|
|||
.index("by_tenant_key", ["tenantId", "key"])
|
||||
.index("by_tenant_active", ["tenantId", "isArchived"]),
|
||||
|
||||
ticketChecklistTemplates: defineTable({
|
||||
tenantId: v.string(),
|
||||
name: v.string(),
|
||||
description: v.optional(v.string()),
|
||||
companyId: v.optional(v.id("companies")),
|
||||
items: v.array(
|
||||
v.object({
|
||||
id: v.string(),
|
||||
text: v.string(),
|
||||
required: v.optional(v.boolean()),
|
||||
})
|
||||
),
|
||||
isArchived: v.optional(v.boolean()),
|
||||
createdAt: v.number(),
|
||||
updatedAt: v.number(),
|
||||
createdBy: v.optional(v.id("users")),
|
||||
updatedBy: v.optional(v.id("users")),
|
||||
})
|
||||
.index("by_tenant", ["tenantId"])
|
||||
.index("by_tenant_company", ["tenantId", "companyId"])
|
||||
.index("by_tenant_active", ["tenantId", "isArchived"]),
|
||||
|
||||
userInvites: defineTable({
|
||||
tenantId: v.string(),
|
||||
inviteId: v.string(),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue