Мастер-Тур(15):Личный Кабинет (ЛК) — различия между версиями

Материал из Megatec
Перейти к: навигация, поиск
[досмотренная версия][досмотренная версия]
(Финансы)
 
(не показано 5 промежуточных версий этого же участника)
Строка 9: Строка 9:
  
 
Основные возможности личного кабинета:
 
Основные возможности личного кабинета:
* '''Просмотр списка заказов с детальной информацией''' позволяет агентам быстро получать сведения о бронированиях, статусах заявок, суммах оплат и задолженностях.
+
* '''Просмотр списка заказов с детальной информацией''' позволяет агентам быстро получать сведения о бронированиях, статусах заявок, суммах оплат и задолженностях.
* '''Фильтрация и сортировка заявок''' помогает находить нужные заявки по заданным параметрам (номер заявки, фамилия туриста, даты поездки и т. д.).
+
* '''Фильтрация и сортировка заявок''' помогает находить нужные заявки по заданным параметрам (номер заявки, фамилия туриста, даты поездки и т. д.).
* '''Управление учётными данными агентства''' включает редактирование контактной информации, реквизитов компании и управление учетными записями сотрудников.
+
* '''Управление учётными данными агентства''' включает редактирование контактной информации, реквизитов компании и управление учетными записями сотрудников.
* '''Доступ к финансовой информации и отчетам''' позволяет просматривать суммы оплат, задолженности и формировать отчёты для контроля финансовых операций.
+
* '''Доступ к финансовой информации и отчетам''' позволяет просматривать суммы оплат, задолженности и формировать отчёты для контроля финансовых операций.
* '''Взаимодействие с туроператором через сообщения и уведомления''' обеспечивает связь между агентством и туроператором, уведомляя о важных изменениях и позволяя вести переписку.
+
* '''Взаимодействие с туроператором через сообщения и уведомления''' обеспечивает связь между агентством и туроператором, уведомляя о важных изменениях и позволяя вести переписку.
 +
 
 +
== Настройки личного кабинета ==
 +
Перед использованием Личного кабинета необходимо настроить файлы конфигурации для сервисов ''AccountClient'', ''AccountService'' и ''PrintReportAPI''
 +
 
 +
===Настройки клиента Личного кабинета (AccountClient)=== 
 +
настройки, задаваемые в файле settings.json
 +
 
 +
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse"
 +
|- style="background-color:#F2F2F2"
 +
! width="2%" | №
 +
! width="28%" | Описание
 +
! width="35%" | Значение
 +
! width="35%" | Настройка
 +
 
 +
|- style="vertical-align:text-top"
 +
| 1
 +
| Базовый адрес сервиса
 +
| URL сервиса (HTTP/HTTPS)
 +
| <syntaxhighlight lang="json" enclose="div">
 +
{
 +
  "API_URL": "http://localhost:7000"
 +
}
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 2
 +
| Перечень отчётов, доступных к печати
 +
| Массив объектов; каждый элемент — один отчёт
 +
| <syntaxhighlight lang="json" enclose="div">
 +
{
 +
  "ORDER_REPORTS": [ { /* элементы см. пп. 3–6 */ } ]
 +
}
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 3
 +
| Идентификатор отчёта
 +
| "series" — строковый код/номер отчёта
 +
| <syntaxhighlight lang="json" enclose="div">
 +
{ "series": "4001" }
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 4
 +
| Заголовок отчёта в интерфейсе
 +
| Строка для отображения в меню «Отчёты»
 +
| <syntaxhighlight lang="json" enclose="div">
 +
{ "title": "Лист бронирования" }
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 5
 +
| Профиль отчёта
 +
| "guid" — уникальный GUID используемого профиля
 +
| <syntaxhighlight lang="json" enclose="div">
 +
{ "guid": "E147D680-AF8C-414C-958F-E0F2C2E4E592" }
 +
</syntaxhighlight>
 +
|}
 +
'''Пример:'''<br>
 +
<syntaxhighlight lang="json" enclose="div">
 +
{
 +
  "API_URL": "http://localhost:7000",
 +
  "ORDER_REPORTS": [
 +
    {
 +
      "series": "ARM",
 +
      "title": "Отчёт агента",
 +
      "guid": "57E0E9DB-8F20-4151-B0D4-40F1138D5E01"
 +
    }
 +
  ]
 +
}
 +
</syntaxhighlight>
 +
Примечание. Для каждого подключённого отчёта должен использоваться корректный GUID профиля, существующий в базе.
 +
 
 +
===Настройки аккаунт сервиса  (AccountService)=== 
 +
настройки, задаваемые в файле appsettings.json
 +
 
 +
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse"
 +
|- style="background-color:#F2F2F2"
 +
! №
 +
! Описание
 +
! Значение
 +
! Настройка
 +
 
 +
|- style="vertical-align:text-top"
 +
| 1
 +
| Ключ и TTL JWT-токена
 +
| Секрет и время жизни (в минутах)
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"Jwt": {
 +
  "Key": "SecretKey10125779374235322",
 +
  "TokenValidityInMinutes": 100
 +
}
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 2
 +
| Тип используемой СУБД
 +
| 1 — Microsoft SQL Server; 2 — PostgreSQL; … до 5; 6–9 — зарезервировано
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"ConnectionParameters": { "databaseType": 1}
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 3
 +
| Адрес сервера БД
 +
| Имя/адрес инстанса
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"ConnectionParameters": { "server": "ip-адрес сервера базы данных ПК Мастер-Тур" }
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 4
 +
| Имя базы данных
 +
| Название БД
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"ConnectionParameters": { "database": "название базы данных ПК Мастер-Тур" }
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 5
 +
| Учётные данные БД
 +
