mirror of
https://github.com/serty2005/rmser.git
synced 2026-02-04 19:02:33 -06:00
2701-есть адекватный порядок для строк черновика и фикс пустого поиска
This commit is contained in:
@@ -169,6 +169,20 @@ func (s *Service) UpdateDraftHeader(id uuid.UUID, storeID *uuid.UUID, supplierID
|
||||
}
|
||||
|
||||
func (s *Service) AddItem(draftID uuid.UUID) (*drafts.DraftInvoiceItem, error) {
|
||||
// Получаем текущий черновик для определения максимального order
|
||||
draft, err := s.draftRepo.GetByID(draftID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Находим максимальный order среди существующих позиций
|
||||
maxOrder := 0
|
||||
for _, item := range draft.Items {
|
||||
if item.Order > maxOrder {
|
||||
maxOrder = item.Order
|
||||
}
|
||||
}
|
||||
|
||||
newItem := &drafts.DraftInvoiceItem{
|
||||
ID: uuid.New(),
|
||||
DraftID: draftID,
|
||||
@@ -181,6 +195,7 @@ func (s *Service) AddItem(draftID uuid.UUID) (*drafts.DraftInvoiceItem, error) {
|
||||
IsMatched: false,
|
||||
LastEditedField1: drafts.FieldQuantity,
|
||||
LastEditedField2: drafts.FieldPrice,
|
||||
Order: maxOrder + 1,
|
||||
}
|
||||
|
||||
if err := s.draftRepo.CreateItem(newItem); err != nil {
|
||||
@@ -854,3 +869,55 @@ func (s *Service) SetDraftReadyToVerify(draftID, userID uuid.UUID) (*drafts.Draf
|
||||
|
||||
return draft, nil
|
||||
}
|
||||
|
||||
// ReorderItem изменяет порядок позиции в черновике
|
||||
func (s *Service) ReorderItem(draftID, itemID uuid.UUID, newOrder int) error {
|
||||
// Получаем черновик
|
||||
draft, err := s.draftRepo.GetByID(draftID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Находим перемещаемый элемент
|
||||
var targetItem *drafts.DraftInvoiceItem
|
||||
for _, item := range draft.Items {
|
||||
if item.ID == itemID {
|
||||
targetItem = &item
|
||||
break
|
||||
}
|
||||
}
|
||||
if targetItem == nil {
|
||||
return fmt.Errorf("item not found")
|
||||
}
|
||||
|
||||
oldOrder := targetItem.Order
|
||||
|
||||
// Если порядок не изменился, ничего не делаем
|
||||
if oldOrder == newOrder {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Обновляем порядок других элементов
|
||||
if newOrder < oldOrder {
|
||||
// Перемещаем вверх: увеличиваем order элементов между newOrder и oldOrder-1
|
||||
for _, item := range draft.Items {
|
||||
if item.Order >= newOrder && item.Order < oldOrder && item.ID != itemID {
|
||||
if err := s.draftRepo.UpdateItemOrder(item.ID, item.Order+1); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Перемещаем вниз: уменьшаем order элементов между oldOrder+1 и newOrder
|
||||
for _, item := range draft.Items {
|
||||
if item.Order > oldOrder && item.Order <= newOrder && item.ID != itemID {
|
||||
if err := s.draftRepo.UpdateItemOrder(item.ID, item.Order-1); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Обновляем порядок целевого элемента
|
||||
return s.draftRepo.UpdateItemOrder(itemID, newOrder)
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ func (s *Service) ProcessDocument(ctx context.Context, userID uuid.UUID, imgData
|
||||
|
||||
// 7. Матчинг и сохранение позиций
|
||||
var draftItems []drafts.DraftInvoiceItem
|
||||
for _, rawItem := range rawResult.Items {
|
||||
for i, rawItem := range rawResult.Items {
|
||||
item := drafts.DraftInvoiceItem{
|
||||
DraftID: draft.ID,
|
||||
RawName: rawItem.RawName,
|
||||
@@ -170,6 +170,7 @@ func (s *Service) ProcessDocument(ctx context.Context, userID uuid.UUID, imgData
|
||||
Quantity: decimal.NewFromFloat(rawItem.Amount),
|
||||
Price: decimal.NewFromFloat(rawItem.Price),
|
||||
Sum: decimal.NewFromFloat(rawItem.Sum),
|
||||
Order: i + 1,
|
||||
}
|
||||
|
||||
match, _ := s.ocrRepo.FindMatch(serverID, rawItem.RawName)
|
||||
|
||||
Reference in New Issue
Block a user