lib/rules/new-developer.go

249 lines
7.2 KiB
Go

package rules
import (
"time"
"code.tnxs.net/taxnexus/lib/api/crm/crm_models"
"code.tnxs.net/taxnexus/lib/api/ops/ops_models"
"code.tnxs.net/taxnexus/lib/app"
"go.temporal.io/sdk/workflow"
)
// NewDeveloperWorkflowWrapper wraps a contact, account, payment method with auth and saga info
type NewDeveloperWorkflowWrapper struct {
AccountName string
BillingStreet string
BillingCity string
BillingState string
BillingPostalCode string
Company string
Description string
Email string
FirstName string
LastName string
MobilePhone string
Name string
Phone string
Title string
Website string
APIKey string
SagaID string
SagaType string
}
// NewDeveloperWorkflow is a Temporal workflow
func NewDeveloperWorkflow(ctx workflow.Context, w NewDeveloperWorkflowWrapper) error { //nolint:funlen,gocritic,lll // don't care
ctx = workflow.WithActivityOptions(ctx, workflow.ActivityOptions{
StartToCloseTimeout: time.Minute,
})
err := workflow.ExecuteActivity(ctx,
StoreContactActivity,
app.ContactActivityWrapper{
Obj: crm_models.Contact{
AccountID: "",
AssistantName: "",
AssistantPhone: "",
BirthDate: "",
Department: "",
Description: w.Description,
DoNotCall: false,
Email: w.Email,
EmailBounceDate: "",
EmailBouncedReason: "",
EnrollmentStatus: "",
Fax: "",
FirstName: w.FirstName,
HasOptedOutOfEmail: false,
HasOptedOutOfFax: false,
HomePhone: "",
IsEmailBounced: false,
IsProvisioned: false,
LastName: w.LastName,
LeadSource: "",
Level: "",
LinkedIn: "",
MailingAddress: &crm_models.Address{},
MailingLists: "",
MobilePhone: w.MobilePhone,
Name: w.Name,
OtherAddress: &crm_models.Address{},
OtherPhone: "",
OwnerID: "",
PersonalEmail: "",
Phone: w.Phone,
PhotoURL: "",
RecruitingStatus: "",
Ref: "",
ReportsToID: "",
Salutation: "",
Status: "",
TenantID: "",
Title: w.Title,
Type: "",
},
APIKey: w.APIKey,
SagaID: w.SagaID,
SagaType: w.SagaType,
}).Get(ctx, nil)
if err != nil {
return err
}
err = workflow.ExecuteActivity(ctx,
StoreAccountActivity,
&app.AccountActivityWrapper{
Obj: crm_models.Account{
AccountNumber: "",
AccountSource: "",
Active: false,
AdministrativeLevel: "",
Amount: 0,
AmountInvoiced: 0,
AmountPaid: 0,
AnnualRevenue: 0,
Balance: 0,
BillingAddress: &crm_models.Address{City: w.BillingCity, Street: w.BillingStreet, State: w.BillingState, PostalCode: w.BillingPostalCode},
BillingContactID: "",
BillingPreference: "",
BusinessAddress: &crm_models.Address{},
CannabisCustomer: false,
ChannelProgramLevelName: "",
ChannelProgramName: "",
ClientEndDate: "",
ClientStartDate: "",
CompanyID: "",
CoordinateID: "",
CustomerID: "",
CustomerPriority: "",
DBA: "",
DUNSNumber: "",
DandBCompanyID: "",
DefaultAddress: &crm_models.Address{},
DefaultBackendID: "",
DefaultDeliveryContactID: "",
DefaultEndUserID: "",
Description: w.Description,
EIN: "",
Email: w.Email,
EnrollmentStatus: "",
Fax: "",
ISPCustomer: false,
Industry: "",
IsCustomerPortal: false,
IsPartner: false,
MSPCustomer: false,
NAICSCode: "",
NAICSDesc: "",
Name: w.AccountName,
NumberOfEmployees: 0,
NumberOfLocations: 0,
OpenCharges: 0,
OrderContactID: "",
OrderEmail: "",
OwnerID: "",
Ownership: "",
ParentFK: "",
ParentID: "",
Phone: "",
PlaceID: "",
PreparerID: "",
Rating: "",
RatingEngineID: "",
Ref: "",
RevenueBase: 0,
RevenueNet: 0,
RevenueNotTaxable: 0,
SIC: "",
SICDesc: "",
ShippingAddress: &crm_models.Address{},
ShippingCensusTract: "",
ShippingConactID: "",
ShippingCounty: "",
Site: "",
Status: "",
TaxExemption: "",
TaxOnTax: 0,
TelecomCustomer: false,
TenantID: "",
TickerSymbol: "",
TradeStyle: "",
Type: "",
UnappliedPayments: 0,
UnitBase: 0,
UpsellOpportunity: "",
WHMCSClientID: 0,
Website: "",
XeroContactID: "",
YearStarted: "",
},
APIKey: w.APIKey,
SagaID: w.SagaID,
SagaType: w.SagaType,
}).Get(ctx, nil)
if err != nil {
return err
}
err = workflow.ExecuteActivity(ctx,
StorePaymentMethodActivity,
&app.PaymentMethodActivityWrapper{
Obj: ops_models.PaymentMethod{
AccountID: "todo fix this",
AchAccountType: "",
AchBankAccount: "",
AchRouting: "",
Active: false,
Autopay: false,
BankName: "",
BillingContactID: "",
CCnumber: "",
CCtype: "",
CompanyID: "",
ContractID: "",
CreatedByID: "",
CreatedDate: "",
Default: false,
ExpirationDate: "",
ExpirationMonth: "",
ExpirationYear: "",
Gateway: "",
GatewayKey: "",
LastModifiedByID: "",
LastModifiedDate: "",
Nickname: "",
RecordType: "",
Ref: "",
TenantID: "",
},
APIKey: w.APIKey,
SagaID: w.SagaID,
SagaType: w.SagaType,
}).Get(ctx, nil)
if err != nil {
return err
}
err = workflow.ExecuteActivity(ctx,
NotifyContactActivity,
&app.ContactActivityWrapper{
Obj: crm_models.Contact{
Description: w.Description,
Email: w.Email,
FirstName: w.FirstName,
LastName: w.LastName,
MobilePhone: w.MobilePhone,
Name: w.Name,
Phone: w.Phone,
Title: w.Title,
},
APIKey: w.APIKey,
SagaID: w.SagaID,
SagaType: w.SagaType,
}).Get(ctx, nil)
if err != nil {
return err
}
err = workflow.ExecuteActivity(ctx, NotifyLeadActivity, w).Get(ctx, nil)
if err != nil {
return err
}
return nil
}