| Пользователь и пароль
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"ConnectionParameters": {
 +
  "user": "логин пользователя ПК Мастер-Тур",
 +
  "password": "пароль пользователя ПК Мастер-Тур"
 +
}
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 6
 +
| Имя приложения в коннекте
 +
| Для трассировки в БД
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"ConnectionParameters": { "appName": "MegatecAccountService" }
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 7
 +
| Логирование сервиса: включить консоль
 +
| true/false
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"Logger": { "EnableConsole": true, ... }
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 8
 +
| Путь к лог-файлам
 +
| Папка ("" — отключено)
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"Logger": { "FilePath": "" }
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 9
 +
| Ротация логов по размеру
 +
| Максимальный размер (МБ) и число файлов
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"Logger": {
 +
  "MaxLogFileSize": 10,
 +
  "MaxOldLogFilesCount": 30
 +
}
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 10
 +
| Имя службы и адрес(а) прослушивания
 +
| ServiceName и список URL
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"Install": {
 +
  "ServiceName": "MegatecAccountService",
 +
  "ServiceAddress": [ "http://*:7000" ]
 +
}
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 11
 +
| IP-интерфейс привязки
 +
| IPv6Any / конкретный IP
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"Install": { "IPAddress": "IPAddress.IPv6Any" }
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 12
 +
| Адрес удалённого сервиса печати отчетов
 +
| Базовый URL PrintReportAPI
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"RemoteServices": {
 +
  "ReportServiceUrl": "http://localhost:7050/PrintReportAPI/"
 +
}
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 13
 +
| Разрешённые хосты
 +
| "*" — без ограничений
 +
| <syntaxhighlight lang="json" enclose="div">
 +
"AllowedHosts": "*"
 +
</syntaxhighlight>
 +
|}
 +
'''Пример:'''<br>
 +
<syntaxhighlight lang="json" enclose="div">
 +
{
 +
  "Jwt": {
 +
    "Key": "SecretKey10125779374235322",
 +
    //"Issuer": "https://localhost:44341",
 +
    //"Audience": "https://localhost:44341",
 +
    "TokenValidityInMinutes": 100
 +
  },
 +
  "ConnectionParameters": {
 +
    // Database types:
 +
    //      "Micrisoft_SQLServer" = 1
 +
    //      "PostgreSQL" = 2
 +
    //      ... to 5
 +
    // For databases not supported with EF Core reserved numbers from 6 to 9
 +
    "databaseType": 1,
 +
    "server": "ip-адрес сервера базы данных ПК Мастер-Тур",
 +
    "database": "название базы данных ПК Мастер-Тур",
 +
    "user": "логин пользователя ПК Мастер-Тур",
 +
    "password": "пароль пользователя ПК Мастер-Тур",
 +
    "appName": "MegatecAccountService"
 +
  },
 +
  "Logger": {
 +
    "EnableConsole": true,
 +
    "FilePath": "",
 +
    "MaxLogFileSize": 10, // МБ
 +
    "MaxOldLogFilesCount": 30
 +
  },
 +
  "Install": {
 +
    "ServiceName": "MegatecAccountService",
 +
    "ServiceAddress": [ "http://localhost:7000" ],
 +
    "IPAddress": "IPAddress.IPv6Any"
 +
  },
 +
    "RemoteServices": {
 +
    "ReportServiceUrl": "http://localhost:7050/PrintReportAPI/"
 +
  },
 +
  "AllowedHosts": "*"
 +
}
 +
</syntaxhighlight>
 +
===Настройки сервиса печати отчетов (PrintReportAPI)=== 
 +
Служба печати генерирует файл отчёта по переданному идентификатору и профилю.
 +
 
 +
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse"
 +
|- style="background-color:#F2F2F2"
 +
! №
 +
! Описание
 +
! Значение
 +
! Настройка
 +
 
 +
|- style="vertical-align:text-top"
 +
| 1
 +
| Параметры логирования
 +
| Путь к логам, уровень, вывод в консоль
 +
| <syntaxhighlight lang="xml" enclose="div">
 +
<loggerSection>
 +
  <Loggers path="Logs">
 +
    <Logger level="ALL" name="ReportLoger" console="false" />
 +
  </Loggers>
 +
</loggerSection>
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 2
 +
| Строка подключения к БД
 +
| Data Source, Initial Catalog, User Id, Password, Application Name
 +
| <syntaxhighlight lang="xml" enclose="div">
 +
<appSettings>
 +
  <add key="connectionString"
 +
      value="Data Source=ip-адрес сервера;
 +
Initial Catalog=название базы;
 +
User Id=логин пользователя;Password=пароль;
 +
Application Name=PrintReportAPI" />
 +
</appSettings>
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 3
 +
| Базовый адрес сервиса
 +
| URL PrintReportAPI
 +
| <syntaxhighlight lang="xml" enclose="div">
 +
<appSettings>
 +
  <add key="serviceAddress" value="http://localhost:7050/PrintReportAPI/" />
 +
</appSettings>
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 4
 +
| Имя службы
 +
| Текстовое имя сервиса
 +
| <syntaxhighlight lang="xml" enclose="div">
 +
<appSettings>
 +
  <add key="serviceName" value="MegatecPrintReportAPI" />
 +
</appSettings>
 +
</syntaxhighlight>
 +
 
 +
|- style="vertical-align:text-top"
 +
| 5
 +
| Тип общей платформы
 +
| "MasterTour"
 +
| <syntaxhighlight lang="xml" enclose="div">
 +
<appSettings>
 +
  <add key="CommonType" value="MasterTour" />
 +
</appSettings>
 +
</syntaxhighlight>
 +
|}
 +
'''Пример:'''<br>
 +
