87 lines
5.1 KiB
Go
87 lines
5.1 KiB
Go
|
package models
|
|||
|
|
|||
|
import (
|
|||
|
"reflect"
|
|||
|
)
|
|||
|
|
|||
|
type CreatingDealReq struct {
|
|||
|
Fields CreateDealFields `json:"fields"`
|
|||
|
//Params struct {
|
|||
|
// RegisterSonetEvent string `json:"REGISTER_SONET_EVENT"` // Зарегистрировать ли событие добавления сделки в живой ленте. Возможные значения: Y/N def - Y
|
|||
|
//} `json:"params"`
|
|||
|
}
|
|||
|
|
|||
|
type CreateDealFields struct {
|
|||
|
Title string `json:"TITLE"` // название
|
|||
|
TypeID string `json:"TYPE_ID"` // шаг сделки только с "ENTITY_ID":"DEAL_TYPE","STATUS_ID":"SALE"
|
|||
|
StageID string `json:"STAGE_ID"` // стадия сделки, шаг "ENTITY_ID":"DEAL_STAGE","STATUS_ID":"NEW"
|
|||
|
CompanyID int32 `json:"COMPANY_ID"` // id компании
|
|||
|
ContactIDs []int32 `json:"CONTACT_IDS"` // id контакта
|
|||
|
Opened string `json:"OPENED"` // открыта или нет Y/N
|
|||
|
AssignedByID int32 `json:"ASSIGNED_BY_ID"` // ответсвенный
|
|||
|
CategoryID int32 `json:"CATEGORY_ID"` // воронка id воронки
|
|||
|
SourceID string `json:"SOURCE_ID"` // тип источника, шаг "ENTITY_ID":"SOURCE","STATUS_ID":"CALL"
|
|||
|
UtmSource string `json:"UTM_SOURCE"` // Рекламная система (Google-Adwords и другие)
|
|||
|
UtmMedium string `json:"UTM_MEDIUM"` // Тип трафика. Возможные значения:CPC — объявления, CPM — баннеры
|
|||
|
UtmCampaign string `json:"UTM_CAMPAIGN"` // Обозначение рекламной кампании
|
|||
|
UtmContent string `json:"UTM_CONTENT"` // Содержание кампании. Например, для контекстных объявлений
|
|||
|
UtmTerm string `json:"UTM_TERM"` // Условие поиска кампании. Например, ключевые слова контекстной рекламы
|
|||
|
|
|||
|
// todo умаю пока не нужны
|
|||
|
//IsRecurring string `json:"IS_RECURRING"` // Является ли сделка регулярной (Y/N)
|
|||
|
//IsReturnCustomer string `json:"IS_RETURN_CUSTOMER"` // Является ли сделка повторной (Y/N)
|
|||
|
//IsRepeatedApproach string `json:"IS_REPEATED_APPROACH"` // Является ли сделка повторным обращением (Y/N)
|
|||
|
//Probability int `json:"PROBABILITY"` // Вероятность успеха сделки, %
|
|||
|
//CurrencyID string `json:"CURRENCY_ID"` // Идентификатор валюты сделки
|
|||
|
//Opportunity float64 `json:"OPPORTUNITY"` // Сумма сделки
|
|||
|
//IsManualOpportunity string `json:"IS_MANUAL_OPPORTUNITY"` // Включен ли ручной расчет суммы (Y/N)
|
|||
|
//TaxValue float64 `json:"TAX_VALUE"` // Сумма налога
|
|||
|
//BeginDate string `json:"BEGINDATE"` // Дата начала сделки
|
|||
|
//CloseDate string `json:"CLOSEDATE"` // Дата завершения сделки
|
|||
|
//Closed string `json:"CLOSED"` // Сделка закрыта (Y/N)
|
|||
|
//Comments string `json:"COMMENTS"` // Комментарии к сделке
|
|||
|
//SourceDescription string `json:"SOURCE_DESCRIPTION"` // Описание источника
|
|||
|
//AdditionalInfo string `json:"ADDITIONAL_INFO"` // Дополнительная информация
|
|||
|
//LocationID string `json:"LOCATION_ID"` // Местоположение клиента
|
|||
|
//OriginatorID string `json:"ORIGINATOR_ID"` // Идентификатор источника данных
|
|||
|
//OriginID string `json:"ORIGIN_ID"` // Идентификатор элемента в источнике данных
|
|||
|
//Trace string `json:"TRACE"` // Информация для сквозной аналитики
|
|||
|
//UfCrmCustomField []string `json:"UF_CRM_..."` // Пользовательские поля CRM
|
|||
|
//ParentID string `json:"PARENT_ID_..."` // Поля связей со смарт-процессами
|
|||
|
}
|
|||
|
|
|||
|
func (c *CreatingDealReq) FormattingToMap(fieldAnswer map[string]string) map[string]map[string]interface{} {
|
|||
|
resultFields := make(map[string]interface{})
|
|||
|
result := make(map[string]map[string]interface{})
|
|||
|
|
|||
|
fields := reflect.ValueOf(c.Fields)
|
|||
|
fieldType := reflect.TypeOf(c.Fields)
|
|||
|
|
|||
|
for i := 0; i < fields.NumField(); i++ {
|
|||
|
field := fields.Field(i)
|
|||
|
fieldName := fieldType.Field(i).Tag.Get("json")
|
|||
|
|
|||
|
switch field.Kind() {
|
|||
|
case reflect.String:
|
|||
|
resultFields[fieldName] = field.String()
|
|||
|
case reflect.Int32, reflect.Int:
|
|||
|
resultFields[fieldName] = field.Int()
|
|||
|
case reflect.Slice:
|
|||
|
if field.Type().Elem().Kind() == reflect.Int32 {
|
|||
|
resultFields[fieldName] = field.Interface().([]int32)
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
for key, value := range fieldAnswer {
|
|||
|
resultFields[key] = value
|
|||
|
}
|
|||
|
result["fields"] = resultFields
|
|||
|
|
|||
|
return result
|
|||
|
}
|
|||
|
|
|||
|
type CreatingDealResp struct {
|
|||
|
ID int32 `json:"result"`
|
|||
|
}
|