118 lines
3.8 KiB
QBasic
118 lines
3.8 KiB
QBasic
PARAM deal_id AS STRING LIKE "uuid" DESCRIPTION "ID do deal a atualizar" OPTIONAL
|
|
PARAM stage AS STRING LIKE "qualified" DESCRIPTION "Novo estágio: new, qualified, proposal, negotiation, won, lost" OPTIONAL
|
|
PARAM value AS MONEY LIKE 75000 DESCRIPTION "Novo valor do deal" OPTIONAL
|
|
PARAM lost_reason AS STRING LIKE "Preço" DESCRIPTION "Motivo da perda (obrigatório se stage=lost)" OPTIONAL
|
|
PARAM notes AS STRING LIKE "Reunião positiva" DESCRIPTION "Observações adicionais" OPTIONAL
|
|
|
|
DESCRIPTION "Atualizar um deal existente: mudar estágio, valor, adicionar notas. Se mudar para 'won' ou 'lost', o deal é fechado."
|
|
|
|
' Validate deal exists
|
|
IF NOT deal_id OR deal_id = "uuid" THEN
|
|
TALK "Qual deal você deseja atualizar? (Pode dizer o nome da empresa ou o título)"
|
|
HEAR query AS STRING
|
|
' Usar a ferramenta recém-criada (ou lógica similar) para buscar
|
|
deals = GET "/api/crm/deals?search=" + query + "&limit=5"
|
|
IF UBOUND(deals) = 0 THEN
|
|
TALK "Não encontrei nenhum deal relacionado a '" + query + "'."
|
|
RETURN
|
|
END IF
|
|
IF UBOUND(deals) = 1 THEN
|
|
deal_id = FIRST(deals).id
|
|
ELSE
|
|
TALK "Encontrei várias opções. Seguem as 3 primeiras:"
|
|
count = 1
|
|
FOR EACH d IN deals
|
|
IF count <= 3 THEN
|
|
TALK count + ". **" + d.title + "** (R$ " + FORMAT(d.value, "#,##0") + ", " + d.stage + ")"
|
|
END IF
|
|
count = count + 1
|
|
NEXT d
|
|
TALK "Por favor, especifique melhor informando o título exato ou o e-mail do contato."
|
|
RETURN
|
|
END IF
|
|
END IF
|
|
|
|
deal = GET "/api/crm/deals/" + deal_id
|
|
IF NOT deal THEN
|
|
TALK "Deal não encontrado com ID: " + deal_id
|
|
RETURN
|
|
END IF
|
|
|
|
TALK "Deal atual: **" + deal.title + "** — " + deal.stage + " — R$ " + FORMAT(deal.value, "#,##0")
|
|
|
|
' Build update payload
|
|
update = #{}
|
|
|
|
IF stage THEN
|
|
' Validate stage
|
|
valid_stages = "new,qualified,proposal,negotiation,won,lost"
|
|
IF INSTR(valid_stages, stage) = 0 THEN
|
|
TALK "Estágio inválido. Use: new, qualified, proposal, negotiation, won, lost"
|
|
RETURN
|
|
END IF
|
|
|
|
update.stage = stage
|
|
|
|
' Set probability
|
|
IF stage = "new" THEN
|
|
update.probability = 10
|
|
ELSE IF stage = "qualified" THEN
|
|
update.probability = 30
|
|
ELSE IF stage = "proposal" THEN
|
|
update.probability = 50
|
|
ELSE IF stage = "negotiation" THEN
|
|
update.probability = 70
|
|
ELSE IF stage = "won" THEN
|
|
update.probability = 100
|
|
update.won = TRUE
|
|
update.actual_close_date = FORMAT(TODAY(), "YYYY-MM-DD")
|
|
ELSE IF stage = "lost" THEN
|
|
update.probability = 0
|
|
update.won = FALSE
|
|
update.actual_close_date = FORMAT(TODAY(), "YYYY-MM-DD")
|
|
IF NOT lost_reason THEN
|
|
TALK "Por que o deal foi perdido?"
|
|
HEAR lost_reason AS STRING
|
|
END IF
|
|
update.lost_reason = lost_reason
|
|
END IF
|
|
END IF
|
|
|
|
IF value THEN
|
|
update.value = value
|
|
END IF
|
|
|
|
IF notes THEN
|
|
update.notes = notes
|
|
END IF
|
|
|
|
' Execute update
|
|
PUT "/api/crm/deals/" + deal_id, update
|
|
|
|
' Log activity
|
|
POST "/api/crm/activities", #{
|
|
activity_type: "stage_change",
|
|
subject: "Deal atualizado para " + stage,
|
|
description: notes,
|
|
contact_id: deal.contact_id
|
|
}
|
|
|
|
' Response by stage
|
|
IF stage = "won" THEN
|
|
TALK "🎉 **Parabéns! Deal ganho!**"
|
|
TALK "**" + deal.title + "** fechado com sucesso!"
|
|
TALK "💰 Valor: R$ " + FORMAT(COALESCE(value, deal.value), "#,##0")
|
|
ELSE IF stage = "lost" THEN
|
|
TALK "📋 **Deal perdido**"
|
|
TALK "**" + deal.title + "** marcado como perdido."
|
|
TALK "📝 Motivo: " + lost_reason
|
|
TALK "Analise o que aconteceu para melhorar nas próximas!"
|
|
ELSE IF stage THEN
|
|
TALK "✅ **Deal atualizado!**"
|
|
TALK "**" + deal.title + "** → **" + stage + "**"
|
|
TALK "📊 Probabilidade: " + update.probability + "%"
|
|
ELSE
|
|
TALK "✅ Deal atualizado com sucesso."
|
|
END IF
|
|
|
|
RETURN deal_id
|