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" httptransport "github.com/go-openapi/runtime/client" "go.temporal.io/sdk/workflow" ) // StoreLeadActivity posts a new lead object to datastore 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, } postLeadParams := leads.NewPostLeadsParamsWithTimeout(postTimeout) if obj.Name == "" { obj.Name = obj.FirstName + " " + obj.LastName } postLeadParams.LeadRequest = &crm_models.LeadRequest{ Data: []*crm_models.Lead{obj}, } _, err := crmClient.Leads.PostLeads(postLeadParams, httptransport.APIKeyAuth( "X-API-Key", "header", w.APIKey, )) if err != nil { return err } sugar.Info("crm.storeLead: 👍 📤") return nil } // NotifyLeadActivity sends an email to a new lead func NotifyLeadActivity(ctx context.Context, w app.LeadActivityWrapper) error { //nolint:dupl,gocritic,lll // todo #2 need email templates 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{ { Subject: "New lead from " + w.Name, ValidatedFromAddress: "support@taxnexus.net", ToAddress: "info@taxnexus.net", FromName: "Taxnexus Onboarding", Text: buf.String(), HTML: "
" + buf.String() + "", }, }, } _, err = workflowClient.OutgoingEmailMessage.PostOutgoingEmailMessages(emailParams, httptransport.APIKeyAuth( "X-API-Key", "header", w.APIKey, )) if err != nil { return err } sugar.Info("workflow.notifyLead: 👍 📤") return nil }