экраны закупов и креативов
This commit is contained in:
122
telegram_bot/screens/add_placement.go
Normal file
122
telegram_bot/screens/add_placement.go
Normal file
@@ -0,0 +1,122 @@
|
||||
package screens
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"example.com/m/adapter/backend"
|
||||
"example.com/m/bot"
|
||||
"github.com/NicoNex/echotron/v3"
|
||||
)
|
||||
|
||||
type AddPlacement struct {
|
||||
WorkspaceID string
|
||||
BackState bot.State
|
||||
|
||||
// Выбранные данные
|
||||
SelectedProject *backend.Project
|
||||
SelectedCreative *backend.Creative
|
||||
}
|
||||
|
||||
func (s *AddPlacement) Enter(b *bot.Bot, mode bot.RenderMode) {
|
||||
text := `<b>➕ Создать закуп</b>
|
||||
|
||||
Шаг 1: Выберите проект и креатив
|
||||
|
||||
Нажмите на кнопки ниже для выбора:`
|
||||
|
||||
var buttons [][]echotron.InlineKeyboardButton
|
||||
|
||||
// Кнопка выбора проекта
|
||||
projectButtonText := "Проект: Не выбран"
|
||||
if s.SelectedProject != nil {
|
||||
projectButtonText = fmt.Sprintf("Проект: %s", s.SelectedProject.Title)
|
||||
}
|
||||
buttons = append(buttons, bot.Row(
|
||||
bot.Button(projectButtonText, "select_project"),
|
||||
))
|
||||
|
||||
// Кнопка выбора креатива
|
||||
creativeButtonText := "Креатив: Не выбран"
|
||||
if s.SelectedCreative != nil {
|
||||
creativeButtonText = fmt.Sprintf("Креатив: %s", s.SelectedCreative.Name)
|
||||
}
|
||||
buttons = append(buttons, bot.Row(
|
||||
bot.Button(creativeButtonText, "select_creative"),
|
||||
))
|
||||
|
||||
// Кнопки навигации
|
||||
var navRow []echotron.InlineKeyboardButton
|
||||
navRow = append(navRow, bot.Button("« Назад", "cancel"))
|
||||
|
||||
// Кнопка "Далее" активна только если выбран проект
|
||||
if s.SelectedProject != nil {
|
||||
navRow = append(navRow, bot.Button("Далее →", "next"))
|
||||
}
|
||||
|
||||
buttons = append(buttons, navRow)
|
||||
|
||||
keyboard := bot.Keyboard(buttons...)
|
||||
b.Render(text, keyboard, mode)
|
||||
}
|
||||
|
||||
func (s *AddPlacement) HandleCallback(b *bot.Bot, u *echotron.Update) {
|
||||
if u.CallbackQuery == nil || u.CallbackQuery.Data == "" {
|
||||
return
|
||||
}
|
||||
|
||||
data := u.CallbackQuery.Data
|
||||
|
||||
switch data {
|
||||
case "cancel":
|
||||
if s.BackState != nil {
|
||||
b.SetState(s.BackState, bot.EditMessage)
|
||||
}
|
||||
|
||||
case "select_project":
|
||||
// Переходим к выбору проекта
|
||||
b.SetState(&SelectProjectForPlacement{
|
||||
WorkspaceID: s.WorkspaceID,
|
||||
AddPlacementState: s,
|
||||
}, bot.NewMessage)
|
||||
|
||||
case "select_creative":
|
||||
if s.SelectedProject == nil {
|
||||
// Если проект не выбран, показываем предупреждение
|
||||
b.Edit(`<b>⚠️ Сначала выберите проект</b>
|
||||
|
||||
Для выбора креатива необходимо сначала выбрать проект, так как креативы привязаны к проектам.`, bot.Keyboard(
|
||||
bot.Row(bot.Button("« Назад", "back_to_add_placement")),
|
||||
))
|
||||
return
|
||||
}
|
||||
|
||||
// Переходим к выбору креатива
|
||||
b.SetState(&SelectCreativeForPlacement{
|
||||
WorkspaceID: s.WorkspaceID,
|
||||
ProjectID: s.SelectedProject.ID,
|
||||
AddPlacementState: s,
|
||||
}, bot.NewMessage)
|
||||
|
||||
case "back_to_add_placement":
|
||||
s.Enter(b, bot.EditMessage)
|
||||
|
||||
case "next":
|
||||
if s.SelectedProject == nil {
|
||||
return
|
||||
}
|
||||
|
||||
// Переходим к управлению планом закупа (добавление/удаление каналов)
|
||||
b.SetState(&PlacementPurchasePlan{
|
||||
WorkspaceID: s.WorkspaceID,
|
||||
ProjectID: s.SelectedProject.ID,
|
||||
AddPlacementState: s,
|
||||
}, bot.EditMessage)
|
||||
|
||||
default:
|
||||
s.Enter(b, bot.NewMessage)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *AddPlacement) HandleMessage(_ *bot.Bot, _ *echotron.Update) { return }
|
||||
|
||||
func (s *AddPlacement) Handle(_ *bot.Bot, _ *echotron.Update) { return }
|
||||
Reference in New Issue
Block a user