mirror of
https://github.com/serty2005/rmser.git
synced 2026-02-04 19:02:33 -06:00
редактирование и удаление сопоставлений
список накладных с позициями
This commit is contained in:
@@ -38,17 +38,32 @@ func (r *pgRepository) GetByID(id uuid.UUID) (*drafts.DraftInvoice, error) {
|
||||
return &draft, nil
|
||||
}
|
||||
|
||||
func (r *pgRepository) GetByRMSInvoiceID(rmsInvoiceID uuid.UUID) (*drafts.DraftInvoice, error) {
|
||||
var draft drafts.DraftInvoice
|
||||
err := r.db.
|
||||
Where("rms_invoice_id = ?", rmsInvoiceID).
|
||||
First(&draft).Error
|
||||
if err != nil {
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
return nil, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
return &draft, nil
|
||||
}
|
||||
|
||||
func (r *pgRepository) Update(draft *drafts.DraftInvoice) error {
|
||||
return r.db.Model(draft).Updates(map[string]interface{}{
|
||||
"status": draft.Status,
|
||||
"document_number": draft.DocumentNumber,
|
||||
"date_incoming": draft.DateIncoming,
|
||||
"supplier_id": draft.SupplierID,
|
||||
"store_id": draft.StoreID,
|
||||
"comment": draft.Comment,
|
||||
"rms_invoice_id": draft.RMSInvoiceID,
|
||||
"rms_server_id": draft.RMSServerID,
|
||||
"updated_at": gorm.Expr("NOW()"),
|
||||
"status": draft.Status,
|
||||
"document_number": draft.DocumentNumber,
|
||||
"incoming_document_number": draft.IncomingDocumentNumber, // Добавлено поле для входящего номера документа
|
||||
"date_incoming": draft.DateIncoming,
|
||||
"supplier_id": draft.SupplierID,
|
||||
"store_id": draft.StoreID,
|
||||
"comment": draft.Comment,
|
||||
"rms_invoice_id": draft.RMSInvoiceID,
|
||||
"rms_server_id": draft.RMSServerID,
|
||||
"updated_at": gorm.Expr("NOW()"),
|
||||
}).Error
|
||||
}
|
||||
|
||||
@@ -107,3 +122,23 @@ func (r *pgRepository) GetActive(serverID uuid.UUID) ([]drafts.DraftInvoice, err
|
||||
|
||||
return list, err
|
||||
}
|
||||
|
||||
// GetRMSInvoiceIDToPhotoURLMap возвращает мапу rms_invoice_id -> sender_photo_url для сервера, где rms_invoice_id не NULL
|
||||
func (r *pgRepository) GetRMSInvoiceIDToPhotoURLMap(serverID uuid.UUID) (map[uuid.UUID]string, error) {
|
||||
var draftsList []drafts.DraftInvoice
|
||||
err := r.db.
|
||||
Select("rms_invoice_id", "sender_photo_url").
|
||||
Where("rms_server_id = ? AND rms_invoice_id IS NOT NULL", serverID).
|
||||
Find(&draftsList).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result := make(map[uuid.UUID]string)
|
||||
for _, d := range draftsList {
|
||||
if d.RMSInvoiceID != nil {
|
||||
result[*d.RMSInvoiceID] = d.SenderPhotoURL
|
||||
}
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
@@ -18,6 +18,19 @@ func NewRepository(db *gorm.DB) invoices.Repository {
|
||||
return &pgRepository{db: db}
|
||||
}
|
||||
|
||||
func (r *pgRepository) GetByID(id uuid.UUID) (*invoices.Invoice, error) {
|
||||
var inv invoices.Invoice
|
||||
err := r.db.
|
||||
Preload("Items").
|
||||
Preload("Items.Product").
|
||||
Where("id = ?", id).
|
||||
First(&inv).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &inv, nil
|
||||
}
|
||||
|
||||
func (r *pgRepository) GetLastInvoiceDate(serverID uuid.UUID) (*time.Time, error) {
|
||||
var inv invoices.Invoice
|
||||
// Ищем последнюю накладную только для этого сервера
|
||||
@@ -35,7 +48,8 @@ func (r *pgRepository) GetByPeriod(serverID uuid.UUID, from, to time.Time) ([]in
|
||||
var list []invoices.Invoice
|
||||
err := r.db.
|
||||
Preload("Items").
|
||||
Where("rms_server_id = ? AND date_incoming BETWEEN ? AND ?", serverID, from, to).
|
||||
Preload("Items.Product").
|
||||
Where("rms_server_id = ? AND date_incoming BETWEEN ? AND ? AND status != ?", serverID, from, to, "DELETED").
|
||||
Order("date_incoming DESC").
|
||||
Find(&list).Error
|
||||
return list, err
|
||||
|
||||
@@ -81,6 +81,7 @@ func (r *pgRepository) GetAllMatches(serverID uuid.UUID) ([]ocr.ProductMatch, er
|
||||
err := r.db.
|
||||
Preload("Product").
|
||||
Preload("Product.MainUnit").
|
||||
Preload("Product.Containers").
|
||||
Preload("Container").
|
||||
Where("rms_server_id = ?", serverID).
|
||||
Order("updated_at DESC").
|
||||
|
||||
@@ -51,6 +51,15 @@ func (r *pgRepository) GetRankedByUsage(serverID uuid.UUID, daysLookBack int) ([
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (r *pgRepository) GetByID(id uuid.UUID) (*suppliers.Supplier, error) {
|
||||
var supplier suppliers.Supplier
|
||||
err := r.db.Where("id = ? AND is_deleted = ?", id, false).First(&supplier).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &supplier, nil
|
||||
}
|
||||
|
||||
func (r *pgRepository) Count(serverID uuid.UUID) (int64, error) {
|
||||
var count int64
|
||||
err := r.db.Model(&suppliers.Supplier{}).
|
||||
|
||||
@@ -572,12 +572,13 @@ func (c *Client) CreateIncomingInvoice(inv invoices.Invoice) (string, error) {
|
||||
}
|
||||
|
||||
reqDTO := IncomingInvoiceImportXML{
|
||||
DocumentNumber: inv.DocumentNumber,
|
||||
DateIncoming: inv.DateIncoming.Format("02.01.2006"),
|
||||
DefaultStore: inv.DefaultStoreID.String(),
|
||||
Supplier: inv.SupplierID.String(),
|
||||
Status: status,
|
||||
Comment: comment,
|
||||
DocumentNumber: inv.DocumentNumber,
|
||||
IncomingDocumentNumber: inv.IncomingDocumentNumber, // Присваиваем входящий номер документа из домена
|
||||
DateIncoming: inv.DateIncoming.Format("02.01.2006"),
|
||||
DefaultStore: inv.DefaultStoreID.String(),
|
||||
Supplier: inv.SupplierID.String(),
|
||||
Status: status,
|
||||
Comment: comment,
|
||||
}
|
||||
|
||||
if inv.ID != uuid.Nil {
|
||||
|
||||
@@ -195,10 +195,11 @@ type StoreReportItemXML struct {
|
||||
|
||||
// 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
|
||||
XMLName xml.Name `xml:"document"`
|
||||
ID string `xml:"id,omitempty"` // GUID, если редактируем
|
||||
DocumentNumber string `xml:"documentNumber,omitempty"`
|
||||
IncomingDocumentNumber string `xml:"incomingDocumentNumber,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 поставщика (обязательно)
|
||||
|
||||
Reference in New Issue
Block a user