lib/rules/lead.go

107 lines
2.9 KiB
Go
Raw Normal View History

2021-01-13 02:41:43 +00:00
package rules
import (
"bytes"
"context"
"html/template"
"code.tnxs.net/taxnexus/lib/api/crm/crm_client/leads"
"code.tnxs.net/taxnexus/lib/api/crm/crm_models"
"code.tnxs.net/taxnexus/lib/api/workflow/workflow_client/outgoing_email_message"
"code.tnxs.net/taxnexus/lib/api/workflow/workflow_models"
"code.tnxs.net/taxnexus/lib/app"
2021-01-19 01:50:45 +00:00
httptransport "github.com/go-openapi/runtime/client"
2021-01-13 02:41:43 +00:00
"go.temporal.io/sdk/workflow"
)
// StoreLeadActivity posts a new lead object to datastore
2021-01-19 21:18:59 +00:00
func StoreLeadActivity(ctx workflow.Context, w app.LeadActivityWrapper) error { //nolint:gocritic // don't care
obj := &crm_models.Lead{
Address: w.Address.MarshalToCrm(),
Company: w.Company,
Description: w.Description,
Email: w.Email,
FirstName: w.FirstName,
LastName: w.LastName,
MobilePhone: w.MobilePhone,
Phone: w.Phone,
RefererURL: w.RefererURL,
Status: w.Status,
TenantID: w.TenantID,
Title: w.Title,
Type: w.Type,
UTMCampaign: w.UTMCampaign,
UTMContent: w.UTMContent,
UTMMedium: w.UTMMedium,
UTMSource: w.UTMSource,
UTMTerm: w.UTMTerm,
Website: w.Website,
Name: w.Name,
}
2021-01-13 02:41:43 +00:00
postLeadParams := leads.NewPostLeadsParamsWithTimeout(postTimeout)
2021-01-19 21:18:59 +00:00
if obj.Name == "" {
obj.Name = obj.FirstName + " " + obj.LastName
2021-01-13 02:41:43 +00:00
}
postLeadParams.LeadRequest = &crm_models.LeadRequest{
2021-01-19 21:18:59 +00:00
Data: []*crm_models.Lead{obj},
2021-01-13 02:41:43 +00:00
}
2021-01-19 01:50:45 +00:00
_, err := crmClient.Leads.PostLeads(postLeadParams,
httptransport.APIKeyAuth(
"X-API-Key",
"header",
w.APIKey,
))
2021-01-13 02:41:43 +00:00
if err != nil {
return err
}
sugar.Info("crm.storeLead: 👍 📤")
return nil
}
// NotifyLeadActivity sends an email to a new lead
2021-01-19 20:23:02 +00:00
func NotifyLeadActivity(ctx context.Context, w *app.LeadActivityWrapper) error {
2021-01-13 02:41:43 +00:00
sugar.Info("workflow.notifyLead: 📥")
var buf bytes.Buffer
const textBody = `
Alert! New Lead Inquiry from Taxnexus.io website.
Taxnexus ID: {{.ID}}
First Name: {{.FirstName}}
Last Name: {{.LastName}}
Email: {{.Email}}
Message: {{.Description}}
-- end --
`
t := template.Must(template.New("textBody").Parse(textBody))
err := t.Execute(&buf, w)
if err != nil {
return err
}
emailParams := outgoing_email_message.NewPostOutgoingEmailMessagesParamsWithTimeout(postTimeout)
emailParams.OutgoingEmailMessageRequest = &workflow_models.OutgoingEmailMessageRequest{
Data: []*workflow_models.OutgoingEmailMessage{
{
2021-01-19 21:18:59 +00:00
Subject: "New lead from " + w.Name,
2021-01-13 02:41:43 +00:00
ValidatedFromAddress: "support@taxnexus.net",
ToAddress: "info@taxnexus.net",
FromName: "Taxnexus Onboarding",
Text: buf.String(),
HTML: "<pre>" + buf.String() + "</pre>",
},
},
}
2021-01-19 01:50:45 +00:00
_, err = workflowClient.OutgoingEmailMessage.PostOutgoingEmailMessages(emailParams,
httptransport.APIKeyAuth(
"X-API-Key",
"header",
w.APIKey,
))
2021-01-13 02:41:43 +00:00
if err != nil {
return err
}
sugar.Info("workflow.notifyLead: 👍 📤")
return nil
}