| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- using TravelAgencyWinForms.Models;
- namespace TravelAgencyWinForms.Services;
- public static class EntityConfigs
- {
- public static EntityConfig Clients => new()
- {
- Title = "Клиенты",
- TableName = "clients",
- OrderBy = "client_id",
- Fields = new()
- {
- Id("client_id", "ID"),
- Text("first_name", "Имя", true),
- Text("last_name", "Фамилия", true),
- Text("middle_name", "Отчество"),
- Text("passport_data", "Паспорт", true),
- Text("phone", "Телефон"),
- Text("email", "Email"),
- Date("registration_date", "Дата регистрации", true)
- }
- };
- public static EntityConfig Positions => new()
- {
- Title = "Должности",
- TableName = "positions",
- OrderBy = "position_id",
- Fields = new()
- {
- Id("position_id", "ID"),
- Text("name", "Название", true),
- Decimal("salary", "Зарплата", true)
- }
- };
- public static EntityConfig Employees => new()
- {
- Title = "Сотрудники",
- TableName = "employees",
- OrderBy = "employee_id",
- Fields = new()
- {
- Id("employee_id", "ID"),
- Text("first_name", "Имя", true),
- Text("last_name", "Фамилия", true),
- Text("middle_name", "Отчество"),
- Text("passport_data", "Паспорт", true),
- Text("phone", "Телефон"),
- Date("birth_date", "Дата рождения"),
- Lookup("position_id", "Должность", true,
- "SELECT position_id AS id, name FROM positions ORDER BY name", "id", "name")
- }
- };
- public static EntityConfig Cities => new()
- {
- Title = "Города",
- TableName = "cities",
- OrderBy = "city_id",
- Fields = new()
- {
- Id("city_id", "ID"),
- Text("city_name", "Название города", true)
- }
- };
- public static EntityConfig Tours => new()
- {
- Title = "Туры",
- TableName = "tours",
- OrderBy = "tour_id",
- Fields = new()
- {
- Id("tour_id", "ID"),
- Text("name", "Название тура", true),
- Decimal("price", "Стоимость", true)
- }
- };
- public static EntityConfig TourCities => new()
- {
- Title = "Города в турах",
- TableName = "tour_cities",
- OrderBy = "tour_id, city_id",
- Fields = new()
- {
- Lookup("tour_id", "Тур", true,
- "SELECT tour_id AS id, name FROM tours ORDER BY name", "id", "name", isKey: true),
- Lookup("city_id", "Город", true,
- "SELECT city_id AS id, city_name AS name FROM cities ORDER BY city_name", "id", "name", isKey: true)
- }
- };
- public static EntityConfig TourList => new()
- {
- Title = "Расписание туров",
- TableName = "tour_list",
- OrderBy = "tour_list_id",
- Fields = new()
- {
- Id("tour_list_id", "ID"),
- Lookup("tour_id", "Тур", true,
- "SELECT tour_id AS id, name FROM tours ORDER BY name", "id", "name"),
- Date("start_date", "Дата начала", true),
- Date("end_date", "Дата окончания", true)
- }
- };
- public static EntityConfig Bookings => new()
- {
- Title = "Бронирования",
- TableName = "bookings",
- OrderBy = "booking_id",
- Fields = new()
- {
- Id("booking_id", "ID"),
- Text("booking_number", "Номер бронирования", true),
- Lookup("client_id", "Клиент", true,
- "SELECT client_id AS id, concat_ws(' ', last_name, first_name, middle_name) AS name FROM clients ORDER BY last_name, first_name", "id", "name"),
- Lookup("employee_id", "Сотрудник", true,
- "SELECT employee_id AS id, concat_ws(' ', last_name, first_name, middle_name) AS name FROM employees ORDER BY last_name, first_name", "id", "name"),
- Lookup("tour_list_id", "Тур из расписания", true,
- "SELECT tour_list_id AS id, tour_name || ' (' || start_date || ' - ' || end_date || ')' AS name FROM v_tour_schedule ORDER BY start_date", "id", "name"),
- Date("booking_date", "Дата оформления", true),
- Enum("status", "Статус", true, "новая", "подтверждена", "оплачена", "отменена")
- }
- };
- public static EntityConfig AppUsers => new()
- {
- Title = "Пользователи приложения",
- TableName = "app_users",
- OrderBy = "user_id",
- Fields = new()
- {
- Id("user_id", "ID"),
- Text("login", "Логин", true),
- Password("password_hash", "Пароль", false),
- Enum("role", "Роль", true, "admin", "user"),
- Bool("is_active", "Активен", true),
- Lookup("employee_id", "Связанная запись", false,
- "SELECT employee_id AS id, concat_ws(' ', last_name, first_name, middle_name) AS name FROM employees ORDER BY last_name, first_name", "id", "name")
- }
- };
- public static EntityConfig ClientDetails => ReadOnlyView("Мои данные клиента", "clients", "client_id", true, "client_id");
- public static EntityConfig BookingDetails => ReadOnlyView("Бронирования подробно", "v_booking_details", "booking_id", false, null);
- public static EntityConfig TourScheduleView => ReadOnlyView("Расписание туров", "v_tour_schedule", "tour_list_id", false, null);
- public static EntityConfig OverdueView => ReadOnlyView("Просроченные бронирования", "v_overdue_client_bookings", "booking_id", false, null);
- public static EntityConfig AuditLog => ReadOnlyView("Журнал операций", "audit_log", "changed_at DESC", false, null);
- public static EntityConfig UserBookings => ReadOnlyView("Мои бронирования", "v_booking_details", "booking_id", true, "client_id");
- public static EntityConfig UserOverdue => ReadOnlyView("Мои просроченные бронирования", "v_overdue_client_bookings", "booking_id", true, "client_id");
- private static EntityConfig ReadOnlyView(string title, string view, string orderBy, bool restrict, string? restrictColumn)
- {
- return new EntityConfig
- {
- Title = title,
- TableName = view,
- ViewName = view,
- OrderBy = orderBy,
- ReadOnly = true,
- RestrictByCurrentEmployee = restrict,
- RestrictColumn = restrictColumn,
- Fields = new()
- };
- }
- private static FieldConfig Id(string name, string label) => new()
- {
- Name = name,
- Label = label,
- Kind = FieldKind.Integer,
- IsKey = true,
- AutoIdentity = true,
- ReadOnlyOnEdit = true
- };
- private static FieldConfig Text(string name, string label, bool required = false) => new()
- {
- Name = name,
- Label = label,
- Kind = FieldKind.Text,
- Required = required
- };
- private static FieldConfig Password(string name, string label, bool required = false) => new()
- {
- Name = name,
- Label = label,
- Kind = FieldKind.Password,
- Required = required,
- ShowInGrid = false
- };
- private static FieldConfig Decimal(string name, string label, bool required = false) => new()
- {
- Name = name,
- Label = label,
- Kind = FieldKind.Decimal,
- Required = required
- };
- private static FieldConfig Date(string name, string label, bool required = false) => new()
- {
- Name = name,
- Label = label,
- Kind = FieldKind.Date,
- Required = required
- };
- private static FieldConfig Bool(string name, string label, bool required = false) => new()
- {
- Name = name,
- Label = label,
- Kind = FieldKind.Boolean,
- Required = required
- };
- private static FieldConfig Enum(string name, string label, bool required, params string[] options) => new()
- {
- Name = name,
- Label = label,
- Kind = FieldKind.Enum,
- Required = required,
- Options = options
- };
- private static FieldConfig Lookup(
- string name,
- string label,
- bool required,
- string sql,
- string valueColumn,
- string displayColumn,
- bool isKey = false) => new()
- {
- Name = name,
- Label = label,
- Kind = FieldKind.Lookup,
- Required = required,
- LookupSql = sql,
- LookupValueColumn = valueColumn,
- LookupDisplayColumn = displayColumn,
- IsKey = isKey,
- AutoIdentity = false,
- ReadOnlyOnEdit = isKey
- };
- }
|