109 lines
3.0 KiB
Go
109 lines
3.0 KiB
Go
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 := "<i>… › Создание › Дополнительно</i>\n\n"
|
||
text += "<b>Страница создания закупа и необязательные составляющие</b>"
|
||
|
||
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
|
||
}
|
||
}
|