<syntaxhighlight lang="xml" enclose="div">
 +
<loggerSection>
 +
  <Loggers path="Logs">
 +
    <Logger level="ALL" name="ReportLoger" console="false" />
 +
  </Loggers>
 +
</loggerSection>
 +
</syntaxhighlight>
 +
 
 +
<syntaxhighlight lang="xml" enclose="div">
 +
<appSettings>
 +
  <add key="connectionString" value="Data Source=IP; Initial Catalog=DB;User Id=USER;Password=PWD;Application Name=PrintReportAPI" />
 +
  <add key="serviceAddress" value="http://localhost:7050/PrintReportAPI/" />
 +
  <add key="serviceName" value="MegatecPrintReportAPI" />
 +
  <add key="CommonType" value="MasterTour" />
 +
</appSettings>
 +
</syntaxhighlight>
 +
 
  
  
Строка 21: Строка 345:
 
Любая страница '''Личного кабинета''' содержит заголовок и меню для перехода на основные экраны.
 
Любая страница '''Личного кабинета''' содержит заголовок и меню для перехода на основные экраны.
 
В заголовке отображаются:
 
В заголовке отображаются:
* '''Контактные данные туроператора (телефон, email)''' предназначены для оперативной связи с отделом бронирования.
+
* '''Контактные данные туроператора (телефон, email)''' предназначены для оперативной связи с отделом бронирования.
* '''Курсы валют (список настраивается)''' отображают актуальные курсы, которые могут изменяться в зависимости от настроек.
+
* '''Курсы валют (список настраивается)''' отображают актуальные курсы, которые могут изменяться в зависимости от настроек.
* '''Логотип туроператора''' по умолчанию устанавливается логотип компании, но его можно заменить на пользовательский через настройки.
+
* '''Логотип туроператора''' по умолчанию устанавливается логотип компании, но его можно заменить на пользовательский через настройки.
* '''Ссылки на онлайн-бронирование''' позволяют агентам быстро перейти к оформлению новых заявок.
+
* '''Ссылки на онлайн–бронирование''' позволяют агентам быстро перейти к оформлению новых заявок.
* '''Название агентства, к которому привязан личный кабинет''' отображает текущее агентство, под учетной записью которого выполнен вход.
+
* '''Название агентства, к которому привязан личный кабинет''' отображает текущее агентство, под учетной записью которого выполнен вход.
* '''Ссылка на страницу оформления неформального заказа(кнопка "оставить заявку")''' предоставляет возможность оставить заявку без строгого соответствия стандартным параметрам бронирования.
+
* '''Ссылка на страницу оформления неформального заказа(кнопка "оставить заявку")''' предоставляет возможность оставить заявку без строгого соответствия стандартным параметрам бронирования.
* '''Кнопка выхода из личного кабинета''' завершает сессию пользователя.
+
* '''Кнопка выхода из личного кабинета''' завершает сессию пользователя.
  
  
Строка 48: Строка 372:
 
Список заявок доступен авторизованным пользователям по умолчанию после входа в систему или при выборе соответствующего пункта меню.
 
Список заявок доступен авторизованным пользователям по умолчанию после входа в систему или при выборе соответствующего пункта меню.
  
[[Файл:Ag 252.png|x500px|Список заказов]]
+
[[Файл:Ag 290.png|x500px|Список заказов]]
  
 
;Основной сценарий
 
;Основной сценарий
Строка 82: Строка 406:
 
*Город (город проживания в туре, по отелю)
 
*Город (город проживания в туре, по отелю)
 
*Название тура
 
*Название тура
*Скидка (комиссия) в нац валюте - слово скидка, есть залогинен частник, комиссия - если агент
+
*Скидка (комиссия) в нац валюте слово скидка, есть залогинен частник, комиссия если агент
*Скидка (комиссия) в валюте тура - слово скидка, есть залогинен частник, комиссия - если агент
+
*Скидка (комиссия) в валюте тура слово скидка, есть залогинен частник, комиссия если агент
 
*Оплачено в нац валюте
 
*Оплачено в нац валюте
 
*Оплачено в валюте заявки
 
*Оплачено в валюте заявки
Строка 125: Строка 449:
 
После выбора конкретной заявки из списка, пользователь попадает на страницу детальной информации по заказу. Данный экран позволяет просмотреть полную информацию о выбранной заявке, включая состав тура, данные туристов, расчеты, историю изменений и другую сопутствующую информацию.
 
После выбора конкретной заявки из списка, пользователь попадает на страницу детальной информации по заказу. Данный экран позволяет просмотреть полную информацию о выбранной заявке, включая состав тура, данные туристов, расчеты, историю изменений и другую сопутствующую информацию.
  
 
+
[[Файл:Ag 291.png|x1500px|Страница информации по заказу]]
[[Файл:Ag 279.png|x1500px|Страница информации по заказу]]
 
  
 
;Назначение
 
;Назначение
Строка 148: Строка 471:
  
 
==== Заголовок и действия ====
 
==== Заголовок и действия ====
[[Файл:Ag 280.png]]<br>
+
[[Файл:Ag 292.png]]<br>
 
Расположен в верхней части страницы и включает:
 
Расположен в верхней части страницы и включает:
* '''Название агентства''' указывается текущее агентство, от имени которого пользователь вошёл.
+
* '''Название агентства''' указывается текущее агентство, от имени которого пользователь вошёл.
* '''Основное меню навигации''' вкладки: ''Информация'', ''Заявки'', ''Бонусы'', ''Учётные данные'', ''Юридические документы''.
+
* '''Основное меню навигации''' вкладки: ''Информация'', ''Заявки'', ''Бонусы'', ''Учётные данные'', ''Юридические документы''.
* '''Номер заявки и даты поездки''' номер заявки выделен синим, продолжительность тура прописывается в скобках.
+
* '''Номер заявки и даты поездки''' номер заявки выделен синим, продолжительность тура прописывается в скобках.
 
