2701-есть адекватный порядок для строк черновика и фикс пустого поиска

This commit is contained in:
2026-01-27 08:51:59 +03:00
parent 38a5143902
commit de4bd9c8d7
8 changed files with 148 additions and 5 deletions

View File

@@ -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)
}