package screens import ( "fmt" "time" "example.com/m/bot" "github.com/NicoNex/echotron/v3" ) type PurchaseOptionalDetails struct { WorkspaceID string ProjectID string ProjectTitle string CreativeID string CreativeTitle string Channels []PurchaseChannelInput PlacementDateTime *time.Time PaymentDate *time.Time BackState bot.State } func (s *PurchaseOptionalDetails) Enter(b *bot.Bot, mode bot.RenderMode) { text := "… › Создание › Дополнительно\n\n" text += "Страница создания закупа и необязательные составляющие" placementLabel := "☑ Дата и время размещения" if s.PlacementDateTime != nil { placementLabel = fmt.Sprintf("✅ Дата и время размещения: %s", s.PlacementDateTime.In(mskLocation).Format("02.01 15:04")) } paymentLabel := "Дата оплаты" if s.PaymentDate != nil { paymentLabel = fmt.Sprintf("✅ Дата оплаты: %s", s.PaymentDate.In(mskLocation).Format("02.01 15:04")) } keyboard := bot.Keyboard( bot.Row( bot.Button(placementLabel, "opt_datetime"), bot.Button("☑ Стоимость: [цена)", "opt_cost"), ), bot.Row( bot.Button(paymentLabel, "opt_payment_date"), bot.Button("Тип закупа [вп / стандарт]", "opt_type"), ), bot.Row( bot.Button("Формат: [формат)", "opt_format"), bot.Button("Комментарий", "opt_comment"), ), bot.Row( bot.Button("Назад", "back"), bot.Button("Далее", "next"), ), ) b.Render(text, keyboard, mode) } func (s *PurchaseOptionalDetails) HandleCallback(b *bot.Bot, u *echotron.Update) { if u.CallbackQuery == nil || u.CallbackQuery.Data == "" { return } switch u.CallbackQuery.Data { case "opt_datetime": b.SetState(NewDateTimePicker(DateTimePickerConfig{ Title: "Дата и время размещения", Key: "placement_datetime", IncludeTime: true, Selected: s.PlacementDateTime, BackState: s, }), bot.EditMessage) case "opt_payment_date": b.SetState(NewDateTimePicker(DateTimePickerConfig{ Title: "Дата оплаты", Key: "payment_date", IncludeTime: true, Selected: s.PaymentDate, BackState: s, }), bot.EditMessage) case "back": b.SetState(&SelectChannelsForPurchase{ WorkspaceID: s.WorkspaceID, ProjectID: s.ProjectID, ProjectTitle: s.ProjectTitle, CreativeID: s.CreativeID, CreativeTitle: s.CreativeTitle, Channels: s.Channels, BackState: s.BackState, }, bot.EditMessage) default: s.Enter(b, bot.EditMessage) } } func (s *PurchaseOptionalDetails) HandleMessage(_ *bot.Bot, _ *echotron.Update) { return } func (s *PurchaseOptionalDetails) Handle(_ *bot.Bot, _ *echotron.Update) { return } func (s *PurchaseOptionalDetails) SetDateTimeSelection(key string, value time.Time) { switch key { case "placement_datetime": s.PlacementDateTime = &value case "payment_date": s.PaymentDate = &value } }