Files
rmser/internal/infrastructure/rms/dto.go
2025-12-11 05:20:53 +03:00

164 lines
7.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package rms
import (
"encoding/xml"
)
// --- JSON DTOs (V2 API) ---
type ProductDTO struct {
ID string `json:"id"`
ParentID *string `json:"parent"` // Может быть null
Name string `json:"name"`
Num string `json:"num"` // Артикул
Code string `json:"code"` // Код быстрого набора
Type string `json:"type"` // GOODS, DISH, PREPARED, etc.
UnitWeight float64 `json:"unitWeight"`
UnitCapacity float64 `json:"unitCapacity"`
MainUnit *string `json:"mainUnit"`
Containers []ContainerDTO `json:"containers"`
Deleted bool `json:"deleted"`
}
// GenericEntityDTO используется для простых справочников (MeasureUnit и др.)
type GenericEntityDTO struct {
ID string `json:"id"`
Name string `json:"name"`
Code string `json:"code"`
Deleted bool `json:"deleted"`
}
// ContainerDTO - фасовка из iiko
type ContainerDTO struct {
ID string `json:"id"`
Name string `json:"name"` // Название фасовки (напр. "Коробка")
Count float64 `json:"count"` // Сколько базовых единиц в фасовке
}
type GroupDTO struct {
ID string `json:"id"`
ParentID *string `json:"parent"`
Name string `json:"name"`
Num string `json:"num"`
Code string `json:"code"`
Description string `json:"description"`
Deleted bool `json:"deleted"`
}
type AssemblyChartsResponse struct {
AssemblyCharts []AssemblyChartDTO `json:"assemblyCharts"`
// preparedCharts и другие поля пока опускаем, если не нужны для базового импорта
}
type AssemblyChartDTO struct {
ID string `json:"id"`
AssembledProductID string `json:"assembledProductId"`
DateFrom string `json:"dateFrom"` // Format: "2018-01-29" (yyyy-MM-dd)
DateTo *string `json:"dateTo"` // Nullable
Items []AssemblyItemDTO `json:"items"`
}
type AssemblyItemDTO struct {
ID string `json:"id"` // Добавили поле ID строки техкарты
ProductID string `json:"productId"`
AmountIn float64 `json:"amountIn"`
AmountOut float64 `json:"amountOut"`
}
// --- XML DTOs (Legacy API) ---
type IncomingInvoiceListXML struct {
XMLName xml.Name `xml:"incomingInvoiceDtoes"`
Documents []IncomingInvoiceXML `xml:"document"`
}
type IncomingInvoiceXML struct {
ID string `xml:"id"`
DocumentNumber string `xml:"documentNumber"`
DateIncoming string `xml:"dateIncoming"` // Format: yyyy-MM-ddTHH:mm:ss
Status string `xml:"status"` // PROCESSED, NEW, DELETED
Supplier string `xml:"supplier"` // GUID
DefaultStore string `xml:"defaultStore"` // GUID
Items []InvoiceItemXML `xml:"items>item"`
}
type InvoiceItemXML struct {
Product string `xml:"product"` // GUID
Amount float64 `xml:"amount"` // Количество в основных единицах
Price float64 `xml:"price"` // Цена за единицу
Sum float64 `xml:"sum"` // Сумма без скидки (обычно)
VatSum float64 `xml:"vatSum"` // Сумма НДС
}
// --- XML DTOs (Store Reports) ---
type StoreReportResponse struct {
XMLName xml.Name `xml:"storeReportItemDtoes"`
Items []StoreReportItemXML `xml:"storeReportItemDto"`
}
type StoreReportItemXML struct {
// Основные идентификаторы
ProductID string `xml:"product"` // GUID товара
ProductGroup string `xml:"productGroup"` // GUID группы
Store string `xml:"primaryStore"` // GUID склада
DocumentID string `xml:"documentId"` // GUID документа
DocumentNum string `xml:"documentNum"` // Номер документа (строка)
// Типы (ENUMs)
DocumentType string `xml:"documentType"` // Например: INCOMING_INVOICE
TransactionType string `xml:"type"` // Например: INVOICE, WRITEOFF
// Финансы и количество
Amount float64 `xml:"amount"` // Количество
Sum float64 `xml:"sum"` // Сумма с НДС
SumWithoutNds float64 `xml:"sumWithoutNds"` // Сумма без НДС
Cost float64 `xml:"cost"` // Себестоимость
// Флаги и даты (используем строки для дат, так как парсинг делаем в сервисе)
Incoming bool `xml:"incoming"`
Date string `xml:"date"`
OperationalDate string `xml:"operationalDate"`
}
// --- XML DTOs (Import API) ---
// IncomingInvoiceImportXML описывает структуру для POST запроса импорта
type IncomingInvoiceImportXML struct {
XMLName xml.Name `xml:"document"`
ID string `xml:"id,omitempty"` // GUID, если редактируем
DocumentNumber string `xml:"documentNumber,omitempty"`
DateIncoming string `xml:"dateIncoming,omitempty"` // Format: dd.MM.yyyy
Invoice string `xml:"invoice,omitempty"` // Номер счет-фактуры
DefaultStore string `xml:"defaultStore"` // GUID склада (обязательно)
Supplier string `xml:"supplier"` // GUID поставщика (обязательно)
Comment string `xml:"comment,omitempty"`
Status string `xml:"status,omitempty"` // NEW, PROCESSED
ItemsWrapper struct {
Items []IncomingInvoiceImportItemXML `xml:"item"`
} `xml:"items"`
}
type IncomingInvoiceImportItemXML struct {
ProductID string `xml:"product"` // GUID товара
Amount float64 `xml:"amount"` // Кол-во в базовых единицах
Price float64 `xml:"price"` // Цена за единицу
Sum float64 `xml:"sum,omitempty"`
Store string `xml:"store"` // GUID склада
// Поля ниже можно опустить, если iiko должна сама подтянуть их из карточки товара
// или если мы работаем в базовых единицах.
AmountUnit string `xml:"amountUnit,omitempty"` // GUID единицы измерения
Num int `xml:"num,omitempty"` // Номер строки
}
// DocumentValidationResult описывает ответ сервера при импорте
type DocumentValidationResult struct {
XMLName xml.Name `xml:"documentValidationResult"`
Valid bool `xml:"valid"`
Warning bool `xml:"warning"`
DocumentNumber string `xml:"documentNumber"`
OtherSuggestedNumber string `xml:"otherSuggestedNumber"`
ErrorMessage string `xml:"errorMessage"`
AdditionalInfo string `xml:"additionalInfo"`
}