138 lines
4.2 KiB
Go
138 lines
4.2 KiB
Go
package tools
|
||
|
||
import (
|
||
"amocrm/internal/models"
|
||
"fmt"
|
||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||
"strings"
|
||
)
|
||
|
||
//func ToCreatedUpdate(utms []model.UTM, fields []model.Field) ([]models.AddLeadsFields, []int32) {
|
||
// var toCreated []models.AddLeadsFields
|
||
// var toUpdate []int32
|
||
// for _, utm := range utms {
|
||
// matched := false
|
||
// for _, field := range fields {
|
||
// if utm.Name == field.Name {
|
||
// toUpdate = append(toUpdate, int32(utm.ID))
|
||
// matched = true
|
||
// break
|
||
// }
|
||
// }
|
||
// if !matched {
|
||
// toCreated = append(toCreated, models.AddLeadsFields{Type: model.TypeAmoText, Name: utm.Name})
|
||
// }
|
||
// }
|
||
// return toCreated, toUpdate
|
||
//}
|
||
//
|
||
//func MatchingUTMs(utms []model.UTM, fields []models.CustomField) []model.UTM {
|
||
// var forUpdate []model.UTM
|
||
// for _, utm := range utms {
|
||
// for _, field := range fields {
|
||
// if utm.Name == field.Name {
|
||
// updUtm := model.UTM{
|
||
// ID: utm.ID,
|
||
// Amofieldid: int32(field.ID),
|
||
// Quizid: utm.Quizid,
|
||
// Accountid: utm.Accountid,
|
||
// Name: field.Name,
|
||
// }
|
||
// forUpdate = append(forUpdate, updUtm)
|
||
// }
|
||
// }
|
||
// }
|
||
//
|
||
// return forUpdate
|
||
//}
|
||
|
||
type ToUpdate struct {
|
||
FieldID int
|
||
Entity model.EntityType
|
||
}
|
||
|
||
func ToCreatedUpdateQuestionRules(questionsTypeMap map[model.EntityType][]model.Question, currentFields []model.Field) (map[model.EntityType][]models.AddLeadsFields, map[int]ToUpdate) {
|
||
toUpdate := make(map[int]ToUpdate) // на обновление ключ id вопроса значение id кастомного поля для тех у кого имя совпадает
|
||
toCreated := make(map[model.EntityType][]models.AddLeadsFields)
|
||
for entity, questions := range questionsTypeMap {
|
||
for _, question := range questions {
|
||
// если заголоввок пустой у вопроса делаем ему заголовок чтоб в амо легли филды нормально
|
||
title := strings.ReplaceAll(question.Title, " ", "")
|
||
if title == "" {
|
||
title = fmt.Sprintf("Вопрос №%d", question.Page)
|
||
}
|
||
matched := false
|
||
for _, field := range currentFields {
|
||
fieldName := strings.ReplaceAll(field.Name, " ", "")
|
||
if title == fieldName && entity == field.Entity {
|
||
toUpdate[int(question.Id)] = ToUpdate{
|
||
FieldID: int(field.Amoid),
|
||
Entity: entity,
|
||
}
|
||
matched = true
|
||
break
|
||
}
|
||
}
|
||
|
||
if !matched {
|
||
//Type: model.TypeMapping[question.Type]
|
||
fieldType := model.TypeAmoTextarea
|
||
if question.Type == model.TypeFile {
|
||
fieldType = model.TypeAmoFile
|
||
}
|
||
toCreated[entity] = append(toCreated[entity], models.AddLeadsFields{Type: fieldType, Name: question.Title})
|
||
}
|
||
}
|
||
}
|
||
|
||
return toCreated, toUpdate
|
||
}
|
||
|
||
func ToQuestionIDs(rules []model.FieldRule) []int32 {
|
||
var ids []int32
|
||
for _, rule := range rules {
|
||
for queID := range rule.Questionid {
|
||
ids = append(ids, int32(queID))
|
||
}
|
||
}
|
||
return ids
|
||
}
|
||
|
||
func ForContactRules(quizConfig model.QuizContact, currentFields []model.Field) ([]models.AddLeadsFields, map[string]int) {
|
||
var contactFieldsArr []model.ContactQuizConfig
|
||
contactFieldTypes := map[model.ContactQuizConfig]bool{
|
||
model.TypeContactName: quizConfig.FormContact.Fields.Name.Used,
|
||
model.TypeContactEmail: quizConfig.FormContact.Fields.Email.Used,
|
||
model.TypeContactPhone: quizConfig.FormContact.Fields.Phone.Used,
|
||
model.TypeContactText: quizConfig.FormContact.Fields.Text.Used,
|
||
model.TypeContactAddress: quizConfig.FormContact.Fields.Address.Used,
|
||
}
|
||
|
||
for fieldType, used := range contactFieldTypes {
|
||
if used {
|
||
contactFieldsArr = append(contactFieldsArr, fieldType)
|
||
}
|
||
}
|
||
|
||
forAdding := make(map[string]int)
|
||
var toCreated []models.AddLeadsFields
|
||
for _, contactField := range contactFieldsArr {
|
||
matched := false
|
||
for _, field := range currentFields {
|
||
if field.Name == string(contactField) && field.Entity == model.ContactsType {
|
||
matched = true
|
||
forAdding[string(contactField)] = int(field.Amoid)
|
||
break
|
||
}
|
||
}
|
||
|
||
if !matched {
|
||
//Type: model.TypeMapping[question.Type]
|
||
toCreated = append(toCreated, models.AddLeadsFields{Type: model.TypeAmoText, Name: string(contactField)})
|
||
forAdding[string(contactField)] = 0
|
||
}
|
||
}
|
||
|
||
return toCreated, forAdding
|
||
}
|