пофиксил неправильный пересчет фасовок в накладной

This commit is contained in:
2025-12-27 09:24:21 +03:00
parent dfd855cb6e
commit c2d382cb6a
12 changed files with 461 additions and 144 deletions

View File

@@ -54,8 +54,8 @@ func NewService(
}
// SyncAllData запускает полную синхронизацию для конкретного пользователя
func (s *Service) SyncAllData(userID uuid.UUID) error {
logger.Log.Info("Запуск полной синхронизации", zap.String("user_id", userID.String()))
func (s *Service) SyncAllData(userID uuid.UUID, force bool) error {
logger.Log.Info("Запуск синхронизации", zap.String("user_id", userID.String()), zap.Bool("force", force))
// 1. Получаем клиент и инфо о сервере
client, err := s.rmsFactory.GetClientForUser(userID)
@@ -92,7 +92,7 @@ func (s *Service) SyncAllData(userID uuid.UUID) error {
}
// 6. Накладные (история)
if err := s.syncInvoices(client, serverID); err != nil {
if err := s.syncInvoices(client, serverID, force); err != nil {
logger.Log.Error("Sync Invoices failed", zap.Error(err))
}
@@ -172,19 +172,24 @@ func (s *Service) syncRecipes(c rms.ClientI, serverID uuid.UUID) error {
return s.recipeRepo.SaveRecipes(recipesList)
}
func (s *Service) syncInvoices(c rms.ClientI, serverID uuid.UUID) error {
lastDate, err := s.invoiceRepo.GetLastInvoiceDate(serverID)
if err != nil {
return err
}
func (s *Service) syncInvoices(c rms.ClientI, serverID uuid.UUID, force bool) error {
var from time.Time
to := time.Now()
if lastDate != nil {
from = *lastDate
if force {
// Принудительная перезагрузка за последние 40 дней
from = time.Now().AddDate(0, 0, -40)
logger.Log.Info("Force sync invoices", zap.String("from", from.Format("2006-01-02")))
} else {
from = time.Now().AddDate(0, 0, -45) // 45 дней по дефолту
lastDate, err := s.invoiceRepo.GetLastInvoiceDate(serverID)
if err != nil {
return err
}
if lastDate != nil {
from = *lastDate
} else {
from = time.Now().AddDate(0, 0, -45)
}
}
invs, err := c.FetchInvoices(from, to)
@@ -194,10 +199,10 @@ func (s *Service) syncInvoices(c rms.ClientI, serverID uuid.UUID) error {
for i := range invs {
invs[i].RMSServerID = serverID
// В Items пока не добавляли ServerID
}
if len(invs) > 0 {
// Репозиторий использует OnConflict(UpdateAll), поэтому существующие записи обновятся
return s.invoiceRepo.SaveInvoices(invs)
}
return nil