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

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

@@ -253,49 +253,28 @@ type DraftListItemDTO struct {
TotalSum float64 `json:"total_sum"`
StoreName string `json:"store_name"`
CreatedAt string `json:"created_at"`
IsAppCreated bool `json:"is_app_created"`
}
func (h *DraftsHandler) GetDrafts(c *gin.Context) {
userID := c.MustGet("userID").(uuid.UUID)
list, err := h.service.GetActiveDrafts(userID)
// Читаем параметры периода из Query (default: 30 days)
fromStr := c.DefaultQuery("from", time.Now().AddDate(0, 0, -30).Format("2006-01-02"))
toStr := c.DefaultQuery("to", time.Now().Format("2006-01-02"))
from, _ := time.Parse("2006-01-02", fromStr)
to, _ := time.Parse("2006-01-02", toStr)
// Устанавливаем конец дня для 'to'
to = to.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
list, err := h.service.GetUnifiedList(userID, from, to)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
response := make([]DraftListItemDTO, 0, len(list))
for _, d := range list {
var totalSum decimal.Decimal
for _, item := range d.Items {
if !item.Sum.IsZero() {
totalSum = totalSum.Add(item.Sum)
} else {
totalSum = totalSum.Add(item.Quantity.Mul(item.Price))
}
}
sumFloat, _ := totalSum.Float64()
dateStr := ""
if d.DateIncoming != nil {
dateStr = d.DateIncoming.Format("2006-01-02")
}
storeName := ""
if d.Store != nil {
storeName = d.Store.Name
}
response = append(response, DraftListItemDTO{
ID: d.ID.String(),
DocumentNumber: d.DocumentNumber,
DateIncoming: dateStr,
Status: d.Status,
ItemsCount: len(d.Items),
TotalSum: sumFloat,
StoreName: storeName,
CreatedAt: d.CreatedAt.Format(time.RFC3339),
})
}
c.JSON(http.StatusOK, response)
c.JSON(http.StatusOK, list)
}
func (h *DraftsHandler) DeleteDraft(c *gin.Context) {

View File

@@ -97,10 +97,12 @@ func (bot *Bot) initMenus() {
bot.menuServers = &tele.ReplyMarkup{}
bot.menuDicts = &tele.ReplyMarkup{}
btnSync := bot.menuDicts.Data("⚡️ Обновить данные", "act_sync")
btnSync := bot.menuDicts.Data("⚡️ Быстрое обновление", "act_sync")
btnFullSync := bot.menuDicts.Data("♻️ Полная перезагрузка", "act_full_sync")
btnBack := bot.menuDicts.Data("🔙 Назад", "nav_main")
bot.menuDicts.Inline(
bot.menuDicts.Row(btnSync),
bot.menuDicts.Row(btnFullSync),
bot.menuDicts.Row(btnBack),
)
@@ -122,6 +124,7 @@ func (bot *Bot) initHandlers() {
bot.b.Handle(&tele.Btn{Unique: "act_add_server"}, bot.startAddServerFlow)
bot.b.Handle(&tele.Btn{Unique: "act_sync"}, bot.triggerSync)
bot.b.Handle(&tele.Btn{Unique: "act_full_sync"}, bot.triggerFullSync)
bot.b.Handle(&tele.Btn{Unique: "act_del_server_menu"}, bot.renderDeleteServerMenu)
bot.b.Handle(&tele.Btn{Unique: "confirm_name_yes"}, bot.handleConfirmNameYes)
bot.b.Handle(&tele.Btn{Unique: "confirm_name_no"}, bot.handleConfirmNameNo)
@@ -571,6 +574,26 @@ func (bot *Bot) NotifySuccess(userID uuid.UUID, amount float64, newBalance int,
bot.b.Send(&tele.User{ID: user.TelegramID}, msg, tele.ModeHTML)
}
func (bot *Bot) triggerFullSync(c tele.Context) error {
userDB, _ := bot.accountRepo.GetUserByTelegramID(c.Sender().ID)
server, _ := bot.accountRepo.GetActiveServer(userDB.ID)
if server == nil {
return c.Respond(&tele.CallbackResponse{Text: "Нет активного сервера"})
}
c.Respond(&tele.CallbackResponse{Text: "Запущена полная перезагрузка данных...", ShowAlert: false})
c.Send("⏳ <b>Полная синхронизация</b>\\nОбновляю историю накладных за 60 дней и справочники. Это может занять до 1 минуты.", tele.ModeHTML)
go func() {
if err := bot.syncService.SyncAllData(userDB.ID, true); err != nil {
bot.b.Send(c.Sender(), "❌ Ошибка при полной синхронизации: "+err.Error())
} else {
bot.b.Send(c.Sender(), "✅ Все данные успешно обновлены!")
}
}()
return nil
}
func (bot *Bot) handleBillingCallbacks(c tele.Context, data string, userDB *account.User) error {
if data == "bill_topup" {
return bot.renderTariffShowcase(c, "")
@@ -670,7 +693,7 @@ func (bot *Bot) triggerSync(c tele.Context) error {
}
c.Respond(&tele.CallbackResponse{Text: "Запускаю синхронизацию..."})
go func() {
if err := bot.syncService.SyncAllData(userDB.ID); err != nil {
if err := bot.syncService.SyncAllData(userDB.ID, false); err != nil {
logger.Log.Error("Manual sync failed", zap.Error(err))
bot.b.Send(c.Sender(), "❌ Ошибка синхронизации. Проверьте настройки сервера.")
} else {
@@ -867,7 +890,7 @@ func (bot *Bot) saveServerFinal(c tele.Context, userID int64, serverName string)
successMsg += "Начинаю первичную синхронизацию данных..."
c.Send(successMsg, tele.ModeHTML)
go bot.syncService.SyncAllData(userDB.ID)
go bot.syncService.SyncAllData(userDB.ID, false)
return bot.renderMainMenu(c)
}