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