* '''Кнопки управления:'''
 
* '''Кнопки управления:'''
** '''Оставить заявку''' предоставляет возможность оставить заявку без строгого соответствия стандартным параметрам бронирования.
+
** '''Оставить заявку''' предоставляет возможность оставить заявку без строгого соответствия стандартным параметрам бронирования.
** '''Запрос на аннуляцию''' подача заявки на аннуляцию текущего заказа.
+
** '''Запрос на аннуляцию''' подача заявки на аннуляцию текущего заказа.
** '''Отчёты''' доступ к печатным и финансовым документам по заявке.
+
** '''Отчёты''' доступ к печатным и финансовым документам по заявке.
* '''Контактные данные и текущий пользователь''' отображаются телефон и email туроператора, курсы валют, имя пользователя, кнопка выхода.
+
* '''Контактные данные и текущий пользователь''' отображаются телефон и email туроператора, курсы валют, имя пользователя, кнопка выхода.
  
  
 
==== Информация по заявке ====
 
==== Информация по заявке ====
[[Файл:Ag 281.png]]<br>
+
[[Файл:Ag 293.png]]<br>
 +
 
 
Находится в левом верхнем блоке. Содержит ключевые параметры заявки:
 
Находится в левом верхнем блоке. Содержит ключевые параметры заявки:
* '''Статус''' текущее состояние заявки.
+
* '''Статус''' текущее состояние заявки.
* '''Дата создания''' с точным временем оформления.
+
* '''Дата создания''' с точным временем оформления.
* '''Агентская комиссия''' процент комиссии.
+
* '''Агентская комиссия''' процент комиссии.
* '''Страна''' страна тура.
+
* '''Страна''' страна тура.
* '''Название тура''' отображается название тура.
+
* '''Название тура''' отображается название тура.
* '''Дата заезда и выезда''' даты тура.
+
* '''Дата заезда и выезда''' даты тура.
  
  
  
 
==== Финансы ====
 
==== Финансы ====
[[Файл:Ag 282.png]]<br>
+
[[Файл:Ag 296.png]]<br>
 
Находится в правом верхнем блоке и включает:
 
Находится в правом верхнем блоке и включает:
* '''Стоимость тура''' полная цена.
+
* '''Стоимость тура''' полная цена.
* '''Комиссия*''' отображается в процентах и сумме.
+
* '''Комиссия*''' отображается в процентах и сумме.
* '''Курс валюты''' при необходимости указывается курс расчёта.
+
* '''Курс валюты''' при необходимости указывается курс расчёта.
* '''Скидка клиенту''' если применима.
+
* '''Скидка клиенту''' если применима.
* '''Оплачено''' сумма, уже внесённая клиентом.
+
* '''Оплачено''' сумма, уже внесённая клиентом.
* '''Задолженность''' остаток к оплате.
+
* '''Задолженность''' остаток к оплате.
* '''Дата предоплаты / сумма предоплаты''' используются для планирования платежей.
+
* '''Дата предоплаты / сумма предоплаты''' используются для планирования платежей.
* '''Дата полной оплаты''' крайний срок для внесения всех средств.
+
* '''Дата полной оплаты''' крайний срок для внесения всех средств.
 +
 
 +
=====Подключение отчётных форм=====
  
 +
======Общие положения======
 +
