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,
|
|
|
|
CreatedAt: time.Now().Unix(),
|
|
|
|
UpdatedBy: 0,
|
|
|
|
ResponsibleUserID: result.PerformerID,
|
|
|
|
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
|
|
|
}
|
|
|
|
}
|