Files
rmser/internal/domain/drafts/entity.go

99 lines
4.1 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 drafts
import (
"time"
"rmser/internal/domain/catalog"
"github.com/google/uuid"
"github.com/shopspring/decimal"
)
const (
StatusProcessing = "PROCESSING"
StatusReadyToVerify = "READY_TO_VERIFY"
StatusCompleted = "COMPLETED"
StatusError = "ERROR"
StatusCanceled = "CANCELED"
StatusDeleted = "DELETED"
)
type EditedField string
const (
FieldQuantity EditedField = "quantity"
FieldPrice EditedField = "price"
FieldSum EditedField = "sum"
)
type DraftInvoice struct {
ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
// Привязка к аккаунту и серверу
UserID uuid.UUID `gorm:"type:uuid;not null;index" json:"user_id"` // Кто загрузил (автор)
RMSServerID uuid.UUID `gorm:"type:uuid;not null;index" json:"rms_server_id"` // К какому серверу относится
SenderPhotoURL string `gorm:"type:text" json:"photo_url"`
Status string `gorm:"type:varchar(50);default:'PROCESSING'" json:"status"`
DocumentNumber string `gorm:"type:varchar(100)" json:"document_number"`
// Входящий номер документа
IncomingDocumentNumber string `gorm:"type:varchar(100)" json:"incoming_document_number"`
DateIncoming *time.Time `json:"date_incoming"`
SupplierID *uuid.UUID `gorm:"type:uuid" json:"supplier_id"`
StoreID *uuid.UUID `gorm:"type:uuid" json:"store_id"`
Store *catalog.Store `gorm:"foreignKey:StoreID" json:"store,omitempty"`
Comment string `gorm:"type:text" json:"comment"`
RMSInvoiceID *uuid.UUID `gorm:"type:uuid" json:"rms_invoice_id"`
Items []DraftInvoiceItem `gorm:"foreignKey:DraftID;constraint:OnDelete:CASCADE" json:"items"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type DraftInvoiceItem struct {
ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
DraftID uuid.UUID `gorm:"type:uuid;not null;index" json:"draft_id"`
RawName string `gorm:"type:varchar(255);not null" json:"raw_name"`
RawAmount decimal.Decimal `gorm:"type:numeric(19,4)" json:"raw_amount"`
RawPrice decimal.Decimal `gorm:"type:numeric(19,4)" json:"raw_price"`
ProductID *uuid.UUID `gorm:"type:uuid;index" json:"product_id"`
Product *catalog.Product `gorm:"foreignKey:ProductID" json:"product,omitempty"`
ContainerID *uuid.UUID `gorm:"type:uuid;index" json:"container_id"`
Container *catalog.ProductContainer `gorm:"foreignKey:ContainerID" json:"container,omitempty"`
Quantity decimal.Decimal `gorm:"type:numeric(19,4);default:0" json:"quantity"`
Price decimal.Decimal `gorm:"type:numeric(19,4);default:0" json:"price"`
Sum decimal.Decimal `gorm:"type:numeric(19,4);default:0" json:"sum"`
// Два последних отредактированных поля (для автопересчёта)
LastEditedField1 EditedField `gorm:"column:last_edited_field1;type:varchar(20);default:'quantity'" json:"last_edited_field_1"`
LastEditedField2 EditedField `gorm:"column:last_edited_field2;type:varchar(20);default:'price'" json:"last_edited_field_2"`
IsMatched bool `gorm:"default:false" json:"is_matched"`
}
type Repository interface {
Create(draft *DraftInvoice) error
GetByID(id uuid.UUID) (*DraftInvoice, error)
GetByRMSInvoiceID(rmsInvoiceID uuid.UUID) (*DraftInvoice, error)
GetItemByID(itemID uuid.UUID) (*DraftInvoiceItem, error)
CreateItems(items []DraftInvoiceItem) error
Update(draft *DraftInvoice) error
UpdateItem(itemID uuid.UUID, updates map[string]interface{}) error
CreateItem(item *DraftInvoiceItem) error
DeleteItem(itemID uuid.UUID) error
Delete(id uuid.UUID) error
// GetActive возвращает активные черновики для СЕРВЕРА (а не юзера)
GetActive(serverID uuid.UUID) ([]DraftInvoice, error)
// GetRMSInvoiceIDToPhotoURLMap возвращает мапу rms_invoice_id -> sender_photo_url для сервера, где rms_invoice_id не NULL
GetRMSInvoiceIDToPhotoURLMap(serverID uuid.UUID) (map[uuid.UUID]string, error)
}