357 lines
8.3 KiB
Go
357 lines
8.3 KiB
Go
package ozon
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"time"
|
|
|
|
core "git.denco.store/fakz9/ozon-api-client"
|
|
)
|
|
|
|
type Quants struct {
|
|
client *core.Client
|
|
}
|
|
|
|
type ListQuantsParams struct {
|
|
// Cursor for the next data sample
|
|
Cursor string `json:"cursor"`
|
|
|
|
// Filter
|
|
Filter ListQuantsFilter `json:"filter"`
|
|
|
|
// Maximum number of values in the response
|
|
Limit int32 `json:"limit"`
|
|
|
|
// Parameter by which products will be sorted
|
|
Sort string `json:"sort"`
|
|
|
|
// Sorting direction
|
|
SortDir string `json:"sort_dir"`
|
|
}
|
|
|
|
type ListQuantsFilter struct {
|
|
// MOQ creation period
|
|
CreatedAt *ListQuantsFilterTime `json:"created_at"`
|
|
|
|
// Time for MOQ assembly
|
|
Cutoff *ListQuantsFilterTime `json:"cutoff"`
|
|
|
|
// Destination point identifier
|
|
DestinationPlaceId int64 `json:"destination_place_id"`
|
|
|
|
// MOQ inventory identifiers
|
|
InvQuantIds []string `json:"inv_quants_ids"`
|
|
|
|
// Product identifier in the seller's system
|
|
OfferId string `json:"offer_id"`
|
|
|
|
// Product name
|
|
SKUName string `json:"sku_name"`
|
|
|
|
// MOQ statuses
|
|
Statuses []string `json:"statuses"`
|
|
|
|
// Warehouse identifier
|
|
WarehouseId int64 `json:"warehouse_id"`
|
|
}
|
|
|
|
type ListQuantsFilterTime struct {
|
|
// Start date
|
|
From string `json:"from"`
|
|
|
|
// End date
|
|
To string `json:"to"`
|
|
}
|
|
|
|
type ListQuantsResponse struct {
|
|
core.CommonResponse
|
|
|
|
Result ListQuantsResult `json:"result"`
|
|
}
|
|
|
|
type ListQuantsResult struct {
|
|
// Cursor for the next data sample
|
|
Cursor string `json:"cursor"`
|
|
|
|
// Indication that the response returned only a part of characteristic values
|
|
HasNext bool `json:"has_next"`
|
|
|
|
// MOQs list
|
|
Quants []Quant `json:"quants"`
|
|
}
|
|
|
|
type Quant struct {
|
|
// List of available actions with MOQ
|
|
AvailableActions []string `json:"available_actions"`
|
|
|
|
// Date until which the leftover stock amount must be specified
|
|
AwaitingStockDueDate string `json:"awaiting_stock_due_date"`
|
|
|
|
// MOQ cancellation reason
|
|
CancelReason `json:"cancel_reason"`
|
|
|
|
// Seller company identifier
|
|
CompanyId int64 `json:"company_id"`
|
|
|
|
// MOQ creation date
|
|
CreatedAt string `json:"created_at"`
|
|
|
|
// Current number of shipments in the MOQ
|
|
CurrentPostingsCount int64 `json:"current_postings_count"`
|
|
|
|
// Time until which the MOQ must be assembled
|
|
Cutoff string `json:"cutoff"`
|
|
|
|
// Delivery method name
|
|
DeliveryMethod string `json:"delivery_method_name"`
|
|
|
|
// Destination point identifier
|
|
DestinationPlaceId int64 `json:"destination_place_id"`
|
|
|
|
// Destination point name
|
|
DestinationPlaceName string `json:"destination_place_name"`
|
|
|
|
// MOQ filling percentage
|
|
FillingPercent float32 `json:"filling_percent"`
|
|
|
|
// Date when the shipments start to get canceled if the MOQ is not reserved
|
|
FirstPostingCancellationDate string `json:"first_posting_cancellation_date"`
|
|
|
|
// MOQ identifier in Ozon system
|
|
Id int64 `json:"id"`
|
|
|
|
// MOQ inventory identifier
|
|
InvQuantId int64 `json:"inv_quant_id"`
|
|
|
|
// Date of the last MOQ status change
|
|
LastStatusChangeAt string `json:"last_status_change_at"`
|
|
|
|
// Product identifier in the seller's system
|
|
OfferId string `json:"offer_id"`
|
|
|
|
// Total cost of products in the MOQ
|
|
ProductsPrice float32 `json:"products_price"`
|
|
|
|
// Start date of MOQ filling
|
|
QuantumStartDate string `json:"quantum_start_date"`
|
|
|
|
// Product SKU
|
|
SKU int64 `json:"sku"`
|
|
|
|
// Product name
|
|
SKUName string `json:"sku_name"`
|
|
|
|
// MOQ statuses
|
|
Status string `json:"status"`
|
|
|
|
// Required number of products in the MOQ
|
|
TargetPostingsCount int64 `json:"target_postings_count"`
|
|
|
|
// Delivery service name
|
|
TPLProviderName string `json:"tpl_provider_name"`
|
|
|
|
// MOQ type: box or pallet
|
|
Type string `json:"type"`
|
|
|
|
// Seller warehouse identifier
|
|
WarehouseId int64 `json:"warehouse_id"`
|
|
|
|
// Seller warehouse name
|
|
WarehouseName string `json:"warehouse_name"`
|
|
}
|
|
|
|
type CancelReason struct {
|
|
// Identifier of MOQ cancellation reason
|
|
Id int64 `json:"cancel_reason_id"`
|
|
|
|
// Cancellation reason name
|
|
Name string `json:"cancel_reason_name"`
|
|
|
|
// Cancellation initiator
|
|
Responsible string `json:"responsible"`
|
|
}
|
|
|
|
// You can leave feedback on this method in the comments section to the discussion in the Ozon for dev community.
|
|
func (q Quants) List(ctx context.Context, params *ListQuantsParams) (*ListQuantsResponse, error) {
|
|
url := "/v1/quant/list"
|
|
|
|
resp := &ListQuantsResponse{}
|
|
|
|
response, err := q.client.Request(ctx, http.MethodPost, url, params, resp, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
response.CopyCommonResponse(&resp.CommonResponse)
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
type GetQuantParams struct {
|
|
// MOQ inventory identifier
|
|
QuantId int64 `json:"inv_quant_id"`
|
|
}
|
|
|
|
type GetQuantResponse struct {
|
|
core.CommonResponse
|
|
|
|
// MOQ information
|
|
Result []GetQuantResult `json:"result"`
|
|
}
|
|
|
|
type GetQuantResult struct {
|
|
// Available actions
|
|
AvailableActions []string `json:"available_actions"`
|
|
|
|
// Date until which the leftover stock amount must be specified
|
|
AwaitingStockDueDate time.Time `json:"awaiting_stock_due_date"`
|
|
|
|
// Shipment cancellation reason
|
|
CancelReason CancelReason `json:"cancel_reason"`
|
|
|
|
// Current number of shipments in the MOQ
|
|
CurrentPostingsCount int64 `json:"current_postings_count"`
|
|
|
|
// Time until which the MOQ must be assembled
|
|
Cutoff time.Time `json:"cutoff"`
|
|
|
|
// Delivery method name
|
|
DeliveryMethodName string `json:"delivery_method_name"`
|
|
|
|
// Destination point identifier
|
|
DestinationPlaceId int64 `json:"destination_place_id"`
|
|
|
|
// Destination point name
|
|
DestinationPlaceName string `json:"destination_place_name"`
|
|
|
|
// MOQ filling percentage
|
|
FillingPercent float32 `json:"filling_percent"`
|
|
|
|
// Date when the shipments start to get canceled if the MOQ isn't reserved
|
|
FirstPostingCancellationDate time.Time `json:"first_posting_cancellation_date"`
|
|
|
|
// MOQ identifier
|
|
Id int64 `json:"id"`
|
|
|
|
// MOQ inventory identifier
|
|
QuantId int64 `json:"inv_quant_id"`
|
|
|
|
// Product identifier in the seller's system
|
|
OfferId string `json:"offer_id"`
|
|
|
|
// Shipments
|
|
Postings []GetQuantResultPosting `json:"postings"`
|
|
|
|
// Link to product photo
|
|
ProductPictureURL string `json:"product_picture_url"`
|
|
|
|
// Total price of products in the MOQ
|
|
ProductsPrice float32 `json:"products_price"`
|
|
|
|
// Start date of MOQ filling
|
|
QuantumStartDate time.Time `json:"quantum_start_date"`
|
|
|
|
// Product identifier in the Ozon system, SKU
|
|
SKU int64 `json:"sku"`
|
|
|
|
// Product name
|
|
SKUName string `json:"sku_name"`
|
|
|
|
// MOQ statuses
|
|
Status string `json:"status"`
|
|
|
|
// Required number of products in the MOQ
|
|
TargetPostingsCount int64 `json:"target_postings_count"`
|
|
|
|
// Delivery service name
|
|
TPLProviderName string `json:"tpl_provider_name"`
|
|
|
|
// MOQ type: box or pallet
|
|
Type string `json:"type"`
|
|
|
|
// Warehouse identifier
|
|
WarehouseId int64 `json:"warehouse_id"`
|
|
|
|
// Warehouse name
|
|
WarehouseName string `json:"warehouse_name"`
|
|
}
|
|
|
|
type GetQuantResultPosting struct {
|
|
// Shipment cancellation reason
|
|
CancelReason CancelReason `json:"cancel_reason"`
|
|
|
|
// Shipment number
|
|
PostingNumber string `json:"posting_number"`
|
|
|
|
// Total price of products in the MOQ
|
|
ProductsPrice float32 `json:"products_price"`
|
|
|
|
// Status text
|
|
StatusAlias string `json:"status_alias"`
|
|
|
|
// Status identifier
|
|
StatusId int64 `json:"status_id"`
|
|
}
|
|
|
|
func (q Quants) Get(ctx context.Context, params *GetQuantParams) (*GetQuantResponse, error) {
|
|
url := "/v1/quant/get"
|
|
|
|
resp := &GetQuantResponse{}
|
|
|
|
response, err := q.client.Request(ctx, http.MethodPost, url, params, resp, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
response.CopyCommonResponse(&resp.CommonResponse)
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
type ShipQuantParams struct {
|
|
// MOQ inventory identifier
|
|
QuantId int64 `json:"quant_id"`
|
|
}
|
|
|
|
type ShipQuantResponse struct {
|
|
core.CommonResponse
|
|
}
|
|
|
|
func (q Quants) Ship(ctx context.Context, params *ShipQuantParams) (*ShipQuantResponse, error) {
|
|
url := "/v1/quant/ship"
|
|
|
|
resp := &ShipQuantResponse{}
|
|
|
|
response, err := q.client.Request(ctx, http.MethodPost, url, params, resp, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
response.CopyCommonResponse(&resp.CommonResponse)
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
type StatusQuantParams struct {
|
|
// MOQ inventory identifier
|
|
QuantId int64 `json:"inv_quant_id"`
|
|
}
|
|
|
|
type StatusQuantResponse struct {
|
|
core.CommonResponse
|
|
|
|
// MOQ statuses
|
|
Status string `json:"status"`
|
|
}
|
|
|
|
func (q Quants) Status(ctx context.Context, params *StatusQuantParams) (*StatusQuantResponse, error) {
|
|
url := "/v1/quant/ship"
|
|
|
|
resp := &StatusQuantResponse{}
|
|
|
|
response, err := q.client.Request(ctx, http.MethodPost, url, params, resp, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
response.CopyCommonResponse(&resp.CommonResponse)
|
|
|
|
return resp, nil
|
|
}
|