amocrm/internal/tools/construct.go

138 lines
3.9 KiB
Go
Raw Normal View History

2024-04-17 12:21:06 +00:00
package tools
import (
"amocrm/internal/models"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
2024-05-05 12:22:54 +00:00
"time"
2024-04-17 12:21:06 +00:00
)
func ToPipeline(amoPipelines []models.Pipeline) []model.Pipeline {
var pipelines []model.Pipeline
for _, p := range amoPipelines {
pipeline := model.Pipeline{
2024-04-18 11:13:03 +00:00
Amoid: int32(p.ID),
2024-04-17 12:21:06 +00:00
Name: p.Name,
Isarchive: p.IsArchive,
2024-04-18 11:13:03 +00:00
AccountID: int32(p.AccountID),
2024-04-17 12:21:06 +00:00
}
pipelines = append(pipelines, pipeline)
}
return pipelines
}
func ToStep(amoStatuses []models.Statuses) []model.Step {
var steps []model.Step
for _, s := range amoStatuses {
step := model.Step{
2024-04-18 11:13:03 +00:00
Amoid: int32(s.ID),
2024-04-17 12:21:06 +00:00
Name: s.Name,
2024-04-18 11:13:03 +00:00
Pipelineid: int32(s.PipelineID),
2024-04-17 12:21:06 +00:00
Color: s.Color,
2024-04-18 11:13:03 +00:00
Accountid: int32(s.AccountID),
2024-04-17 12:21:06 +00:00
}
steps = append(steps, step)
}
return steps
}
2024-04-18 11:13:03 +00:00
func ToTag(amoTag []models.Tag, entity model.EntityType) []model.Tag {
2024-04-17 12:21:06 +00:00
var tags []model.Tag
for _, t := range amoTag {
tag := model.Tag{
2024-04-18 11:13:03 +00:00
Amoid: int32(t.ID),
Entity: entity,
Name: t.Name,
Color: t.Color,
2024-04-17 12:21:06 +00:00
}
tags = append(tags, tag)
}
return tags
}
2024-04-18 11:13:03 +00:00
func ToField(amoField []models.CustomField, entity model.EntityType) []model.Field {
2024-04-17 12:21:06 +00:00
var fields []model.Field
for _, f := range amoField {
field := model.Field{
2024-04-18 11:13:03 +00:00
Amoid: int32(f.ID),
Code: f.Code,
Name: f.Name,
Entity: entity,
2024-04-28 13:12:25 +00:00
Type: model.FieldType(f.Type),
2024-04-17 12:21:06 +00:00
}
fields = append(fields, field)
}
return fields
}
2024-05-04 18:38:36 +00:00
2024-05-05 12:22:54 +00:00
// todo Для добавляемых сущностей (сделка, контакт, компания), можно передать не более 40 значений дополнительных полей.
func ConstructField(allAnswers []model.ResultAnswer, result model.AmoUsersTrueResults) ([]models.FieldsValues, []models.Contact, []models.Company) {
entityFieldsMap := make(map[model.EntityType]map[int][]models.Values)
entityFieldsMap[model.LeadsType] = make(map[int][]models.Values)
entityFieldsMap[model.ContactsType] = make(map[int][]models.Values)
entityFieldsMap[model.CompaniesType] = make(map[int][]models.Values)
entityFieldsMap[model.CustomersType] = make(map[int][]models.Values)
2024-05-04 18:38:36 +00:00
2024-05-05 12:22:54 +00:00
entityRules := make(map[model.EntityType][]model.FieldRule)
entityRules[model.LeadsType] = result.FieldsRule.Lead
entityRules[model.ContactsType] = result.FieldsRule.Contact
entityRules[model.CompaniesType] = result.FieldsRule.Company
entityRules[model.CustomersType] = result.FieldsRule.Customer
2024-05-04 18:38:36 +00:00
2024-05-05 12:22:54 +00:00
for entityType, ruleList := range entityRules {
for _, rule := range ruleList {
2024-05-04 18:38:36 +00:00
for _, data := range allAnswers {
if fieldID, ok := rule.Questionid[int(data.QuestionID)]; ok {
2024-05-05 12:22:54 +00:00
values := entityFieldsMap[entityType][fieldID]
2024-05-04 18:38:36 +00:00
values = append(values, models.Values{Value: data.Content})
2024-05-05 12:22:54 +00:00
entityFieldsMap[entityType][fieldID] = values
2024-05-04 18:38:36 +00:00
}
}
}
}
2024-05-05 12:22:54 +00:00
var leadFields []models.FieldsValues
var contactFields []models.FieldsValues
var companyFields []models.FieldsValues
var customerFields []models.FieldsValues
2024-05-04 18:38:36 +00:00
2024-05-05 12:22:54 +00:00
for entityType, fieldMap := range entityFieldsMap {
for fieldID, values := range fieldMap {
field := models.FieldsValues{
FieldID: fieldID,
Values: values,
}
switch entityType {
case model.LeadsType:
leadFields = append(leadFields, field)
case model.ContactsType:
contactFields = append(contactFields, field)
case model.CompaniesType:
companyFields = append(companyFields, field)
case model.CustomersType:
customerFields = append(customerFields, field)
2024-05-04 18:38:36 +00:00
}
}
}
2024-05-05 12:22:54 +00:00
return leadFields, []models.Contact{
{
Name: result.PerformerName,
ResponsibleUserID: result.PerformerID,
2024-05-05 16:06:49 +00:00
CreatedBy: 0,
UpdatedBy: 0,
CreatedAt: time.Now().Unix(),
2024-05-05 12:22:54 +00:00
CustomFieldsValues: contactFields,
},
}, []models.Company{
{
Name: "OOO PENA CO",
ResponsibleUserID: result.PerformerID,
CreatedBy: 0,
UpdatedBy: 0,
CreatedAt: time.Now().Unix(),
CustomFieldsValues: companyFields,
},
2024-05-04 18:38:36 +00:00
}
}