diff --git a/client_test.go b/client_test.go index 0f95ce8..e9ac0cc 100644 --- a/client_test.go +++ b/client_test.go @@ -1266,7 +1266,10 @@ func TestClient_CorporateCustomer(t *testing.T) { "averageSumm": 0, "ordersCount": 0, "costSumm": 0, - "customFields": [], + "customFields": { + "animal": "cat", + "animal_multiselect": ["cat", "dog"] + }, "personalDiscount": 10, "mainCompany": { "id": 26, @@ -1482,7 +1485,13 @@ func TestClient_CorporateCustomerCompanies(t *testing.T) { "averageSumm": 0, "ordersCount": 0, "costSumm": 0, - "customFields": [] + "customFields": { + "field_multiselect": ["test1", "test2"], + "field_select": "test3", + "field_string": "test_string", + "field_float": 4.56, + "field_integer": 789 + } } ] } diff --git a/testutils.go b/testutils.go index eec7d68..6566bae 100644 --- a/testutils.go +++ b/testutils.go @@ -85,7 +85,7 @@ func getLoyaltyAccountCreate() SerializedCreateLoyaltyAccount { return SerializedCreateLoyaltyAccount{ SerializedBaseLoyaltyAccount: SerializedBaseLoyaltyAccount{ PhoneNumber: "89151005004", - CustomFields: []string{"dog"}, + CustomFields: []interface{}{"dog"}, }, Customer: SerializedEntityCustomer{ ID: 123, @@ -103,7 +103,9 @@ func getLoyaltyAccountCreateResponse() CreateLoyaltyAccountResponse { LoyaltyLevel: LoyaltyLevel{}, CreatedAt: "2022-11-24 12:39:37", ActivatedAt: "2022-11-24 12:39:37", - CustomFields: []string{"dog"}, + CustomFields: map[string]interface{}{ + "animal": "dog", + }, }, } } @@ -118,7 +120,9 @@ func getLoyaltyAccountEditResponse() EditLoyaltyAccountResponse { LoyaltyLevel: LoyaltyLevel{}, CreatedAt: "2022-11-24 12:39:37", ActivatedAt: "2022-11-24 12:39:37", - CustomFields: []string{"dog"}, + CustomFields: map[string]interface{}{ + "animal": "dog", + }, }, } } @@ -134,7 +138,7 @@ func getLoyaltyAccountResponse() string { }, "customer": { "id": 123, - "customFields": [], + "customFields": {}, "firstName": "Руслан1", "lastName": "Ефанов", "patronymic": "" @@ -154,7 +158,12 @@ func getLoyaltyAccountResponse() string { "createdAt": "2022-11-24 12:39:37", "activatedAt": "2022-11-24 12:39:37", "status": "activated", - "customFields": [] + "customFields": { + "custom_multiselect": ["test1", "test3"], + "custom_select": "test2", + "custom_integer": 456, + "custom_float": 8.43 + } } }` } diff --git a/types.go b/types.go index b3c009e..fc2ef16 100644 --- a/types.go +++ b/types.go @@ -122,41 +122,41 @@ Customer related types // Customer type. type Customer struct { - ID int `json:"id,omitempty"` - ExternalID string `json:"externalId,omitempty"` - FirstName string `json:"firstName,omitempty"` - LastName string `json:"lastName,omitempty"` - Patronymic string `json:"patronymic,omitempty"` - Sex string `json:"sex,omitempty"` - Email string `json:"email,omitempty"` - Phones []Phone `json:"phones,omitempty"` - Address *Address `json:"address,omitempty"` - CreatedAt string `json:"createdAt,omitempty"` - Birthday string `json:"birthday,omitempty"` - ManagerID int `json:"managerId,omitempty"` - Vip bool `json:"vip,omitempty"` - Bad bool `json:"bad,omitempty"` - Site string `json:"site,omitempty"` - Source *Source `json:"source,omitempty"` - Contragent *Contragent `json:"contragent,omitempty"` - PersonalDiscount float32 `json:"personalDiscount,omitempty"` - CumulativeDiscount float32 `json:"cumulativeDiscount,omitempty"` - DiscountCardNumber string `json:"discountCardNumber,omitempty"` - EmailMarketingUnsubscribedAt string `json:"emailMarketingUnsubscribedAt,omitempty"` - AvgMarginSumm float32 `json:"avgMarginSumm,omitempty"` - MarginSumm float32 `json:"marginSumm,omitempty"` - TotalSumm float32 `json:"totalSumm,omitempty"` - AverageSumm float32 `json:"averageSumm,omitempty"` - OrdersCount int `json:"ordersCount,omitempty"` - CostSumm float32 `json:"costSumm,omitempty"` - MaturationTime int `json:"maturationTime,omitempty"` - FirstClientID string `json:"firstClientId,omitempty"` - LastClientID string `json:"lastClientId,omitempty"` - BrowserID string `json:"browserId,omitempty"` - MgCustomerID string `json:"mgCustomerId,omitempty"` - PhotoURL string `json:"photoUrl,omitempty"` - CustomFields StringMap `json:"customFields,omitempty"` - Tags []Tag `json:"tags,omitempty"` + ID int `json:"id,omitempty"` + ExternalID string `json:"externalId,omitempty"` + FirstName string `json:"firstName,omitempty"` + LastName string `json:"lastName,omitempty"` + Patronymic string `json:"patronymic,omitempty"` + Sex string `json:"sex,omitempty"` + Email string `json:"email,omitempty"` + Phones []Phone `json:"phones,omitempty"` + Address *Address `json:"address,omitempty"` + CreatedAt string `json:"createdAt,omitempty"` + Birthday string `json:"birthday,omitempty"` + ManagerID int `json:"managerId,omitempty"` + Vip bool `json:"vip,omitempty"` + Bad bool `json:"bad,omitempty"` + Site string `json:"site,omitempty"` + Source *Source `json:"source,omitempty"` + Contragent *Contragent `json:"contragent,omitempty"` + PersonalDiscount float32 `json:"personalDiscount,omitempty"` + CumulativeDiscount float32 `json:"cumulativeDiscount,omitempty"` + DiscountCardNumber string `json:"discountCardNumber,omitempty"` + EmailMarketingUnsubscribedAt string `json:"emailMarketingUnsubscribedAt,omitempty"` + AvgMarginSumm float32 `json:"avgMarginSumm,omitempty"` + MarginSumm float32 `json:"marginSumm,omitempty"` + TotalSumm float32 `json:"totalSumm,omitempty"` + AverageSumm float32 `json:"averageSumm,omitempty"` + OrdersCount int `json:"ordersCount,omitempty"` + CostSumm float32 `json:"costSumm,omitempty"` + MaturationTime int `json:"maturationTime,omitempty"` + FirstClientID string `json:"firstClientId,omitempty"` + LastClientID string `json:"lastClientId,omitempty"` + BrowserID string `json:"browserId,omitempty"` + MgCustomerID string `json:"mgCustomerId,omitempty"` + PhotoURL string `json:"photoUrl,omitempty"` + CustomFields map[string]interface{} `json:"customFields,omitempty"` + Tags []Tag `json:"tags,omitempty"` } // CorporateCustomer type. @@ -167,7 +167,7 @@ type CorporateCustomer struct { CreatedAt string `json:"createdAt,omitempty"` Vip bool `json:"vip,omitempty"` Bad bool `json:"bad,omitempty"` - CustomFields StringMap `json:"customFields,omitempty"` + CustomFields map[string]interface{} `json:"customFields,omitempty"` PersonalDiscount float32 `json:"personalDiscount,omitempty"` DiscountCardNumber string `json:"discountCardNumber,omitempty"` ManagerID int `json:"managerId,omitempty"` @@ -218,17 +218,17 @@ type CorporateCustomerContactCustomer struct { } type Company struct { - ID int `json:"id,omitempty"` - IsMain bool `json:"isMain,omitempty"` - ExternalID string `json:"externalId,omitempty"` - Active bool `json:"active,omitempty"` - Name string `json:"name,omitempty"` - Brand string `json:"brand,omitempty"` - Site string `json:"site,omitempty"` - CreatedAt string `json:"createdAt,omitempty"` - Contragent *Contragent `json:"contragent,omitempty"` - Address *IdentifiersPair `json:"address,omitempty"` - CustomFields StringMap `json:"customFields,omitempty"` + ID int `json:"id,omitempty"` + IsMain bool `json:"isMain,omitempty"` + ExternalID string `json:"externalId,omitempty"` + Active bool `json:"active,omitempty"` + Name string `json:"name,omitempty"` + Brand string `json:"brand,omitempty"` + Site string `json:"site,omitempty"` + CreatedAt string `json:"createdAt,omitempty"` + Contragent *Contragent `json:"contragent,omitempty"` + Address *IdentifiersPair `json:"address,omitempty"` + CustomFields map[string]interface{} `json:"customFields,omitempty"` } // CorporateCustomerNote type. @@ -291,57 +291,57 @@ type Properties map[string]Property // Order type. type Order struct { - ID int `json:"id,omitempty"` - ExternalID string `json:"externalId,omitempty"` - Number string `json:"number,omitempty"` - FirstName string `json:"firstName,omitempty"` - LastName string `json:"lastName,omitempty"` - Patronymic string `json:"patronymic,omitempty"` - Email string `json:"email,omitempty"` - Phone string `json:"phone,omitempty"` - AdditionalPhone string `json:"additionalPhone,omitempty"` - CreatedAt string `json:"createdAt,omitempty"` - StatusUpdatedAt string `json:"statusUpdatedAt,omitempty"` - ManagerID int `json:"managerId,omitempty"` - Mark int `json:"mark,omitempty"` - Call bool `json:"call,omitempty"` - Expired bool `json:"expired,omitempty"` - FromAPI bool `json:"fromApi,omitempty"` - MarkDatetime string `json:"markDatetime,omitempty"` - CustomerComment string `json:"customerComment,omitempty"` - ManagerComment string `json:"managerComment,omitempty"` - Status string `json:"status,omitempty"` - StatusComment string `json:"statusComment,omitempty"` - FullPaidAt string `json:"fullPaidAt,omitempty"` - Site string `json:"site,omitempty"` - OrderType string `json:"orderType,omitempty"` - OrderMethod string `json:"orderMethod,omitempty"` - CountryIso string `json:"countryIso,omitempty"` - Summ float32 `json:"summ,omitempty"` - TotalSumm float32 `json:"totalSumm,omitempty"` - PrepaySum float32 `json:"prepaySum,omitempty"` - PurchaseSumm float32 `json:"purchaseSumm,omitempty"` - DiscountManualAmount float32 `json:"discountManualAmount,omitempty"` - DiscountManualPercent float32 `json:"discountManualPercent,omitempty"` - Weight float32 `json:"weight,omitempty"` - Length int `json:"length,omitempty"` - Width int `json:"width,omitempty"` - Height int `json:"height,omitempty"` - ShipmentStore string `json:"shipmentStore,omitempty"` - ShipmentDate string `json:"shipmentDate,omitempty"` - ClientID string `json:"clientId,omitempty"` - Shipped bool `json:"shipped,omitempty"` - UploadedToExternalStoreSystem bool `json:"uploadedToExternalStoreSystem,omitempty"` - Source *Source `json:"source,omitempty"` - Contragent *Contragent `json:"contragent,omitempty"` - Customer *Customer `json:"customer,omitempty"` - Delivery *OrderDelivery `json:"delivery,omitempty"` - Marketplace *OrderMarketplace `json:"marketplace,omitempty"` - Items []OrderItem `json:"items,omitempty"` - CustomFields StringMap `json:"customFields,omitempty"` - Payments OrderPayments `json:"payments,omitempty"` - ApplyRound *bool `json:"applyRound,omitempty"` - PrivilegeType string `json:"privilegeType,omitempty"` + ID int `json:"id,omitempty"` + ExternalID string `json:"externalId,omitempty"` + Number string `json:"number,omitempty"` + FirstName string `json:"firstName,omitempty"` + LastName string `json:"lastName,omitempty"` + Patronymic string `json:"patronymic,omitempty"` + Email string `json:"email,omitempty"` + Phone string `json:"phone,omitempty"` + AdditionalPhone string `json:"additionalPhone,omitempty"` + CreatedAt string `json:"createdAt,omitempty"` + StatusUpdatedAt string `json:"statusUpdatedAt,omitempty"` + ManagerID int `json:"managerId,omitempty"` + Mark int `json:"mark,omitempty"` + Call bool `json:"call,omitempty"` + Expired bool `json:"expired,omitempty"` + FromAPI bool `json:"fromApi,omitempty"` + MarkDatetime string `json:"markDatetime,omitempty"` + CustomerComment string `json:"customerComment,omitempty"` + ManagerComment string `json:"managerComment,omitempty"` + Status string `json:"status,omitempty"` + StatusComment string `json:"statusComment,omitempty"` + FullPaidAt string `json:"fullPaidAt,omitempty"` + Site string `json:"site,omitempty"` + OrderType string `json:"orderType,omitempty"` + OrderMethod string `json:"orderMethod,omitempty"` + CountryIso string `json:"countryIso,omitempty"` + Summ float32 `json:"summ,omitempty"` + TotalSumm float32 `json:"totalSumm,omitempty"` + PrepaySum float32 `json:"prepaySum,omitempty"` + PurchaseSumm float32 `json:"purchaseSumm,omitempty"` + DiscountManualAmount float32 `json:"discountManualAmount,omitempty"` + DiscountManualPercent float32 `json:"discountManualPercent,omitempty"` + Weight float32 `json:"weight,omitempty"` + Length int `json:"length,omitempty"` + Width int `json:"width,omitempty"` + Height int `json:"height,omitempty"` + ShipmentStore string `json:"shipmentStore,omitempty"` + ShipmentDate string `json:"shipmentDate,omitempty"` + ClientID string `json:"clientId,omitempty"` + Shipped bool `json:"shipped,omitempty"` + UploadedToExternalStoreSystem bool `json:"uploadedToExternalStoreSystem,omitempty"` + Source *Source `json:"source,omitempty"` + Contragent *Contragent `json:"contragent,omitempty"` + Customer *Customer `json:"customer,omitempty"` + Delivery *OrderDelivery `json:"delivery,omitempty"` + Marketplace *OrderMarketplace `json:"marketplace,omitempty"` + Items []OrderItem `json:"items,omitempty"` + CustomFields map[string]interface{} `json:"customFields,omitempty"` + Payments OrderPayments `json:"payments,omitempty"` + ApplyRound *bool `json:"applyRound,omitempty"` + PrivilegeType string `json:"privilegeType,omitempty"` } // OrdersStatus type. @@ -732,9 +732,9 @@ type NonWorkingDays struct { } type SerializedBaseLoyaltyAccount struct { - PhoneNumber string `json:"phoneNumber,omitempty"` - CardNumber string `json:"cardNumber,omitempty"` - CustomFields []string `json:"customFields,omitempty"` + PhoneNumber string `json:"phoneNumber,omitempty"` + CardNumber string `json:"cardNumber,omitempty"` + CustomFields []interface{} `json:"customFields,omitempty"` } type SerializedCreateLoyaltyAccount struct { @@ -1240,11 +1240,13 @@ type CustomFields struct { InGroupActions bool `json:"inGroupActions,omitempty"` Type string `json:"type,omitempty"` Entity string `json:"entity,omitempty"` - Default string `json:"default,omitempty"` - Ordering int `json:"ordering,omitempty"` - DisplayArea string `json:"displayArea,omitempty"` - ViewMode string `json:"viewMode,omitempty"` - Dictionary string `json:"dictionary,omitempty"` + // Deprecated: Use DefaultTyped instead. + Default string `json:"default,omitempty"` + Ordering int `json:"ordering,omitempty"` + DisplayArea string `json:"displayArea,omitempty"` + ViewMode string `json:"viewMode,omitempty"` + Dictionary string `json:"dictionary,omitempty"` + DefaultTyped interface{} `json:"default_typed,omitempty"` } /** @@ -1330,22 +1332,22 @@ type DeliveryTypeInfo struct { // LoyaltyAccount type. type LoyaltyAccount struct { - Active bool `json:"active"` - ID int `json:"id"` - PhoneNumber string `json:"phoneNumber,omitempty"` - CardNumber string `json:"cardNumber,omitempty"` - Amount float64 `json:"amount,omitempty"` - LoyaltyLevel LoyaltyLevel `json:"level,omitempty"` - CreatedAt string `json:"createdAt,omitempty"` - ActivatedAt string `json:"activatedAt,omitempty"` - ConfirmedPhoneAt string `json:"confirmedPhoneAt,omitempty"` - LastCheckID int `json:"lastCheckId,omitempty"` - CustomFields []string `json:"customFields,omitempty"` - Loyalty Loyalty `json:"loyalty,omitempty"` - Customer Customer `json:"customer,omitempty"` - Status string `json:"status,omitempty"` - OrderSum float64 `json:"orderSum,omitempty"` - NextLevelSum float64 `json:"nextLevelSum,omitempty"` + Active bool `json:"active"` + ID int `json:"id"` + PhoneNumber string `json:"phoneNumber,omitempty"` + CardNumber string `json:"cardNumber,omitempty"` + Amount float64 `json:"amount,omitempty"` + LoyaltyLevel LoyaltyLevel `json:"level,omitempty"` + CreatedAt string `json:"createdAt,omitempty"` + ActivatedAt string `json:"activatedAt,omitempty"` + ConfirmedPhoneAt string `json:"confirmedPhoneAt,omitempty"` + LastCheckID int `json:"lastCheckId,omitempty"` + CustomFields map[string]interface{} `json:"customFields,omitempty"` + Loyalty Loyalty `json:"loyalty,omitempty"` + Customer Customer `json:"customer,omitempty"` + Status string `json:"status,omitempty"` + OrderSum float64 `json:"orderSum,omitempty"` + NextLevelSum float64 `json:"nextLevelSum,omitempty"` } // Loyalty type.