* Для отображения ссылки и печати отчёта в Личном кабинете необходимо добавить соответствующую запись в файле [[Мастер-Тур(15):Личный Кабинет (ЛК)#Настройки клиента Личного кабинета (AccountClient)|settings.json]] клиента ЛК. В массиве ''ORDER_REPORTS'' каждая запись соответствует одной печатной форме.
 +
* На текущий момент поддерживается подключение печатных форм '''типа 4001'''.
 +
* Каждый подключаемый отчёт печатается по '''GUID профиля'''. Для нестандартных профилей требуется уникальный GUID.
  
 +
======Требования к профилю и GUID======
 +
* Профиль отчёта, предназначенный для печати в ЛК, должен иметь '''уникальный GUID'''.
 +
* GUID можно получить:
 +
  * из установочного файла профиля (файл вида ''Report4xxx.xml'', строка ''<GUID>…</GUID>''),
 +
  * либо запросом к БД:
 +
<syntaxhighlight lang="sql" enclose="div">
 +
SELECT *
 +
FROM Rep_Profiles
 +
WHERE RP_RepKey = 4001; -- номер отчёта
 +
</syntaxhighlight>
 +
* Если установлено несколько профилей одного отчёта, '''каждому''' присваивается свой GUID.
  
 
==== Услуги ====
 
==== Услуги ====
[[Файл:Ag 283.png]]<br>
+
[[Файл:Ag 294.png]]<br>
 
Блок со списком всех туристических услуг, входящих в заявку:
 
Блок со списком всех туристических услуг, входящих в заявку:
* '''Дата''' дата начала услуги.
+
* '''Дата''' дата начала услуги.
* '''День''' день предоставления услуги.
+
* '''День''' день предоставления услуги.
* '''Продолжительность''' продолжительность услуги.
+
* '''Продолжительность''' продолжительность услуги.
* '''Услуга''' подробное описание услуги (например, перелёты, отели, трансферы).
+
* '''Услуга''' подробное описание услуги (например, перелёты, отели, трансферы).
* '''Человек''' количество туристов, участвующих в услуге.
+
* '''Человек''' количество туристов, участвующих в услуге.
* '''Статус''' статус услуги.
+
* '''Статус''' статус услуги.
  
 
Дополнительно:
 
Дополнительно:
Строка 203: Строка 544:
 
==== Туристы ====
 
==== Туристы ====
 
[[Файл:Ag 284.png]]<br>
 
[[Файл:Ag 284.png]]<br>
Таблица с информацией по каждому туристу в заявке(символом [[Файл:Ag 285.png]] обозначается главный турист по заявке)
+
Таблица с информацией по каждому туристу в заявке(символом [[Файл:Ag 285.png]] обозначается главный турист по заявке):
:
+
* '''Пол''' обозначение пола туриста.
* '''Пол''' обозначение пола туриста.
+
* '''Фамилия и имя''' в латинской транслитерации, если применимо.
* '''Фамилия и имя''' в латинской транслитерации, если применимо.
 
 
* *'''Дата рождения'''
 
* *'''Дата рождения'''
* '''Паспорт''' серия и номер паспорта
+
* '''Паспорт''' серия и номер паспорта
* '''Виза''' статус или информация о наличии визы (может быть пустым, если виза не требуется или ещё не оформлена).
+
* '''Виза''' статус или информация о наличии визы (может быть пустым, если виза не требуется или ещё не оформлена).
  
  
  
 
==== Чат ====
 
==== Чат ====
[[Файл:Ag 286.png]]<br>
+
[[Файл:Ag 295.png]]<br>
 +
 
 
Раздел для общения между агентом и туроператором:
 
Раздел для общения между агентом и туроператором:
 
* Каждое сообщение сопровождается датой, временем и именем отправителя.
 
* Каждое сообщение сопровождается датой, временем и именем отправителя.
Строка 226: Строка 567:
 
[[Файл:Ag 287.png]]<br>
 
[[Файл:Ag 287.png]]<br>
 
Раздел предназначен для загрузки и просмотра файлов по заявке:
 
Раздел предназначен для загрузки и просмотра файлов по заявке:
* '''Список загруженных файлов''' отображаются прикрепленные документы.
+
* '''Список загруженных файлов''' отображаются прикрепленные документы.
* '''Категории''' могут быть разбиты по типам.
+
* '''Категории''' могут быть разбиты по типам.
* '''Кнопка "Загрузка"''' позволяет загрузить документы с окна информации о путевке.
+
* '''Кнопка "Загрузка"''' позволяет загрузить документы с окна информации о путевке.
  
  
  
 
==== История изменений ====
 
==== История изменений ====
[[Файл:Ag 288.png]]<br>
+
[[Файл:Ag 297.png]]<br>
 
Хронологический список изменений по заявке:
 
Хронологический список изменений по заявке:
 
* Каждая запись содержит '''дату''' и '''описание изменения''' (например, изменение данных туриста, паспорта и т. д.)
 
* Каждая запись содержит '''дату''' и '''описание изменения''' (например, изменение данных туриста, паспорта и т. д.)
Строка 245: Строка 586:
  
 
; Цветовая индикация
 
; Цветовая индикация
* 🟩 '''Свободно''' место доступно для бронирования
+
* 🟩 '''Свободно''' место доступно для бронирования
* 🟥 '''Занято''' место уже выбрано другим туристом
+
* 🟥 '''Занято''' место уже выбрано другим туристом
 
* <span style="display:inline-block;width:1em;height:1em;background:#aaa;margin:0 0.3em 0 3px;"></span> '''Заблокировано''' — место нельзя выбрать (например, резерв, санитарная зона и т.п.)
 
* <span style="display:inline-block;width:1em;height:1em;background:#aaa;margin:0 0.3em 0 3px;"></span> '''Заблокировано''' — место нельзя выбрать (например, резерв, санитарная зона и т.п.)
  
Строка 255: Строка 596:
 
* Схема рассадки разделена на зоны (например, "ЗОНА 1", "ЗОНА 2")
 
* Схема рассадки разделена на зоны (например, "ЗОНА 1", "ЗОНА 2")
 
* Каждое место имеет уникальный номер и может содержать символы:
 
* Каждое место имеет уникальный номер и может содержать символы:
** ''П'' проход
+
** ''П'' проход
** ''Л'', ''П'' левая/правая сторона
+
** ''Л'', ''П'' левая/правая сторона
** ''*'', ''**'', ''&&'' специальные метки, уточняющие особенности места (например, приоритетное, техническое, нестандартное)
+
** ''*'', ''**'', ''&&'' специальные метки, уточняющие особенности места (например, приоритетное, техническое, нестандартное)
  
 
; Поведение
 
; Поведение
 
* Пользователь может просматривать занятость мест в реальном времени.
 
* Пользователь может просматривать занятость мест в реальном времени.
 
* При нажатии может зафиксировать место за туристом.
 
* При нажатии может зафиксировать место за туристом.

Текущая версия на 19:51, 22 октября 2025

Статья находится на стадии разработки.

Версия статьи от 22-10-2025.


Введение

Личный кабинет — это веб-интерфейс, предназначенный для турагентств и их сотрудников, предоставляющий доступ к информации о заказах, финансовых операциях и другим важным данным. В нём реализованы функции управления бронированиями, взаимодействия с туроператором и контроля платежей.

Основные возможности личного кабинета:

  • Просмотр списка заказов с детальной информацией – позволяет агентам быстро получать сведения о бронированиях, статусах заявок, суммах оплат и задолженностях.
  • Фильтрация и сортировка заявок – помогает находить нужные заявки по заданным параметрам (номер заявки, фамилия туриста, даты поездки и т. д.).
  • Управление учётными данными агентства – включает редактирование контактной информации, реквизитов компании и управление учетными записями сотрудников.
  • Доступ к финансовой информации и отчетам – позволяет просматривать суммы оплат, задолженности и формировать отчёты для контроля финансовых операций.
  • Взаимодействие с туроператором через сообщения и уведомления – обеспечивает связь между агентством и туроператором, уведомляя о важных изменениях и позволяя вести переписку.

Настройки личного кабинета

Перед использованием Личного кабинета необходимо настроить файлы конфигурации для сервисов AccountClient, AccountService и PrintReportAPI

Настройки клиента Личного кабинета (AccountClient)

настройки, задаваемые в файле settings.json

Описание Значение Настройка
1 Базовый адрес сервиса URL сервиса (HTTP/HTTPS)
{
  "API_URL": "http://localhost:7000"
}
2 Перечень отчётов, доступных к печати Массив объектов; каждый элемент — один отчёт
{
  "ORDER_REPORTS": [ { /* элементы см. пп. 3–6 */ } ]
}
3 Идентификатор отчёта "series" — строковый код/номер отчёта
{ "series": "4001" }
4 Заголовок отчёта в интерфейсе Строка для отображения в меню «Отчёты»
{ "title": "Лист бронирования" }
5 Профиль отчёта "guid" — уникальный GUID используемого профиля
{ "guid": "E147D680-AF8C-414C-958F-E0F2C2E4E592" }

Пример:

{
  "API_URL": "http://localhost:7000",
  "ORDER_REPORTS": [
    {
      "series": "ARM",
      "title": "Отчёт агента",
      "guid": "57E0E9DB-8F20-4151-B0D4-40F1138D5E01"
    }
  ]
}

Примечание. Для каждого подключённого отчёта должен использоваться корректный GUID профиля, существующий в базе.

Настройки аккаунт сервиса (AccountService)

настройки, задаваемые в файле appsettings.json

Описание Значение Настройка
1 Ключ и TTL JWT-токена Секрет и время жизни (в минутах)
"Jwt": {
  "Key": "SecretKey10125779374235322",
  "TokenValidityInMinutes": 100
}
2 Тип используемой СУБД 1 — Microsoft SQL Server; 2 — PostgreSQL; … до 5; 6–9 — зарезервировано
"ConnectionParameters": { "databaseType": 1}
3 Адрес сервера БД Имя/адрес инстанса
"ConnectionParameters": { "server": "ip-адрес сервера базы данных ПК Мастер-Тур" }
4 Имя базы данных Название БД
"ConnectionParameters": { "database": "название базы данных ПК Мастер-Тур" }
5 Учётные данные БД Пользователь и пароль
"ConnectionParameters": {
  "user": "логин пользователя ПК Мастер-Тур",
  "password": "пароль пользователя ПК Мастер-Тур"
}
6 Имя приложения в коннекте Для трассировки в БД
"ConnectionParameters": { "appName": "MegatecAccountService" }
7 Логирование сервиса: включить консоль true/false
"Logger": { "EnableConsole": true, ... }
8 Путь к лог-файлам Папка ("" — отключено)
"Logger": { "FilePath": "" }
9 Ротация логов по размеру Максимальный размер (МБ) и число файлов
"Logger": {
  "MaxLogFileSize": 10,
  "MaxOldLogFilesCount": 30
}
10 Имя службы и адрес(а) прослушивания ServiceName и список URL
"Install": {
  "ServiceName": "MegatecAccountService",
  "ServiceAddress": [ "http://*:7000" ]
}
11 IP-интерфейс привязки IPv6Any / конкретный IP
"Install": { "IPAddress": "IPAddress.IPv6Any" }
12 Адрес удалённого сервиса печати отчетов Базовый URL PrintReportAPI
"RemoteServices": {
  "ReportServiceUrl": "http://localhost:7050/PrintReportAPI/"
}
13 Разрешённые хосты "*" — без ограничений
"AllowedHosts": "*"

Пример:

{
  "Jwt": {
    "Key": "SecretKey10125779374235322",
    //"Issuer": "https://localhost:44341",
    //"Audience": "https://localhost:44341",
    "TokenValidityInMinutes": 100
  },
  "ConnectionParameters": {
    // Database types:
    //      "Micrisoft_SQLServer" = 1 
    //      "PostgreSQL" = 2
    //       ... to 5
    // For databases not supported with EF Core reserved numbers from 6 to 9
    "databaseType": 1,
    "server": "ip-адрес сервера базы данных ПК Мастер-Тур",
    "database": "название базы данных ПК Мастер-Тур",
    "user": "логин пользователя ПК Мастер-Тур",
    "password": "пароль пользователя ПК Мастер-Тур",
    "appName": "MegatecAccountService"
  },
  "Logger": {
    "EnableConsole": true,
    "FilePath": "",
    "MaxLogFileSize": 10, // МБ
    "MaxOldLogFilesCount": 30
  },
  "Install": {
    "ServiceName": "MegatecAccountService",
    "ServiceAddress": [ "http://localhost:7000" ],
    "IPAddress": "IPAddress.IPv6Any"
  },
    "RemoteServices": {
    "ReportServiceUrl": "http://localhost:7050/PrintReportAPI/"
  },
  "AllowedHosts": "*"
}

Настройки сервиса печати отчетов (PrintReportAPI)

Служба печати генерирует файл отчёта по переданному идентификатору и профилю.

Описание Значение Настройка
1 Параметры логирования Путь к логам, уровень, вывод в консоль
<loggerSection>
  <Loggers path="Logs">
    <Logger level="ALL" name="ReportLoger" console="false" />
  </Loggers>
</loggerSection>
2 Строка подключения к БД Data Source, Initial Catalog, User Id, Password, Application Name
<appSettings>
  <add key="connectionString"
       value="Data Source=ip-адрес сервера;
Initial Catalog=название базы;
User Id=логин пользователя;Password=пароль;
Application Name=PrintReportAPI" />
</appSettings>
3 Базовый адрес сервиса URL PrintReportAPI
<appSettings>
  <add key="serviceAddress" value="http://localhost:7050/PrintReportAPI/" />
</appSettings>
4 Имя службы Текстовое имя сервиса
<appSettings>
  <add key="serviceName" value="MegatecPrintReportAPI" />
</appSettings>
5 Тип общей платформы "MasterTour"
<appSettings>
  <add key="CommonType" value="MasterTour" />
</appSettings>

Пример:

<loggerSection>
  <Loggers path="Logs">
    <Logger level="ALL" name="ReportLoger" console="false" />
  </Loggers>
</loggerSection>
<appSettings>
  <add key="connectionString" value="Data Source=IP; Initial Catalog=DB;User Id=USER;Password=PWD;Application Name=PrintReportAPI" />
  <add key="serviceAddress" value="http://localhost:7050/PrintReportAPI/" />
  <add key="serviceName" value="MegatecPrintReportAPI" />
  <add key="CommonType" value="MasterTour" />
</appSettings>



Заголовок и общие элементы страницы «Личный кабинет»

Любая страница Личного кабинета содержит заголовок и меню для перехода на основные экраны. В заголовке отображаются:

  • Контактные данные туроператора (телефон, email) – предназначены для оперативной связи с отделом бронирования.
  • Курсы валют (список настраивается) – отображают актуальные курсы, которые могут изменяться в зависимости от настроек.
  • Логотип туроператора – по умолчанию устанавливается логотип компании, но его можно заменить на пользовательский через настройки.
  • Ссылки на онлайн–бронирование – позволяют агентам быстро перейти к оформлению новых заявок.
  • Название агентства, к которому привязан личный кабинет – отображает текущее агентство, под учетной записью которого выполнен вход.
  • Ссылка на страницу оформления неформального заказа(кнопка "оставить заявку") – предоставляет возможность оставить заявку без строгого соответствия стандартным параметрам бронирования.
  • Кнопка выхода из личного кабинета – завершает сессию пользователя.


После авторизации пользователь попадает на основную страницу Личного кабинета, с которой может перейти к другим разделам через меню.

Заголовок и общие элементы страницы «Личный кабинет»


Основное меню
  • Информация
  • Заявки
  • Бонусы
  • Учётные данные
  • Юридические документы

После выбора раздела открывается соответствующий экран.

Заявки

Список заявок доступен авторизованным пользователям по умолчанию после входа в систему или при выборе соответствующего пункта меню.

Список заказов

Основной сценарий

Пользователь заходит в личный кабинет. Отображается список заказов с учётом прав доступа. По умолчанию заявки отсортированы по дате оформления (новые сверху), сортировка регулируется стрелками в заголовках таблицы.

Настройки отображения
  • Количество строк на странице (по умолчанию 20)
    • Элемент управления: раскрывающееся меню в правом нижнем углу списка заказов.
    • Пользователь может выбрать количество отображаемых строк: 20, 50 или 100.
    • Выбранное значение сохраняется в cookies браузера и применяется при следующем входе.
    • Возможные ошибки: при сбое cookies настройки могут сбрасываться.

Настройка количества строк на странице


  • Возможность настройки видимых столбцов
    • Элемент управления: кнопка «Настройки» в правом верхнем углу таблицы списка заказов.
    • При нажатии открывается всплывающее окно со списком всех доступных колонок.
    • Для включения/отключения колонки используются чекбоксы.
    • Выбранные настройки сохраняются в cookies.

Выбор видимых столбцов

По умолчанию отображаются:

  • Номер заявки
  • Страна (страна проведения тура)
  • Дата заезда
  • Главный турист по заявке
  • Статус заявки
  • Стоимость
  • Долг в валюте заявки

Дополнительные столбцы (по настройке)

  • Город (город проживания в туре, по отелю)
  • Название тура
  • Скидка (комиссия) в нац валюте – слово скидка, есть залогинен частник, комиссия – если агент
  • Скидка (комиссия) в валюте тура – слово скидка, есть залогинен частник, комиссия – если агент
  • Оплачено в нац валюте
  • Оплачено в валюте заявки
  • Долг в нац валюте
  • Полная стоимость в нац валюте
  • Полная стоимость в валюте
  • Полная стоимость в нац валюте за вычетом комиссии
  • Полная стоимость в валюте заявки за вычетом комиссии
  • Менеджер
  • Статус визы
  • Дата окончания тура
  • Предоплата до
  • Полная оплата до
  • Число туристов
  • Менеджер
  • Дата оформления


Фильтры поиска

Фильтры поиска в списке заказов

Фильтрация заявок осуществляется по следующим параметрам:

  • Номер заявки
  • Фамилия туриста
  • Статус визы
  • Страна тура
  • Даты тура (с, по)
  • Дата оформления заявки
  • Наличие визы
  • Наличие задолженности
  • Срок полной оплаты

Дополнительные условия

  • Любые изменения фильтров сохраняются для пользователя.
  • Фильтры «С наличием визы» и «Задолженность» запоминаются между сеансами.

После выбора заявки осуществляется переход на страницу с детальной информацией по заказу (OrderInfo).

Информация по заказу (OrderInfo)

После выбора конкретной заявки из списка, пользователь попадает на страницу детальной информации по заказу. Данный экран позволяет просмотреть полную информацию о выбранной заявке, включая состав тура, данные туристов, расчеты, историю изменений и другую сопутствующую информацию.

Страница информации по заказу

Назначение

Экран предназначен для:

  • Просмотра всех деталей заявки
  • Отслеживания истории изменений по заказу
  • Контроля финансовых расчётов
  • Проверки актуальности виз, оплаты и сроков

Структура страницы

Страница состоит из следующих информационных и функциональных блоков:

  • Заголовок и действия
  • Информация по заявке
  • Финансы
  • Услуги
  • Туристы
  • Чат
  • Документы
  • История изменений

Заголовок и действия

Ag 292.png
Расположен в верхней части страницы и включает:

  • Название агентства – указывается текущее агентство, от имени которого пользователь вошёл.
  • Основное меню навигации – вкладки: Информация, Заявки, Бонусы, Учётные данные, Юридические документы.
  • Номер заявки и даты поездки – номер заявки выделен синим, продолжительность тура прописывается в скобках.
  • Кнопки управления:
    • Оставить заявку – предоставляет возможность оставить заявку без строгого соответствия стандартным параметрам бронирования.
    • Запрос на аннуляцию – подача заявки на аннуляцию текущего заказа.
    • Отчёты – доступ к печатным и финансовым документам по заявке.
  • Контактные данные и текущий пользователь – отображаются телефон и email туроператора, курсы валют, имя пользователя, кнопка выхода.


Информация по заявке

Ag 293.png

Находится в левом верхнем блоке. Содержит ключевые параметры заявки:

  • Статус – текущее состояние заявки.
  • Дата создания – с точным временем оформления.
  • Агентская комиссия – процент комиссии.
  • Страна – страна тура.
  • Название тура – отображается название тура.
  • Дата заезда и выезда – даты тура.


Финансы

Ag 296.png
Находится в правом верхнем блоке и включает:

  • Стоимость тура – полная цена.
  • Комиссия* – отображается в процентах и сумме.
  • Курс валюты – при необходимости указывается курс расчёта.
  • Скидка клиенту – если применима.
  • Оплачено – сумма, уже внесённая клиентом.
  • Задолженность – остаток к оплате.
  • Дата предоплаты / сумма предоплаты – используются для планирования платежей.
  • Дата полной оплаты – крайний срок для внесения всех средств.
Подключение отчётных форм
Общие положения
  • Для отображения ссылки и печати отчёта в Личном кабинете необходимо добавить соответствующую запись в файле settings.json клиента ЛК. В массиве ORDER_REPORTS каждая запись соответствует одной печатной форме.
  • На текущий момент поддерживается подключение печатных форм типа 4001.
  • Каждый подключаемый отчёт печатается по GUID профиля. Для нестандартных профилей требуется уникальный GUID.
Требования к профилю и GUID
  • Профиль отчёта, предназначенный для печати в ЛК, должен иметь уникальный GUID.
  • GUID можно получить:
 * из установочного файла профиля (файл вида Report4xxx.xml, строка <GUID>…</GUID>),
 * либо запросом к БД:
SELECT * 
FROM Rep_Profiles 
WHERE RP_RepKey = 4001; -- номер отчёта
  • Если установлено несколько профилей одного отчёта, каждому присваивается свой GUID.

Услуги

Ag 294.png
Блок со списком всех туристических услуг, входящих в заявку:

  • Дата – дата начала услуги.
  • День – день предоставления услуги.
  • Продолжительность – продолжительность услуги.
  • Услуга – подробное описание услуги (например, перелёты, отели, трансферы).
  • Человек – количество туристов, участвующих в услуге.
  • Статус – статус услуги.

Дополнительно:

  • Кнопка «Раскрыть колонки» позволяет настроить отображаемые поля таблицы.


Туристы

Ag 284.png
Таблица с информацией по каждому туристу в заявке(символом Ag 285.png обозначается главный турист по заявке):

  • Пол – обозначение пола туриста.
  • Фамилия и имя – в латинской транслитерации, если применимо.
  • *Дата рождения
  • Паспорт – серия и номер паспорта
  • Виза – статус или информация о наличии визы (может быть пустым, если виза не требуется или ещё не оформлена).


Чат

Ag 295.png

Раздел для общения между агентом и туроператором:

  • Каждое сообщение сопровождается датой, временем и именем отправителя.
  • Новое сообщение вводится в текстовом поле снизу.
  • Для отправки используется кнопка со стрелкой.
  • Поддерживается вертикальный скролл в истории сообщений.


Документы

Ag 287.png
Раздел предназначен для загрузки и просмотра файлов по заявке:

  • Список загруженных файлов – отображаются прикрепленные документы.
  • Категории – могут быть разбиты по типам.
  • Кнопка "Загрузка" – позволяет загрузить документы с окна информации о путевке.


История изменений

Ag 297.png
Хронологический список изменений по заявке:

  • Каждая запись содержит дату и описание изменения (например, изменение данных туриста, паспорта и т. д.)
  • Изменения фиксируются автоматически при любом действии с данными заявки.

План рассадки

Ag 289.png

Раздел отображает визуальную схему рассадки туристов, применимую, например, для трансферов, автобусов или ж/д переездов.

Цветовая индикация
  • 🟩 Свободно – место доступно для бронирования
  • 🟥 Занято – место уже выбрано другим туристом
  • Заблокировано — место нельзя выбрать (например, резерв, санитарная зона и т.п.)



Структура отображения
  • Схема рассадки разделена на зоны (например, "ЗОНА 1", "ЗОНА 2")
  • Каждое место имеет уникальный номер и может содержать символы:
    • П – проход
    • Л, П – левая/правая сторона
    • *, **, && – специальные метки, уточняющие особенности места (например, приоритетное, техническое, нестандартное)
Поведение
  • Пользователь может просматривать занятость мест в реальном времени.
  • При нажатии может зафиксировать место за туристом.